嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
/ Y% V4 |% J' g, ?; B[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
3 d/ [$ ^' J) {5 f[    2.107743] davinci_mdio.0: probed
% R" c1 m: K+ C9 ~! t4 i# T[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
0 K& }, T+ x0 x6 ~+ I% w) j* G[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
  W: ^5 @$ E5 o8 i! X[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
$ k, l5 H8 J. b0 L; z- J! R2 Y9 w/ H
[    2.137188] PPP generic driver version 2.4.2& Y$ Z# a2 F+ v1 S
[    2.143236] PPP BSD Compression module registered
% E, z) a9 Q3 [" c7 P1 o; h* R1 j& }, T
1 _$ Q: e) i' a9 N" `0 A: I) Y
在linux内核中的代码应该是以下:
  D* x9 |# ~8 [- ^; K; j        // 注册mii_bus9 ?0 d% ]" X5 g" X
        /* register the mii bus 2.   注册mii bus 2*/) M8 [  T% F1 e, c. B
        ret = mdiobus_register(data->bus);3 B4 p( z3 o* g6 _
        if (ret)
! H. @' P1 y% W( f                goto bail_out;
; p( j# }8 f. T- e
4 w2 @) c/ l1 w% a. d' d% ?* {        /* scan and dump the bus 扫描和转储总线*/
6 q. H$ o2 d- @9 p# \$ x& [        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {4 q' f) b# T. v+ G6 V6 a0 [
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据. q  j" J2 ?( _  _4 ?
                if (phy) {1 j% B/ H" T4 P$ n
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",. v4 B5 d  N8 ~. c$ R2 j
                                 phy->addr, dev_name(&phy->dev),7 ?/ J5 M( u7 M/ Q
                                 phy->drv ? phy->drv->name : "unknown");; o$ u/ S0 s! o# T$ p
                }4 A& N. e. ?. Y8 T
        }; w  e+ \6 d4 r% ~9 Q: Z- K& h

) ]1 q: b% F. d% g7 u6 s/ B' c" V0 K  t  U% N6 z  a' {; @+ |
最终在后面 网络启动有问题
. h# X# p- G' l% v' b; {6 W[    2.387752] PHY davinci_mdio-0:00 not found- [! w( t8 F$ i5 D# [8 D1 a$ q
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
; b0 M( C& l1 f& [9 Z) H[    2.398254] IP-Config: Failed to open eth0" t4 h" |" b! l" A
[    2.402589] IP-Config: No network devices available.
. O/ x# _. a6 w0 N- \1 B; i8 Y) \5 Y1 M9 W4 d3 X
3 a. E. g; ?- a( i  c6 V

5 G4 _6 I- u' B, Q( i) t. R1,请问下,这是什么原因造成的?2 f- ~" U. z, \+ Z+ T  O
2,phy模块 和网络驱动开发的过程 是什么样的关系?
4 @% `! T# I6 ^- x4 v谢谢! G9 J5 e1 @( {3 b

作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:348 Z, K& G5 S+ C9 ~6 S( \
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
5 Y( j7 l3 A! r8 S& H& K- B, y! O" a2 d
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
- {" I  U# N' S$ V请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?  l$ a% X' [( l& F
谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:333 L  A8 X& t- |0 |. G5 f( h, K
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

3 }: {9 i0 V4 q: l, e3 }( Rlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
+ n: h& _( Y# `  G) ?- C$ w一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46
. J  y1 b+ x: y) b- x  s; `' Q+ q  s  C创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
! g" m( m" D, G, k# e4 D
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
$ g, |, x/ p( ?* S- w0 |在linux启动时,打印的信息是:
- k; d8 |3 \$ P; Z# B- eEMAC: MII PHY configured, RMII PHY will not be functional,
7 W* U9 z5 z2 A! z应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
9 {) c# D  W  y2 k+ h' w+ P# z谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46
) @* [  z5 p1 ~4 h创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

# L  t7 C5 q3 l0 R$ {我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40
# r# ], r' t3 nlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。% \6 `$ y5 x; l& c6 Q2 c
一般来说,板级的emac驱动都 ...

+ ]2 G2 q. a: t& p6 L. {$ j9 \vefone您好,有些还需要请教下您。9 D0 w$ H2 ^6 T% O/ W
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
' X2 p, V( P9 C: i7 ?8 O4 P
& I- E5 ]2 m' D  p; v6 A5 bvoid __init davinci_common_init(struct davinci_soc_info *soc_info)
% U8 E7 |% p$ |, v& B1 M5 b* P0 d* @& G1 t* D1 g: u) D
{
0 I( A2 ]: P4 N& y8 m+ }' K
7 A& C5 N# q; e! X. F             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口- W: u) c5 i* a, B
1 ~( y; V! I; `1 @$ s; s
}% ?% j1 x! J/ R  K: M
! T  \. G  P3 E3 J! }% u
//XXX 还是前面的
' S, V& b- e! k, {[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
$ P5 O5 z) r& u7 q' C+ x( S[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown3 `) U- b3 ]7 ?0 t
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown  J! @7 y* ?4 R8 `2 K
  x% G5 ^# E2 O- l/ P
在后面
; `! e2 w  d: s% S) V2 K$ Q2 m
0 K7 f1 M0 I% x5 f4 T$ S6 `$ ~[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
. n/ G" d# n0 o9 Z& r[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00% X4 [; M) u: {# q- P( f

3 i5 k" E/ @: L+ k2 b4 w# n, [请问下这是什么原因?
  r3 ?$ X  M% f0 e# T
" }( b7 J! Q: u" P/ S我百度了一下相关的问题:有介绍的说+ Y6 H1 V3 w. ^$ l  k8 _

" x+ @* r& R% n由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。& }3 b0 n2 {1 j' B) w. U: u. i8 S+ b

2 n# M9 V" w% L# r3 u# _2 }建议调试在u-boot中进行,方便确认问题。
9 @1 G3 @( F- o  A
# K2 l- g' _9 R( {6 Gu-boot下主要确认三点:
" f* p% `# ~4 \' m' ^
, L( P+ S& J( l$ Y& w5 q1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
& i3 P4 K- @# f1 S4 z* T
) f+ C: l" [5 x- [/ Y$ N3 B2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
* J/ V2 Y( L4 n$ n9 u5 t; a: Q2 A
4 g7 r& l; c3 t, O3 w3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
' x" V3 a" ?: r! B# V2 L3 X' ?( D' r( M/ W9 t3 E
Linux下调试也是确认以上三点。
1 H" E! |! r" N- `* I4 \- J- ^
3 R" G, e6 j7 R" ^! C可以指点下吗?




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