嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题9 M8 V- l; m4 U4 n  Z) {9 M
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
& @) ^2 C, c: X$ Q- N  H[    2.107743] davinci_mdio.0: probed
) ]' _. F9 t1 \. F, B[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题% ?# H$ X( t/ g
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown  b. Z' V3 X) M$ t. K. S5 f
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown( b7 f9 B, z" @4 l& U9 r

; f+ }4 i. a5 T: b" n7 A[    2.137188] PPP generic driver version 2.4.2
# Y2 G" y8 m0 c, z[    2.143236] PPP BSD Compression module registered6 t" ~7 |) T8 g  `6 T

2 U8 J# [& n6 h3 |2 w0 d% a  \% [; K( K
在linux内核中的代码应该是以下:
6 a0 L8 R5 T& ]0 N4 O$ Q        // 注册mii_bus
$ w7 w5 k: p8 o; x: W7 E2 e) v        /* register the mii bus 2.   注册mii bus 2*/
+ g; n5 ]+ h7 ?5 E        ret = mdiobus_register(data->bus);
/ z  |$ b. ~& K1 p9 l) m        if (ret)
2 B, e- D/ v% M7 k- P                goto bail_out;
5 T# W8 F" P1 w, |9 D) u7 [. V7 O
) E- d+ J5 E  t  b7 ]9 Q; m        /* scan and dump the bus 扫描和转储总线*/
) Y& A0 T3 C7 N- Q1 R0 X        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
; {. A3 Y0 e2 `& v- C* L                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
2 S& v( Y3 N+ W: ]2 V                if (phy) {* i7 P! O3 k. i$ U, U$ e: f
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
3 c+ z) t% y  R( l* B: _                                 phy->addr, dev_name(&phy->dev),
. N% q0 Q. Y8 k+ I5 m( n2 v                                 phy->drv ? phy->drv->name : "unknown");
; }' o6 C) K0 r: l$ S; E% w  U                }; s" K! m) ]5 ~0 ~+ j1 C
        }3 |! T( s0 f  c% x5 f

" ~: c3 C7 f4 w$ @# U# i
' z& ^9 ?: ~) ~: a* n1 W1 _5 X5 c最终在后面 网络启动有问题
9 o5 r* _$ X8 d2 c+ e[    2.387752] PHY davinci_mdio-0:00 not found3 A* o" h3 c/ Q3 |% k; h1 ~
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:008 O$ u$ i. f3 y
[    2.398254] IP-Config: Failed to open eth0: d. g: Z% Y, P3 U0 _
[    2.402589] IP-Config: No network devices available.
: G# J5 w' m6 A# T2 v  Q- U( e1 N  N; j. g' V, ?

; w! k( {6 j7 C/ e; R; X  Q
8 |1 L& j- X1 j( a- \0 G4 \  q
1,请问下,这是什么原因造成的?
7 c: L1 b. S  z2,phy模块 和网络驱动开发的过程 是什么样的关系?) ^6 K+ E% M1 ~* p* s( m  L: E' t
谢谢7 F. {0 [: g. j+ `

作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:34) O) Z1 W5 R! c+ k. _+ v
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

5 w0 J6 m* `9 H: z$ V( F! v* V! T- x6 o用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,: r: q3 h9 e% u
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?7 J- d; d6 F) b0 l( Y
谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:33$ i. a% r- a+ o% |0 @
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
0 l; E' ?* s7 {
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
9 v  @1 u8 T% J一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46
; D! J* V3 V- a/ ^) p, e4 g- u5 y2 Z创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

8 @! H6 ~2 W' L$ g/ E9 I2 @! P请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
4 X* `+ |) s9 }6 }  ^在linux启动时,打印的信息是:) B2 X1 _5 J8 ^: Y2 w
EMAC: MII PHY configured, RMII PHY will not be functional,7 \: e5 x7 O8 A- o: q
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。0 p' ^; _# c' D
谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46
& t! v. l5 y1 Y- D5 t) a5 \创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
: l. B6 Y$ A6 V. U% c8 B' p
我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:400 m# C' ~4 ?* M9 R) J2 i+ ]
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
! p: w* f1 z) ~9 U; _! x- X# W一般来说,板级的emac驱动都 ...
5 n/ t/ T1 q8 @  ~; Z" I
vefone您好,有些还需要请教下您。
; _5 H' T. `8 s5 Y( v然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1; [  F8 `; K( q
  u; }% y, A) H1 K9 c4 m. O
void __init davinci_common_init(struct davinci_soc_info *soc_info), a% c( @: s8 y3 R5 K; c& t
: K/ f2 k0 b! T$ {* V1 o
{+ |* F8 h3 L+ p6 X$ `3 c

( S1 c9 f5 D: K! D9 _& p; w5 Y' F             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口8 n" z% L# C1 x, ^" F. A
$ L8 F. x( G/ c( e% L' H5 Q. W
}
) |) S0 j( p- b. E1 L% F. i  u8 M. r7 z9 P' x* ?
//XXX 还是前面的9 y: m. ]1 i% |. ]' f" v
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, , r$ F4 @' Q) X% s* S: X
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown! j4 B+ P9 j+ \: S( G2 b+ y
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
7 l7 O9 g$ K) E( Z; z7 Z1 {- k) d; n# x5 H' E
在后面
* a7 }  n, l# e6 R
) M. x& t* y( w" k/ v: x4 K* }6 L4 @[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了( R) i* U( t8 J9 Z
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00& _1 P3 v: N+ J* @5 Z

* a# |$ X2 t# m5 z请问下这是什么原因?, B% |- }& r9 y5 O

' U7 |4 z3 ?- W7 T) z' y) R, T6 L. `我百度了一下相关的问题:有介绍的说
* M) z% c! ~" U, B6 t' U
, F1 h. n# h( @+ V$ _2 [由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。( g1 ?* `7 {+ {2 F8 @

8 l% k  B/ |! W2 f9 b建议调试在u-boot中进行,方便确认问题。& J) C% C, i0 u3 h

8 [, R& Q; B, T: Qu-boot下主要确认三点:( }0 S" k0 F1 w& q$ S7 j  S
& }/ D7 C) O" d$ J
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
9 k2 T  U" A# _0 d& B* L% T1 `2 i8 }3 N8 v
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足+ ^1 l. B, z" Y1 I) C

" M, S8 a0 S' [2 m3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??2 c$ [( s: @5 d  l  A4 t0 ^1 G; G' F

" N, x9 W% ~# u$ a" y$ b* jLinux下调试也是确认以上三点。$ `( m' {, g( x! ?; p3 n( s

  L! w2 z7 g7 R& P5 P7 B8 G" l7 |, s可以指点下吗?




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