嵌入式开发者社区

标题: linux 内核启动过程中网络驱动不能启动的问题? [打印本页]

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
* I9 m& d- @# C4 H  I6 M0 q[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
$ V% _  d% S, i$ |[    2.107743] davinci_mdio.0: probed) H) V6 E5 z" p2 x% W8 a% [' M1 e; L
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
/ ?5 [6 g* I2 u& g[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown8 B; U% m- p* l( z' u" _
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown5 `* C6 q( V8 W: u% E  s

6 h. A% y9 g6 z% o( i% t5 q[    2.137188] PPP generic driver version 2.4.27 m- P3 N3 j! T7 @# h+ _& G
[    2.143236] PPP BSD Compression module registered' ^; O8 u* \5 A2 }: q2 A& y
  |1 x' M2 n( I

7 h) b. {( M  P* C4 R在linux内核中的代码应该是以下:
( T% L- z7 @4 w) `$ Z2 G* m. x5 a; y# W        // 注册mii_bus! i) m3 p& c1 R  }2 Q' p
        /* register the mii bus 2.   注册mii bus 2*/- m" C& W8 e% v5 g
        ret = mdiobus_register(data->bus);
: Q. E9 N  l; k+ _; N        if (ret)
+ ^' q/ r. J3 t3 D$ i6 H                goto bail_out;0 `4 i! h4 F% d( t0 k, N
$ r+ G0 N& ~0 W1 ?  T. {$ }$ P
        /* scan and dump the bus 扫描和转储总线*// L/ g' s; C& b3 d  z
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
% Z( H- `# _0 v" e' \# {& J0 X                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据% h# ^. ], m" m! j6 c+ m
                if (phy) {. B& M& D; f2 S8 r
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
+ Y- |' c' M$ W/ p, b  L                                 phy->addr, dev_name(&phy->dev),8 v8 E2 |5 Q% c  z3 ~+ o
                                 phy->drv ? phy->drv->name : "unknown");& Y0 M+ c3 W) r% E& @$ a, ?( w
                }
6 T5 a$ K4 b6 E) ^3 c, v/ O4 ?& }2 a        }
6 u- U- G1 V" M9 L$ R, J8 E% q$ X
9 W7 D5 r. y# |: C2 {/ |5 {
/ w2 S, h' h" t6 o( Q最终在后面 网络启动有问题
' U9 n: k2 {% U" r$ p[    2.387752] PHY davinci_mdio-0:00 not found) W7 h; X+ i- t6 V
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
. i, Y1 Z$ A" \; [/ D+ h! a8 w[    2.398254] IP-Config: Failed to open eth0
; Y$ h+ W& l% T[    2.402589] IP-Config: No network devices available.- h4 v% l) _0 Y
( e! C: X4 Y; A9 n

" b/ _9 O3 s% P

& U0 [9 g. V3 s4 m1,请问下,这是什么原因造成的?7 I' X- @$ x) D/ F) X& \
2,phy模块 和网络驱动开发的过程 是什么样的关系?) t, F% ^& r+ o, r+ q6 S% z
谢谢/ X% a/ {9 C0 K

作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:34/ [, s  R: f2 e- y* s0 a9 D, h" g
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
2 O! C2 w$ [7 N* n3 o+ j- L
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,( j# P: S+ M- X' x! X/ o3 U- W
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
4 B) c! k  L' u# H9 M% I! H; t8 Y谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:335 B6 c( {; y2 ]/ V- F% _8 m
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
9 g, E% w1 F; x/ r
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
9 e, G$ h9 ^# ~% u6 x一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46
; q( S) j& D& l$ r  C. l+ v4 `创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
# P' l+ i8 a, S/ i
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
* S8 f: f3 m7 S/ j( F在linux启动时,打印的信息是:3 A0 \* W* n2 R# n+ g, `( ]) s
EMAC: MII PHY configured, RMII PHY will not be functional,' p( j. G/ S- ~" _( t+ T
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。$ \: ?1 ?( n  {: h3 D
谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46: D- h1 ?9 W1 ^! ^* V7 G4 t% b6 z' L, H1 n
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
, R% }9 B; b' `2 O/ L, o
我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40
: M! u& Y% L% a) M( e9 P8 F3 Z/ n9 B4 Mlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。9 Z! D" P: h3 y) `$ s
一般来说,板级的emac驱动都 ...
) J/ i* Y1 ~, H* h  |; G- V
vefone您好,有些还需要请教下您。- v3 c# v0 h$ _# X
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1+ a2 l4 a- y; y) I% D5 R6 \: T3 e
- t* _* [; t( T' U9 T
void __init davinci_common_init(struct davinci_soc_info *soc_info)
1 n  T* u; B. f
& J$ \- g" k% P8 c& L; p{4 G$ W% A' n2 Y5 k9 s
6 O: f0 M- x- F4 U3 X) C
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
+ p- t8 i# y2 `5 m* @* f9 H+ a! b) J  T+ }6 f
}
9 g; ?, N. h1 k1 R$ H! |, C$ `, j2 n7 L; X/ e% `, @
//XXX 还是前面的
. K/ D" o0 P8 a! Z& W- E[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
. V. U( x# n* P8 y( c' E/ t$ L$ O[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown* c# i8 T. s; z/ s
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
2 M/ X; d) j8 h: a4 {2 k2 d, q* |$ Q* K  n, C- m* ]
在后面0 L) @  ^8 r/ r/ w% x4 b/ [" V; T
6 b9 p/ |8 z/ p4 m) t7 Z& Z8 a7 j
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
! Y# ^7 c+ Q4 k% [[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00: s# d7 [: j5 u
9 }# @& m& C) A- H, A
请问下这是什么原因?5 Z  u7 P) s+ w3 E% I2 F, U

- @! h2 {& k+ d6 }8 E5 c3 x我百度了一下相关的问题:有介绍的说' d5 B9 N2 X4 u: Z2 }/ i
. K1 _; l" A# z5 W. W$ C! O' s
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。: l- n; X- k9 h7 O: T5 O; S  r

8 f+ Y6 z  X# O+ j* H' X. M建议调试在u-boot中进行,方便确认问题。
0 s9 X' r: A+ z$ H, @
4 r# b/ M2 j* g4 x. Q6 y# ]2 du-boot下主要确认三点:
1 T' @2 K1 x" ]% p5 C2 w+ O  r0 j/ g- |
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作2 C- }# y. \4 o9 }
& ?0 [+ W% k$ R% J. ]
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足+ W& K0 r( J# I$ n% B
8 x& q; w- g' d3 x
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??* o& v/ S8 g) h6 R
* S( E' C1 H7 ?- Z* ], D; Z8 s
Linux下调试也是确认以上三点。
! q& i' M4 w$ E
0 b4 M+ t6 _# g' I1 [可以指点下吗?




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4