嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
+ C# Q' [0 K/ `6 k4 ?; q[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
" G: v, Y1 ]6 `% Q[    2.107743] davinci_mdio.0: probed# S# h/ j9 m6 `' Z# e, a! A5 w
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
. J' T* ]& f& B% C% B( Q[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
- Y: t7 ~% ~4 }- L& b$ S2 u[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
1 R0 Q$ d0 r5 X3 s% i8 I& s! B, v  ]- K) c1 ^* {8 D
[    2.137188] PPP generic driver version 2.4.2
( t9 N( y4 e% ^# U# k6 i) b[    2.143236] PPP BSD Compression module registered6 z+ J+ a8 f- V! Y3 }  s$ j- }

5 D( P* W) W/ d6 x2 m' `+ J- O" y
5 n- s. T6 J7 [+ k! o在linux内核中的代码应该是以下:
1 A$ V9 I( ~( ]2 q- N        // 注册mii_bus
% o; q& v6 W  G0 a1 h+ F; U        /* register the mii bus 2.   注册mii bus 2*/
/ B5 m" v. K% K: N        ret = mdiobus_register(data->bus);
9 V/ C4 _- y9 R5 A8 ^$ r        if (ret)
- x" G8 [1 G6 P* r& T( w" A                goto bail_out;1 x8 p$ u$ C' l& s6 Y$ S, N4 L9 V

9 n4 \/ K/ s& B& x, M- G        /* scan and dump the bus 扫描和转储总线*/
3 Z2 Q0 O) J+ X        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {3 p5 z0 x! a+ r. ?1 i/ |. |
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
8 a2 `2 ?5 _% T8 o4 {" ~3 e                if (phy) {
- ~8 C- }5 \' H. \+ H                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
7 ?- l' F  L* }4 w1 H% E4 j                                 phy->addr, dev_name(&phy->dev),
; b5 r" |# a  V                                 phy->drv ? phy->drv->name : "unknown");: e: M% o* }" C9 g7 i+ n
                }& `. c* Y- K3 k
        }
* t3 R- Z! P4 ^8 d6 o/ p2 `! z9 t- ~9 D$ i1 g3 T$ x
9 b8 j8 @( q0 U3 F8 p5 ~6 C/ T% N" ?3 L
最终在后面 网络启动有问题7 t+ ^/ p/ ]4 c* _% V. q, V
[    2.387752] PHY davinci_mdio-0:00 not found
  e4 e4 G1 ]8 q& j2 @7 b8 w[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00" Y: ^7 [4 h% T+ [
[    2.398254] IP-Config: Failed to open eth0. c2 W& F% K6 ?6 G% x% w
[    2.402589] IP-Config: No network devices available.* v) R% ^5 z; E1 h! d! C& M

- `0 n. x  @/ l, d1 L5 ^1 T1 R+ V! y' b- w/ t

$ |& S3 b0 Q4 C, f1,请问下,这是什么原因造成的?% g. S, h2 f" n/ X
2,phy模块 和网络驱动开发的过程 是什么样的关系?
: U) q" x# J  Z) [6 B) U" }谢谢
$ E# ]* _( a& j9 g/ O- a
作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:34
/ N8 s: R$ l$ ]4 o# K( |请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

/ ?! [6 t# Q7 {# A, Q0 Z用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
* D! G4 R1 _3 l8 @% U请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?2 _4 v# L! _  O& T1 x3 x
谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:33
, ?7 l# {4 f* b6 ?" k% p用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

3 u3 v" l: t- j- X- mlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
# k2 {! ^, |/ v% Z6 n" P0 ?一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46! \* A( [5 M% J3 \
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

" b' f4 ]: q8 E. s请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?2 ?/ B0 I3 c! W
在linux启动时,打印的信息是:& C7 |. i9 U3 \4 x, i
EMAC: MII PHY configured, RMII PHY will not be functional,
0 s: Z! J' u, q5 v% z* ?应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
2 @0 i8 L* ^% N& k. r2 g/ X% y谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46
8 C% q  J2 y+ D0 E创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

- l: e0 w2 O, _8 z我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40! M) f, i6 @' S
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。% f/ e+ @# P  v
一般来说,板级的emac驱动都 ...
+ q$ _) g3 A- X' G9 E
vefone您好,有些还需要请教下您。3 h+ f$ \, B" j- Y6 y' i
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
8 v, R, x! Z4 s8 }5 r, J/ ], R2 \( J" |4 J0 S" b
void __init davinci_common_init(struct davinci_soc_info *soc_info)
  U. K( Y; w: V1 o, }( {0 [. C6 S8 h  c
{" B9 i; Q* U, z& }7 y8 P' ]" V+ ^

7 }7 v; L4 l; Z' _: X             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口0 z, M6 O9 I& W: M
. i/ g7 c* }( ]" x4 b
}( g- X, H4 G5 L" j* U

& @$ T- k  v1 r1 G+ W//XXX 还是前面的, d: {* u: K- b$ @0 z8 o& A
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
/ I% Q% c* l& Q# w  A5 h' y8 ~[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown1 \9 U- r3 d3 p, O
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown0 d/ K- m# x/ v8 g& c1 W

$ d2 o0 D- A) {4 _. v; a在后面
1 o6 p, g* s5 E% J' W  \/ `% F5 `4 ]# j0 l3 s9 @
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
& j  F3 ^) F, j7 A[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00+ s; Z3 e* g. s0 x

1 n4 T" {) G7 R# V) A' I) g请问下这是什么原因?
0 C( P' v4 |$ d3 e5 [+ p
0 s# @+ M, i8 R' b我百度了一下相关的问题:有介绍的说+ @& M0 o7 M5 x* @/ q7 ]" M
3 S: V6 u1 V" C) e6 j
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
1 r" V4 C! ~( e; M; x5 V# p5 U2 _4 q
建议调试在u-boot中进行,方便确认问题。
' O' m3 R: r+ Z0 P1 |4 O$ _! w2 W+ p; f9 M. j
u-boot下主要确认三点:, m  G9 P4 n& y2 x1 t
, m& V# E. v4 ?1 p
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作. c& o% Q8 Q0 ^0 E0 w

- f1 Q0 j6 n- E5 Y2)Pinmux configuration to support rmii interface                                //这个我应该已经满足) I4 E8 ]; s* P: s7 z- }
2 l' P1 H9 d" l) x$ T3 {0 C  R! {
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
. V( G' p' {/ A1 a: }) L
) p/ Z0 G& t. X8 e' F) a) hLinux下调试也是确认以上三点。
' B8 Z3 {, h: n* q1 C: \  I  v
4 w* ?3 o$ e8 I( }5 F2 i) y可以指点下吗?




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