嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
1 f9 ~& G7 `0 ^2 E5 u. \( @[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1; G5 L$ M7 Z$ P& {' O9 v
[    2.107743] davinci_mdio.0: probed
7 P- [9 H$ ?  |- y2 V[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
6 S6 s# N: z$ ^. d" N) m. A[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
6 R8 k# G: r& Q5 {[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
: i$ l  E  r% G1 P6 b4 Q7 j4 \1 W3 f4 }& |" [6 F: D; l
[    2.137188] PPP generic driver version 2.4.2
4 A9 j9 T2 ?( }' E& J[    2.143236] PPP BSD Compression module registered* E4 z/ g: Y) g$ ^$ c
4 ?5 H2 _- B5 Q. s5 }: Q* X
( ~) _6 j- P, e4 P
在linux内核中的代码应该是以下:
# M/ f8 s  M# q0 ?% Z        // 注册mii_bus
, c5 s& h9 g0 ^0 y8 I0 D0 Z        /* register the mii bus 2.   注册mii bus 2*/7 C6 T$ j: r/ Z: n: N# k& I5 m) h
        ret = mdiobus_register(data->bus);) H4 }/ A% a' Q
        if (ret)
) A, E7 p6 o; Q& @% t                goto bail_out;  R& p! g7 U% {9 v( i& d2 Q$ B' y
$ p1 h( l: l# G  w0 V
        /* scan and dump the bus 扫描和转储总线*/
/ \, H2 N4 _9 T/ v        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {7 x) w- t- F: I6 E! h& x
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
' V) F- w7 g, R1 e+ F' I                if (phy) {& ~1 P& ]( C. W7 M& I1 k( \
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
4 P6 }0 h- [! r- Z6 w* f% ~                                 phy->addr, dev_name(&phy->dev),( N+ e: R) e4 \0 C# F' f
                                 phy->drv ? phy->drv->name : "unknown");1 t% n& G! }3 y. S; C
                }- ~+ r# j0 Z9 l& ^0 b9 k' C
        }/ d! h( E; A% ]. e9 w3 h
2 `1 V+ `; k) V0 s
# }8 P/ h( {# K
最终在后面 网络启动有问题
, S! S7 }2 q0 y7 K# _[    2.387752] PHY davinci_mdio-0:00 not found
& q1 y) b! G4 W0 z[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
5 y+ G, }7 Z% D9 P7 F3 U  ~[    2.398254] IP-Config: Failed to open eth05 n2 K0 I4 n1 I& E0 `4 N+ p3 ?
[    2.402589] IP-Config: No network devices available.; O4 f& F; ^" d# J. L& t, l

6 l% r* d5 [4 Z' J" V# w
7 p, I2 p/ T. T& u% D
4 b( i# g( Z& ^
1,请问下,这是什么原因造成的?
7 t2 S0 g; L( n# C2 u" k$ }2,phy模块 和网络驱动开发的过程 是什么样的关系?
: {; N0 u  D# K4 E' @7 f' t) m谢谢# |- p4 O% x$ I7 W

作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:34( P# W& W# q  ^% F
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
( N  O0 [* W$ {# s- A
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
/ t( R, ]+ X3 k- `请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
% U2 m+ A( |% o" m1 \谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:331 ?3 P6 K- g8 x5 r" M  E
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
: r- U" @. j' `5 _2 F# B" \) i
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。# V* C1 b5 B% I( R' q" x' W5 x
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:463 O: i+ I  E$ Q! V8 G
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

$ r, l7 ]9 d5 r+ W% m请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
- o4 x" O. F' A2 w* P在linux启动时,打印的信息是:8 G# v( M3 x9 u5 V7 e, o* r' r
EMAC: MII PHY configured, RMII PHY will not be functional,  l+ P) _! G9 p3 w. ]
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
7 H* O2 ]& G7 A; V3 _谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46
: o8 m4 P2 D; r$ Y创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

, a6 F/ O2 ~4 Q  n% s( J1 U我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40
, o7 P  ]* i* ?0 ^2 ?linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
! w. d8 V8 Q7 ?& v3 o% s一般来说,板级的emac驱动都 ...
4 K+ E5 F( x, b  d# O/ G  {: v$ ~7 [
vefone您好,有些还需要请教下您。
) K5 z* K1 I- b4 D然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1, G- c& p( N( T/ \# Q7 C

) I8 E; W* J" Y0 L2 J2 g( L2 j7 W+ Q0 avoid __init davinci_common_init(struct davinci_soc_info *soc_info)
/ {4 K* j3 n( @8 ]. c  S( e5 ^
{
3 C0 K4 f, m9 m& {  N- ?6 J
- h/ Z- t  R! t             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口; A$ ], d* H% ^/ H, z

7 |  Q. ^4 {' n6 ~8 }9 L: U}
& h- A' U" M( a& V& l1 p* r6 A
* \0 o" C9 v0 r6 p//XXX 还是前面的7 I+ T0 }/ \9 \: Y+ A
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
7 Q  x: ?) B2 {7 r: T" w, y[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown$ a" c( }) }, \1 b) p( I* w8 O: C, K
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown- W  z) l# k! E6 k

3 H5 l7 o' E- N# u在后面
8 e1 L& d& a; T* C5 i& n
4 x+ n& |+ h0 {- w6 }- V; p3 X1 O[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
# Y5 W2 n) x1 G[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
$ y! o$ `& l! `7 R( v8 V
, q' T: ~  m; L7 E0 {请问下这是什么原因?1 v) S+ {" z! `9 l7 u  u

( m& C+ _% [: d- q5 v1 h$ n5 X# j- r3 f我百度了一下相关的问题:有介绍的说- @  b6 j, P: j8 ^4 F6 K
$ b5 ~" k5 m9 K% T4 o& ~
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
/ @1 z4 Q# j  L& [9 [1 A( f) g
* b1 L+ x, ^  H3 Q建议调试在u-boot中进行,方便确认问题。
. F+ ~' `9 x4 ~; ?2 `
  O  S. G! f. g6 b: t" ru-boot下主要确认三点:7 f9 O) u4 n+ q3 t& G
1 D0 s; |5 X( w- B3 m
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作3 P) V; L3 M' T; o+ S
7 d9 }1 A- u* @
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足* X# F& M- _" H+ C9 H

# K+ u/ a( I) x: c7 B6 G3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
3 W4 B$ f" s( }; W0 E( @! P; u% _
0 @2 B. U: I- }& I. `0 k5 ~Linux下调试也是确认以上三点。
# ?4 |4 j2 @6 C9 u4 @( G- N. g; v; C6 ?1 A) H
可以指点下吗?




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