linux 内核启动过程中网络驱动不能启动的问题? - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5677|回复: 7
打印 上一主题 下一主题

[未解决] linux 内核启动过程中网络驱动不能启动的问题?

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
( c5 ~% I; k$ [) \7 p4 b9 f7 i) W[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1% |- C0 {; u2 E3 q: p2 i  G
[    2.107743] davinci_mdio.0: probed
/ A+ z7 r0 z$ ]7 w# x% P[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题3 q! g& d% y5 j
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown; i! F% b! W' l
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
/ i* K' V* p/ t6 e0 [: i. a0 P" E, c, M, i+ g( l1 F
[    2.137188] PPP generic driver version 2.4.2  A  Z* G+ u9 H( o/ ~* T
[    2.143236] PPP BSD Compression module registered
9 O3 s5 L1 ^' |! h7 ]* s8 |+ i2 V0 o4 {" c9 y

5 a6 C1 Q  W6 j* m6 S在linux内核中的代码应该是以下:$ _, l7 t- W9 ?; a5 Q
        // 注册mii_bus: R4 D& w+ L" S' P0 r& W& i
        /* register the mii bus 2.   注册mii bus 2*/
5 }3 |8 y5 b) U7 M' r4 Z        ret = mdiobus_register(data->bus);, n# J, H- g5 Q: p) T! s( V7 r
        if (ret)+ s0 V$ `5 n  ~& z
                goto bail_out;
' k+ f: y  {5 n' z$ r0 F" w6 E3 y6 V. |% T9 O4 Q! G& F
        /* scan and dump the bus 扫描和转储总线*/7 n  w! \0 \! g7 s" v
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
4 @5 `9 G9 i; t, B3 n  F' y4 i                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
7 ]. G" D& R& D( C                if (phy) {
2 u1 m  A* r+ d# J/ A4 I% N# _3 n                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
* E/ G( E5 b- Q' x6 K' x                                 phy->addr, dev_name(&phy->dev),
0 j' p% J! ^1 L, G                                 phy->drv ? phy->drv->name : "unknown");
. `- @7 y# Y# e  l* j9 @( U- F                }
8 U5 [9 M( `+ G! [) T        }
1 q' A1 U% k& r8 d% ]6 i, G( z! }2 b+ e) m* h( i9 S

) E% e: a, {+ K. w3 p, q. ?最终在后面 网络启动有问题
" {8 N1 o" N# V  G4 R[    2.387752] PHY davinci_mdio-0:00 not found
' D0 F- p! {: y7 _6 n3 q# v4 i2 F[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00. P0 T* z- ^. Q
[    2.398254] IP-Config: Failed to open eth0( m7 Z) S: A, l# y5 [1 z: a
[    2.402589] IP-Config: No network devices available.
* O8 q+ N) e% b& S
) p9 g0 I8 N0 d# C+ v  n1 Y4 r( ~! x
* o3 p8 p; G+ S$ F4 c  J
7 t- Y+ _' ]* n6 T* W$ C& y* T
1,请问下,这是什么原因造成的?8 y6 Z0 m& o, h
2,phy模块 和网络驱动开发的过程 是什么样的关系?; k7 O8 F" m! s+ J9 @* b
谢谢, R1 J! E2 N7 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
沙发
 楼主| 发表于 2017-4-14 09:33:48 | 显示全部楼层
vefone 发表于 2017-4-14 08:34
5 U% o1 H5 q9 @8 q1 I  Z+ s请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
. M; Y2 h7 d7 j7 T* F% a& V
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,7 m  S5 \% T! G7 A7 W
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?+ c. p+ g0 T3 d# }2 E+ F
谢谢

点评

linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。 一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配  详情 回复 发表于 2017-4-17 20:40
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
板凳
 楼主| 发表于 2017-4-18 10:35:46 | 显示全部楼层
human 发表于 2017-4-14 14:46& i) [& l4 S) J
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
( z5 z4 e5 N$ Y% C0 }, M
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
+ p% A$ }+ \/ }7 r0 I在linux启动时,打印的信息是:
5 W$ s  z" U0 Z" n/ }& KEMAC: MII PHY configured, RMII PHY will not be functional,% k) g4 p0 w2 z9 L8 t5 ]" ^  F) e8 |
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
% [; e1 C# e8 U0 {! y谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
地板
 楼主| 发表于 2017-4-18 10:36:56 | 显示全部楼层
human 发表于 2017-4-14 14:46
& |2 d6 T  q$ W2 Y  H& {9 R创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
) A) E4 E+ D, |. l( F- V
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
5#
 楼主| 发表于 2017-4-21 15:31:34 | 显示全部楼层
vefone 发表于 2017-4-17 20:40( ?; f; N. D+ X/ [. m, f6 R
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
- O2 a8 b( N  O+ C3 E一般来说,板级的emac驱动都 ...

1 R: p  v! g: _, @vefone您好,有些还需要请教下您。8 r& D+ Y2 V- N! I7 g7 B* W9 j. D
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
) T2 G, P9 G- }5 |! m" ^
+ x3 W  I/ u, F2 e3 ovoid __init davinci_common_init(struct davinci_soc_info *soc_info)
# b: b3 T2 u; {5 H& [* z6 q. n. l4 e4 [( k
{6 W5 T; r; ^0 U$ z  k) V0 `

- D3 W: H, e) t6 `. Y( Y8 L9 ~8 W             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口, ], Z; c: v4 f. O4 K
% e) Y. z$ f% L% v  ?8 j4 a* t
}! ]; ?9 h* B; [0 U' U9 i
7 q+ G1 x+ Y" }; q6 H! }9 R
//XXX 还是前面的
: |  y! C! c, b* _3 t6 X[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
! R% I& ]& C: N; _; h[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
' A8 y" m. B, n) G0 x- z[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
  u+ Q8 |) P) j+ k; f: {( @7 Q2 B4 F9 w2 |. q+ G! e
在后面
4 }$ X6 N( p2 w) e2 n, R) W" |" n3 }' [  v6 g
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
- S# T# ^+ J' ?9 L3 J) }2 W[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
) p  u% O' A2 p7 J; y8 T9 \) A1 l7 T- N$ h+ E2 y3 f$ V8 l3 ]
请问下这是什么原因?
5 B, ^/ c# t4 g  _
1 B9 z. Q  x4 a我百度了一下相关的问题:有介绍的说
) }) y/ x. y7 h+ _. J$ i. G! D2 l6 ^8 l6 a4 s9 C
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。: [/ Q& [4 \) o' v

& \+ |+ p: W! _# m建议调试在u-boot中进行,方便确认问题。: n- L. |; t" j. K1 r
5 R- A' H# ^$ k. s0 x
u-boot下主要确认三点:
& |; D/ E; ?) g% F: y' M+ O5 M  ]
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
% [0 S- M  ?0 K/ G5 n5 B. [# d$ K4 J  {% F6 `; i
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足: r6 x( w# @! U
  y3 \) B! x1 V! d
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??9 q8 x) W$ }' N  E- J
, P* f+ e$ P8 C6 K) @' y
Linux下调试也是确认以上三点。7 \- A" h/ ^9 Y3 C+ _
$ M' K2 I! t/ _$ W0 |/ d* Q& J) g
可以指点下吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-14 08:37 , Processed in 0.040673 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表