嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题! f/ b' X' e4 I' c, l0 e
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
- @1 y+ ^9 @& u+ I$ W# |[    2.107743] davinci_mdio.0: probed" N0 c1 s3 `, s
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
# q+ H3 E; x) \9 O0 a; z+ a8 G[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown# l% W/ m* J8 |' y3 v* r) c2 M
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown0 p" u0 u" [- [9 m' i
7 Z  Y  H3 @0 [2 V' b3 C/ l
[    2.137188] PPP generic driver version 2.4.2
1 X4 O: N! S9 a+ _1 T0 O4 |" K[    2.143236] PPP BSD Compression module registered$ y- c+ m4 v% {. ~+ b% q; K
- T& T2 C' g/ _+ [) h
/ G! E% m7 y; m- z1 _& n* ^9 r
在linux内核中的代码应该是以下:
) I, }; H4 J, x        // 注册mii_bus
2 o& P1 v3 {+ r        /* register the mii bus 2.   注册mii bus 2*/
" x7 X: I% V1 \1 s! C        ret = mdiobus_register(data->bus);2 W, Y# {$ s$ i' P
        if (ret): q7 |2 G7 C& s) A
                goto bail_out;
+ p4 e! Z  o, C: n  e! c! _" \1 l% L5 I: Z. O. g; j) g8 `
        /* scan and dump the bus 扫描和转储总线*/
* p& B+ x" y5 }: A: t2 Q1 i5 s        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
* q  E/ W8 B! \8 |7 [9 I: \                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据7 s9 P7 ~) }4 Z7 H
                if (phy) {( i/ v/ b4 r; L/ x( }1 C
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
; R; q2 v: b2 F  o) k2 z                                 phy->addr, dev_name(&phy->dev),* _3 ]* N. h, }" e
                                 phy->drv ? phy->drv->name : "unknown");1 B2 E+ `) {  ^0 {
                }
$ S# {0 d5 [& q$ g- D        }
" L9 m- B: A% G+ o* z: z& P: x% Q* V4 M* |
6 ~/ Z, ^  Y0 _' _$ K3 q
最终在后面 网络启动有问题
+ F+ X) W; X+ F[    2.387752] PHY davinci_mdio-0:00 not found" t2 C+ [. j/ z+ ^$ l" g0 @. \
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00' ?* A( p4 T0 ^
[    2.398254] IP-Config: Failed to open eth08 O* n+ K9 }. l1 j, ]8 u
[    2.402589] IP-Config: No network devices available.
& j3 c9 H: N9 `  z2 ?! `1 {. |; y% D

$ a6 L! P- q6 P3 F2 k: a3 W
6 p8 e" s+ G5 L. ~+ Y+ G
1,请问下,这是什么原因造成的?
9 t" B# _2 D9 T) I$ w# }7 R' c8 y2,phy模块 和网络驱动开发的过程 是什么样的关系?0 r, I4 z: q5 g- ?) a' s- i
谢谢: H7 z# l9 t- C9 U" y

作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:34
) D( t8 ]/ i0 ~- Z  R6 c. t. N  W请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
" k) W7 n1 \2 C) @  r5 u
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,7 U5 c) y: k- V1 l% y; L, U0 G
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?) [6 p% a1 A7 \6 O1 L5 M# T
谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:33
0 N3 p/ p  \3 j% z5 U7 y) }用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

9 U/ N. T0 I4 E6 z" dlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
+ H; \% ]: N3 K8 |+ B7 E& U一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46
/ y& k) e, ?+ `4 ~7 y* l, t$ m9 g7 n创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

# E3 ]8 G. ~1 Y0 l+ T5 |- {请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
( Y" q) Z' ^7 F9 a在linux启动时,打印的信息是:, s0 |. |. e; t+ }
EMAC: MII PHY configured, RMII PHY will not be functional,
9 y' L( x& \0 |3 C5 `0 D应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
, l+ M1 P7 W# [  F. p谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46
5 p9 d: w" ^# c- N2 W) j% E7 A2 n创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
& k. Y- h: U' c7 L: E1 k5 R- R
我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40
, s; H( ~7 H, B# zlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
% U; @0 ?( r7 Y# y一般来说,板级的emac驱动都 ...

9 d! G0 C* v: j" V. ]vefone您好,有些还需要请教下您。4 a. A; Q8 F3 }; [4 y) w# t1 V- Y
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
6 U9 G  y$ ]6 J1 T& a. h
1 t5 S) I6 }  m& a  X, jvoid __init davinci_common_init(struct davinci_soc_info *soc_info)1 w' z. b. K- `  w

9 t/ Y4 [' U0 x4 U- [  I. ]{
+ R  ^5 `6 P8 I/ ~2 ~8 C, V$ A6 S* f. g% x+ R: G4 I' P
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口: T1 y( [7 h% M* F8 M4 E

: h) S( e% @5 f}! B$ _, K# h2 `) s2 {
( ^2 G! F0 ?1 W( f  ~0 W; ?0 S& u
//XXX 还是前面的5 j9 O% b8 H2 ]% H( \- c: `
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
; j0 k. E6 X( \! C3 Y! }* `% k[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
8 Y. @6 `! H- L# Y0 b' s' E1 B[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown8 ?& J' r9 V  G  U

5 j1 g; V, r/ _: q8 y! s0 y在后面7 P8 m' S0 F+ |) }" s

, y) H3 u6 R2 b[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了( C9 M$ O9 }' A8 C
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00: x% o2 V, v' M! {8 f2 \' H- l

6 C) [' y  o2 c8 k" @请问下这是什么原因?8 s" g/ I4 B3 ]5 E6 U* P7 ]% M

3 J% _  }+ ?9 M7 |' M我百度了一下相关的问题:有介绍的说3 T- q+ J' z8 r

. a" `  {- y0 I/ n. D, z( c由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。7 \# F' T$ Y4 ~% z3 f

( B- B& d. L7 s建议调试在u-boot中进行,方便确认问题。
: ]( t1 T6 Y1 h& S5 S
# m' y+ d$ K6 k% h: I7 c" zu-boot下主要确认三点:# t: z) M1 @# C4 C

9 I$ ?& j/ j3 ^" P7 s1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
/ I  M% S" S8 k9 S( a+ O; T5 u5 v1 c& l. L4 q( z) K
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足4 ?! p* |& R3 B

5 T9 E2 ~6 g3 d; s, L3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??2 |  |$ k6 \3 T5 ]- U
& a/ x" B6 g) K5 L5 r5 j0 X" q
Linux下调试也是确认以上三点。: S7 J1 E/ U7 P1 N) j) ]4 U. n: o

& ]& O" u  l4 Y  W) y7 C8 \" R可以指点下吗?




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