linux 内核启动过程中网络驱动不能启动的问题? - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7999|回复: 7
打印 上一主题 下一主题

[未解决] linux 内核启动过程中网络驱动不能启动的问题?

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题" @7 @' Z+ X2 I7 Y5 Z- f
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1& E( a8 \/ ?. |7 n' b- Q$ w
[    2.107743] davinci_mdio.0: probed
9 w5 S. Z0 T9 }9 x2 s[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
% F6 J" i+ U" G) q) e) Y[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
/ q$ Q  @/ S- X8 z/ g, j; ^1 ?' U[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
) j% a  f# F$ K+ b4 r* }6 R0 B+ i" J6 ?+ r4 X% f
[    2.137188] PPP generic driver version 2.4.2
5 Z9 J0 B$ i" Q' ?[    2.143236] PPP BSD Compression module registered! F3 h/ w6 N8 O

8 u; v4 Y1 F& {( @3 r
' N1 e0 ~& B: k* E- |& L* S在linux内核中的代码应该是以下:
6 A" ?5 ]7 w- g# X        // 注册mii_bus* D6 [) ], f* @+ w; M' x$ c0 F
        /* register the mii bus 2.   注册mii bus 2*/
# U% a5 _1 u+ R8 S. u9 Q" Y. E; T        ret = mdiobus_register(data->bus);
7 X1 J- [# |/ l6 P' i        if (ret)# `7 v1 E" l0 e+ S2 s6 f( i
                goto bail_out;4 h% H! \7 H2 c0 P: i; p1 q# ]
7 |) l; y" g2 o( [; ]
        /* scan and dump the bus 扫描和转储总线*/2 j% h: n5 W7 m
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {, j" k2 K+ ^3 \* N1 W
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据: a0 L6 M. q. ^/ p
                if (phy) {! B& Y+ v8 J# `
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
* S  C. C6 u- v3 d                                 phy->addr, dev_name(&phy->dev),( ^8 {6 P% f1 u0 t& x  W8 o, d
                                 phy->drv ? phy->drv->name : "unknown");& d5 v0 {( o3 l8 X0 C
                }
( u2 R: \- u- m) f$ W% S7 P        }
! A% v$ C2 @5 w( k4 F, e  |  U5 R0 y# d: \
" J* q7 n5 h; n3 ~7 H8 q3 U
最终在后面 网络启动有问题
2 A. s% O* k* s' N0 f[    2.387752] PHY davinci_mdio-0:00 not found
6 K1 l& i& V$ b! v$ v[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
  B$ i6 F1 t( Y  b( \: w[    2.398254] IP-Config: Failed to open eth0& `( H$ O9 f8 g. b
[    2.402589] IP-Config: No network devices available.$ H/ _+ s" T: {4 I
8 x, @& \7 [: C: x4 M
) s. O, C. l5 H+ m

/ k+ E. A+ M) y1,请问下,这是什么原因造成的?5 M; v8 L5 {4 b8 M1 d- `6 B
2,phy模块 和网络驱动开发的过程 是什么样的关系?
* z. ?7 j& M) T+ n2 a8 q! t谢谢( M1 [7 m" U$ ]3 R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

83

帖子

426

积分

创龙

Rank: 8Rank: 8

积分
426
沙发
发表于 2017-4-14 08:34:48 | 只看该作者
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
板凳
 楼主| 发表于 2017-4-14 09:33:48 | 只看该作者
vefone 发表于 2017-4-14 08:34# j6 P8 J# C( J
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
: r) j$ E; i3 n9 t, H& q% Y* i
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,% ~6 B: ~5 I. i; }$ w- T7 E
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
% d& v1 e% L! t0 S谢谢

点评

linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。 一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配  详情 回复 发表于 2017-4-17 20:40
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
地板
发表于 2017-4-14 14:46:38 | 只看该作者
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
回复 支持 反对

使用道具 举报

0

主题

83

帖子

426

积分

创龙

Rank: 8Rank: 8

积分
426
5#
发表于 2017-4-17 20:40:02 | 只看该作者
小石 发表于 2017-4-14 09:33
2 v7 [5 G3 O' C: r# a用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

3 p& H7 J; ^2 `# X9 X3 N4 rlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
1 M9 g$ g& N! C" r: ?# o! d! ?一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46; _, q6 |0 g; g9 ?4 r: t: b2 j% T
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

0 g/ j. _! q; L) X! w. e请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?4 J/ o4 R' V; q* h
在linux启动时,打印的信息是:
" A* y. Q# Y* R! m( ^EMAC: MII PHY configured, RMII PHY will not be functional,
6 x! y5 u9 p" g6 _& m" g% r应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。- R6 U4 A! |, A; i
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46$ R! k' b7 C0 i5 A, h! h& r
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
2 q$ o" I6 ^; k: Y4 g2 Y5 i
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:403 ]. h4 \! W" D* x" s4 r* S
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。; C3 @) v+ C5 h6 \% {! i
一般来说,板级的emac驱动都 ...

" j/ D" g1 }- \. [# \8 T" Zvefone您好,有些还需要请教下您。
. q% k7 t5 {7 W; j4 k0 w  e; x% l然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
( W# P* Y# r' p2 j6 E5 T7 f  y$ S! `
void __init davinci_common_init(struct davinci_soc_info *soc_info)
* P" ~  {9 s. Z
1 k, ]) }4 _4 O{
3 X; B  s/ }" j  N6 w
+ T4 k' m( |8 O" G: ^8 E1 d             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
, I- f. a5 W4 ^5 k& y5 ]4 w* m, c9 W, T7 C, o; K9 D! i+ G' f# I
}
) m$ E$ \$ r7 H7 }+ P7 M2 J, q9 J  b5 [. `, x+ t! r% p
//XXX 还是前面的9 Z3 M7 `9 r& v6 ?, l) k7 o1 _
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
6 h% C9 o" `7 N" x+ }[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
% D( W* y: d9 j9 F& f. I$ n. t[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown% T0 R/ ^/ r: x
5 Q% U# q" ~/ _; h/ ]& {3 n
在后面
& e& C& I# r  P. D8 v# {( ~! U1 K6 I+ v  o
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了( y- i3 C0 u1 i
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00# U- E3 V/ D$ O' K' d

  [2 A1 ^3 t2 \* Z  F3 U% u请问下这是什么原因?
" M, a5 @' p7 }6 {; M- E/ u  l$ i* P4 o! I$ |9 r9 ]9 U! j, a
我百度了一下相关的问题:有介绍的说: D3 Y& W" W, E- p: {
$ s) U. Y! P$ {. b: s! D
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。4 g3 f; @- G/ [( S3 _; p! M

" h" ^* {  b9 ^: V! @建议调试在u-boot中进行,方便确认问题。( o0 B2 ~$ F- V
( l! t2 r4 E+ k4 z
u-boot下主要确认三点:
/ U! @7 t: y: O' a1 @7 V( \$ |* _. X% O. N2 K! D
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作- e- G. r0 M4 e/ @4 L( c

1 M% s( O( R" D2 K4 h2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
- e0 g4 I5 i! j  o2 b; y6 T3 r. }/ u0 Y% y% e0 Q; J! p1 }
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
1 ^, q+ Z$ i; M% C0 J1 Q/ J) F! n: J
Linux下调试也是确认以上三点。
) r9 k' N: V& M* S
0 i! M, _3 D4 v, R2 Y# S可以指点下吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-17 13:50 , Processed in 0.042317 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表