嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
1 U- v/ `2 I, z5 U+ \4 e/ R[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
& s% w+ |9 n; e( A+ Y[    2.107743] davinci_mdio.0: probed2 G/ D( g* t, @5 w; k! Y& i" ^* u
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题8 w' _7 G9 x5 w) d1 W0 }( c4 {$ v
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown5 {8 C9 x$ b( v# Z5 _- r
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
/ D+ |+ m+ n/ I+ @6 C- A  W! I, s/ F+ q/ V  s
[    2.137188] PPP generic driver version 2.4.2* c7 D8 j7 m; `
[    2.143236] PPP BSD Compression module registered8 u. V2 D  _$ U" N" ?

2 E7 }6 h6 J, j. b! a' C! D! W( R" U# g) u* W. v0 e& Z% ~0 ~! n
在linux内核中的代码应该是以下:
5 f$ M& B' x7 T, W        // 注册mii_bus# x8 J: P0 F  I4 R% Y1 }' V
        /* register the mii bus 2.   注册mii bus 2*/
# s/ k+ ?' J% ?4 W3 a5 U        ret = mdiobus_register(data->bus);; W, Y) V# \% }2 E+ B( h
        if (ret)
) Y/ w" z% S: @; F, n. \' ]                goto bail_out;0 m0 L2 S0 i  u. p+ t7 D% h' p

  ^' H/ x4 A$ `( x4 H( X        /* scan and dump the bus 扫描和转储总线*/
6 {6 v! g) X) P8 M# ]        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {5 {! b6 `$ Q7 v5 c6 c
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
0 s- L5 \8 m1 ]. k4 p3 l  Z  k7 y$ X! O                if (phy) {% `6 ^$ P, d! m* M" L5 \
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
! v5 }, E/ ~3 M6 P                                 phy->addr, dev_name(&phy->dev),1 D0 Y8 E; \! i2 ^8 a
                                 phy->drv ? phy->drv->name : "unknown");7 z8 k5 u" z2 x. C  E/ z2 j! f: T
                }( X- f9 r* c* P7 }2 f  }, M
        }
; v1 K3 z3 W; J; }/ n
7 r7 V) a# Y& j1 L/ F0 R  J/ U4 b1 J; O* l* X5 `
最终在后面 网络启动有问题
3 |, g6 F4 @* W[    2.387752] PHY davinci_mdio-0:00 not found
7 L7 k2 Y8 v8 P% k[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00+ _3 m6 b' m" e; j) ^3 e
[    2.398254] IP-Config: Failed to open eth0
' O/ r% b& x0 ~6 D) K* N0 G[    2.402589] IP-Config: No network devices available.
- ~& B4 R* O* A- |6 d" [4 C% m# A! ]( j& ~$ m, L
: X- D2 S/ {2 l, m& A" F+ `1 |, A
3 ^* _: P+ T) j1 }5 Q9 ]
1,请问下,这是什么原因造成的?
1 q5 [$ z8 r. i5 N2 U: ^7 y8 {2,phy模块 和网络驱动开发的过程 是什么样的关系?3 d1 a5 k' `1 ^5 c  H9 k- W
谢谢
: H) O( ?4 Y/ h% |0 j
作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:344 y# L( }2 A- ~! f# g
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
* ^0 ]  L/ Q2 s
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,) P* ?. x% |0 c% `* f; k6 n1 W
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
3 o  N6 V6 C/ w6 E; z7 I谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:33
+ s/ ^! B8 G+ V: J+ r' O% m  {用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
: {- w$ |" z+ @# S, Z$ G# Y* \; z
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
- w$ b9 N% E9 O! b- Y. a0 Z- r一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46
2 d1 v9 ^7 Y  H. ]. N创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
) w0 z. n+ i8 K# ^$ |) M
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?! j; c/ w$ }4 N1 C! U& e
在linux启动时,打印的信息是:/ Y8 T, H9 T0 m5 w
EMAC: MII PHY configured, RMII PHY will not be functional,3 p/ {4 r; c- I0 J. I4 O
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。+ ^$ a6 ^$ e; Q
谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46
, n7 m5 e7 Q# c创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
: c0 b2 A' `. P% j; h$ ?
我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40
% C7 p* L1 Y( ~* ?+ T( t; Olinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
$ @) c; I) e: X  V+ k# i6 K一般来说,板级的emac驱动都 ...

0 W! L& R$ D0 I* ?- J0 Cvefone您好,有些还需要请教下您。7 M' X( U' |0 Q4 q+ H6 i
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
: F, f: ~* v# f- Q9 g
/ Y& K# D. }6 S9 u$ f2 I$ b  ivoid __init davinci_common_init(struct davinci_soc_info *soc_info)
- j1 @( l  S* Y; u2 R. m% O. |4 G0 |6 w  w& h0 y  Y9 L
{9 j- r+ w% i1 Y& ~; a

) u; Z$ F) k& i% i3 ~# ^, Q& l' R- \             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口8 E% ?' x8 v( ~
* Q5 x8 T  s/ M8 L' N& t0 w
}
5 b1 y# R9 ]& P6 @# ?
- s1 P9 X) Y8 u) a/ d//XXX 还是前面的+ j1 q4 I8 S7 J9 n  }  W! K
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
0 Z0 n/ \5 S5 ~7 m! t& x/ ]; V0 E" X[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown' t1 h5 Z/ W7 P4 Y9 E# L9 X* e* r
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown6 r" I; d& P* Q# W; Z+ F4 R) V- L/ A
: T3 I) a" P; t7 p' d. i$ A8 A$ t
在后面- m3 D$ h$ ]" z# h2 h

& h1 Y9 G) ^$ W% a[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
1 t" P3 G% H/ _; L5 C* b* l+ K[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:009 {8 T1 g* X$ O9 o7 y* d! X: A/ _

7 ]2 q$ z- T9 ?% h请问下这是什么原因?
4 p1 J8 u1 v6 W# C2 T- C: k
/ E9 o. W5 P. k0 P1 T2 x- R6 X我百度了一下相关的问题:有介绍的说$ `' p- Z2 i" P+ i9 r

$ h/ O, q) s1 b( Q2 v3 u. ?3 e由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。: w; n# Y0 _; q# ~+ q% V, x& H

5 X2 G- S# M1 q. d$ P2 V建议调试在u-boot中进行,方便确认问题。
! s/ t% y) O; t7 [6 j& i! {0 t) t
5 I2 B& D0 t; ru-boot下主要确认三点:
4 E- G# y8 k' }; ^( w
0 C, o+ ^8 \& j1 z7 |1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作. ?  J3 P% ]( i/ _2 D" r
% q; s) J1 q' Z1 [' L
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
. K4 `* B  m$ o- Q( S) E2 X$ Z  d) J5 f/ J! M% D# \
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??. p7 S* t5 _; Z# N

  y/ ]2 d: \; T& A  |0 y7 lLinux下调试也是确认以上三点。- Q: B& H) I+ S! i
# C' W1 E& z0 U6 K3 T, u
可以指点下吗?




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