嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题6 M8 a4 |% W& G( l' I
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff16 f, U( y8 L, B" @2 l1 }2 c  O
[    2.107743] davinci_mdio.0: probed, L& D+ G3 R7 v
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
0 |2 V* F2 A9 J# m  _[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
3 t0 l( @) G% o4 R; t[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown3 ]; d0 K$ Z7 m( ^+ Z
* M% N5 a2 X+ w# Y$ N3 e$ N
[    2.137188] PPP generic driver version 2.4.2
+ r. L6 c3 i  H1 w( O[    2.143236] PPP BSD Compression module registered
. K# G4 [6 \1 A, o3 o$ n! ?# i& N2 {% [. v5 `$ D/ _
( q' U4 g$ \: P
在linux内核中的代码应该是以下:
8 G8 {; p) J% l2 ]+ n        // 注册mii_bus
1 P% d0 p9 t/ d/ t6 U/ a        /* register the mii bus 2.   注册mii bus 2*/* e! s; M, V1 L% ?# R: P  t$ W
        ret = mdiobus_register(data->bus);
, i7 [6 W; o! Y& Y0 N        if (ret)3 @( ?2 I) c( G. p5 O" x
                goto bail_out;
0 e# X" @! w" B% i& f
# o2 }) @2 ^0 k- F4 `# m        /* scan and dump the bus 扫描和转储总线*/
# o' s9 O# F  D        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {: L( d4 I# M( j6 m
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
8 l, w/ j6 `  m                if (phy) {
, I! `; q) u  n: s# I9 U& m                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
/ s$ h: R. V5 k                                 phy->addr, dev_name(&phy->dev),: ]! o4 j' r3 [
                                 phy->drv ? phy->drv->name : "unknown");5 ]# \  {5 n: W( P" _/ ~( E" T" m
                }
) i: w' `; @8 k9 k        }/ ?# P/ J# S& u" }/ O7 D
. _' g8 ^& ~" a  H
) v* c8 U; m! h* _) x8 f# Q
最终在后面 网络启动有问题
" G6 y/ D- \( }1 h  U& V7 n+ E[    2.387752] PHY davinci_mdio-0:00 not found
% l* X3 d+ p& S+ I/ e; m[    2.392184] net eth0: could not connect to phy davinci_mdio-0:008 g5 z' ^9 {% p& F' l' k
[    2.398254] IP-Config: Failed to open eth01 T7 f$ V: x" ~( u% m3 }, E0 }
[    2.402589] IP-Config: No network devices available.1 g# T; N  g' i$ X- n2 b

% j$ Z, o) Y" }. `% o: m* j$ n8 a
* S# H. X5 i7 W
1,请问下,这是什么原因造成的?
: P: @# P' W, D1 T* O! j2,phy模块 和网络驱动开发的过程 是什么样的关系?* R7 N) v, P0 C$ X, J0 T
谢谢6 H( J' G) W: \! A) w

作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:34  q( V3 R7 ~/ e6 h
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

/ Q' n: E8 \/ \4 h1 f用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
! T9 Y* P; G$ i4 K8 J1 s请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
- C' h7 ~2 E5 L2 D7 w谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:33
; p4 M8 Y, R' H3 H7 s/ q$ \用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

) N) ]) K1 F  I& X' O- \linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
4 Y. C: w2 _/ n; h1 r一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46/ y& ]9 I( e' U6 \
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
+ d% ~& E3 \0 _0 Z  b! k/ L2 M$ l
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
# Y5 n, o. T; V; I( O  h3 D. I在linux启动时,打印的信息是:
0 V( \4 q) U7 m5 |+ K5 u# {4 UEMAC: MII PHY configured, RMII PHY will not be functional,$ m: Z7 O/ v! ?; M5 U1 \9 L
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。8 F) e' `0 P7 M
谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46' B/ G5 c1 u( Z* x
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
* L+ E8 s. c, q! W4 V. X
我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:400 @  D, ^% |9 h4 O
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
) R( ~% O9 U8 d一般来说,板级的emac驱动都 ...
/ A  G1 o: w+ f* m8 |
vefone您好,有些还需要请教下您。8 v2 W( t# Z, ^$ Y' r+ a
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
( Y! q1 o( N/ G7 Z! W) Y/ J1 z: P$ f* c( g
void __init davinci_common_init(struct davinci_soc_info *soc_info)0 h. K. v; D2 [1 G. G# o
  n7 h1 J7 I* s  q
{
1 X; q! \9 j4 O- u6 U$ y( h% S6 K% J2 Q9 U; j, y
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
. N) P" B. ]6 P' ^# A
( |( t7 i4 r; R( d/ B}  m- J1 }7 n. d: r: W% z+ o
1 W; M9 S( ^6 `8 e
//XXX 还是前面的
8 i% r- L3 }* m" u. x, |! Z6 z[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 9 N' a5 Z2 g0 }8 J# ]# k
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
. @+ K, f/ m! h' p$ d[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown+ M1 U  M3 `1 D! n' o0 S

0 I! |/ A/ c, ^9 ]在后面
4 `1 X8 x5 M/ I; y, e0 n* _: K- x0 R( Y8 k" b7 K2 u- |
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了9 J. }7 g  I& W4 I" Y
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00' Y: J9 _& O$ G( U  g- Z1 r
. {% e3 F$ _9 s2 O0 c
请问下这是什么原因?
, @/ x& p) I9 U+ ], ?+ o  R0 p; X9 o2 W& B+ b/ z! l4 q
我百度了一下相关的问题:有介绍的说" D8 S' S) y& R6 Y! j/ G* O2 z
& O+ Q. B% M- n
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。& J3 f, B/ P. H- k: C. F; x% a0 U4 d: ^

% Q1 _+ k8 y& e建议调试在u-boot中进行,方便确认问题。
+ E3 \2 l- Z7 e8 G! z( g% I3 P0 X  G- h
3 M, ]" M! Q' h. n  _/ r# Xu-boot下主要确认三点:( A. X7 f7 l/ y7 \0 g
% T# U$ m4 a, \
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作5 o( Q4 F: w0 e5 e! u' \

) Z. T& f6 U2 x$ W* J2)Pinmux configuration to support rmii interface                                //这个我应该已经满足& d% Y( T/ V) t$ ?1 {5 }3 A( t

$ c2 Y) k1 J; e( Y: s) p9 J3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??& W$ {6 J& Q9 [, F" t
0 c( e8 i; y+ ^9 r9 m' K, u
Linux下调试也是确认以上三点。
' I+ m3 P& x( a( [' ~4 m0 ~3 I: y7 ~& y) f* E, W* a. q
可以指点下吗?




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