嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
4 C# X( a& m9 a! x6 t" `+ I5 g. g[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
& _: r, l7 ~5 W9 a) ~$ I) E* O[    2.107743] davinci_mdio.0: probed: c4 L( A& V$ }+ X4 A
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
1 L1 N: g3 x" K[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
. Y9 |, k! X8 R' {3 a[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
" d) O/ H' ~  A( m; T* p) P9 q. n7 |! T  M! j
[    2.137188] PPP generic driver version 2.4.2
' J: C/ I! k) I: s# Y: P[    2.143236] PPP BSD Compression module registered
7 Z& ~: _( U' l. f, _; F6 B1 n  E, S8 c' q- I

. u  n8 [% c2 R# U% o  Y. {" B在linux内核中的代码应该是以下:
+ i( T5 Q+ |" t0 k        // 注册mii_bus% l7 W# Q) x( X" X# @
        /* register the mii bus 2.   注册mii bus 2*/) j9 t8 g9 }5 [9 D& J
        ret = mdiobus_register(data->bus);6 G* P$ A6 g! p, I: a" m+ X% g
        if (ret)2 U$ E3 J4 m, i
                goto bail_out;  U+ Q2 l0 P' m

. m& r: }* v  s5 k        /* scan and dump the bus 扫描和转储总线*/
( ~3 _! u$ K  j4 b$ z        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
8 V' N* c5 `3 Q                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据* \% B( M) ^$ @
                if (phy) {
6 u  q3 D& F/ m                        dev_info(dev, "phy[%d]: device %s, driver %s\n",1 m# m) r% @" L! y; E
                                 phy->addr, dev_name(&phy->dev),
; ?, I5 z* b3 X. s6 f7 b  V                                 phy->drv ? phy->drv->name : "unknown");+ g+ m- D8 }' u" W2 _5 t$ e6 P
                }/ {9 {% Y7 x5 |4 ~4 U7 {/ I! ]
        }1 m* T9 V6 f. l" o% g8 w, ^4 A+ k

9 \: o  Y5 b/ T6 L+ W" _) V
1 n; a7 o3 i6 _) |最终在后面 网络启动有问题
' I: j7 E. s4 g; F[    2.387752] PHY davinci_mdio-0:00 not found; T9 c. b" G& Z7 X" g; H5 J
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:009 u/ W. j1 s! [0 a$ T& C' s& g" N* @
[    2.398254] IP-Config: Failed to open eth04 x9 s, }( b0 ~1 }# [, y( A
[    2.402589] IP-Config: No network devices available.
* {9 J4 o' C% g1 E2 v/ F' W# Z  f: f) l
: u  o7 V% l% u! p, e& z3 {
$ b/ N. ~. z7 r, U* [
1,请问下,这是什么原因造成的?
7 Y+ T; P; c: {3 Y2,phy模块 和网络驱动开发的过程 是什么样的关系?
6 f, `1 w- f# W7 S谢谢0 X$ `+ {1 }- y; u' \" Q# k

作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:34' S! _6 J0 @; I7 n3 w+ g
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

9 q' f2 B- `7 i$ e& V. M0 ^用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,+ {: E& c8 Y( j* P
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
9 r. B* _, t: C; }谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:33
: V$ |% U/ r  d" F6 J用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

" L! y1 M3 `$ N) }linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。, j& }) c2 Z9 W. b& Q
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46
2 T# O' A* b2 h创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
: |& N9 M: Q  b8 K& F  J
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
  ^4 I7 H1 o( _% y. W2 D7 o在linux启动时,打印的信息是:; G9 E0 J2 b4 {5 }- B) V/ _
EMAC: MII PHY configured, RMII PHY will not be functional,; H9 ~5 s$ D5 h) V9 C; P; }  q
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。. w9 l2 v* k7 [0 D# L6 P2 d9 \! ~
谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:467 C# l0 f' ]( E. D& m
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
' n; b0 k6 R$ Q/ N) U- ?* z
我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40
! o( z" w2 K! c+ |& f0 ulinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
. c( ]) @% H4 |: q8 E8 w. F一般来说,板级的emac驱动都 ...

; K  |* X' }7 e8 ovefone您好,有些还需要请教下您。7 s4 x. N# Z; m, k4 B" h, P9 O; K
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为19 O( L! O% a) b, |" H3 `( o2 o

+ K  u) B4 t2 H( C  ~" O% \* H, Z4 E7 jvoid __init davinci_common_init(struct davinci_soc_info *soc_info)% [: `$ d2 k( E$ |1 n7 ~

+ q/ D% ?3 _! o$ c) g6 N6 M( y1 z5 J{
4 Y3 R6 O/ g  M8 }2 a; B4 `
& X1 t9 c- n: q" P0 |             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口: R: Q" S% K/ f2 ]5 d  z
( P& @. g4 Q2 y' M
}2 z, r: G  i* ~5 K, H
9 X! m6 o( w( M! B% b
//XXX 还是前面的9 X; L4 P+ Y( h: b4 [# J
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, $ J4 F9 Y4 p* V1 ?& v
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown* z. }3 b3 J0 u+ z# u# F+ C
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown/ l3 d/ w# g( F$ Y

8 F* q  D1 z* s# a* `# Y# H- L7 E在后面: R/ s7 D' U0 i, ?1 d0 J* E

" j* S+ b0 }5 H4 X[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
# l  v3 ^; _" c5 k. v+ ~[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:008 G5 S) H% p$ L% G- B$ X# w' g& }

' d& D7 u1 T8 [; B请问下这是什么原因?9 e$ }  [# v+ Y7 N7 M

) n/ f2 c. E- n0 h& P我百度了一下相关的问题:有介绍的说
# z: e) A" E- S' `- v: m, ^  b5 H* }- C. ?  N) k
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
9 ^% B2 ]0 Z9 E' J9 m9 W  p5 b, M7 y: _. Z& b: d: }
建议调试在u-boot中进行,方便确认问题。
: W" L* N6 y4 f7 M$ q' A) T) l' \  Z$ d0 m
u-boot下主要确认三点:
" J$ Y+ m# p0 Y9 {
" P0 @& d0 J" p3 v& x1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作; Z, V" r9 `0 ^1 D! V$ s! D! A
. i/ @$ W# A. s1 Z" |: e# R  d
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足& z3 C- s, P' G( j4 k9 d
0 Y. r$ c, I" r
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
) u6 |7 p3 X- `7 @. Y2 g# |" Q' J, m; [5 X4 d. L4 d/ ~1 P
Linux下调试也是确认以上三点。
6 C6 O8 r. S: D2 F0 z! e0 P* N
/ v% ?$ T* N2 \  g0 g5 J" g可以指点下吗?




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