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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题* v0 x; k9 B$ Z1 c# z, I$ |: N
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
0 m2 `2 p% a% p. \$ q- s) x[    2.107743] davinci_mdio.0: probed
3 h1 s) P, r/ X* H. g. s[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
& q% k0 \( ?& @- y  i[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown0 p9 |: l# d% ^
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
  L! u! o9 G. N" _
! u# X( V1 s/ `* [2 b2 N% Y/ G) b) u[    2.137188] PPP generic driver version 2.4.2
( C. V& n' j- a; ]+ T[    2.143236] PPP BSD Compression module registered
2 Y* F+ O! C- R% C" q# E: J( n5 H* w8 D. J- E. o4 Z
, }- r$ w* ~2 [3 k
在linux内核中的代码应该是以下:
, y) l/ I9 [4 z5 Q' }8 W4 ]        // 注册mii_bus
. h2 Y! z+ y# d6 _: W( A        /* register the mii bus 2.   注册mii bus 2*/
: G0 g- u  Q0 J8 o1 _/ S        ret = mdiobus_register(data->bus);' n6 k( a( Y3 U4 X
        if (ret)
/ n# z2 n) b* V( ]  C0 X                goto bail_out;
7 }; g, g; j9 I+ i5 E
1 ^* i, f' w7 v( L% t& e$ ^        /* scan and dump the bus 扫描和转储总线*/# f1 x! G2 b( i' v, t8 I
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {! g- ~8 X5 Q! u4 P
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据/ i) I$ {' W& n
                if (phy) {, w  @! {$ G- \# F( }. d
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
/ o" `6 q) B+ S' E* C4 U6 j7 S                                 phy->addr, dev_name(&phy->dev),1 g8 p, r* a0 [9 R8 ]: _( V- t3 A
                                 phy->drv ? phy->drv->name : "unknown");
- |+ ], z0 q% N/ k8 F% u                }
# |' U% @: [) b0 q5 s$ q) [  D; `        }) h* ]: I7 Y' `2 f2 a1 u
) C8 i$ C- U, s3 C, E

, n7 o* l2 D& h* O- f: o6 o最终在后面 网络启动有问题% g7 r9 O# e: h" E% F5 C! A
[    2.387752] PHY davinci_mdio-0:00 not found
1 Y2 C, t  a! p9 O  j" T# e3 `[    2.392184] net eth0: could not connect to phy davinci_mdio-0:005 B$ @5 H/ \. B% V0 f
[    2.398254] IP-Config: Failed to open eth09 x0 ?/ Y1 m' W8 A
[    2.402589] IP-Config: No network devices available.) [* Y6 z. {' U9 _1 c( E, ^6 S

2 m1 S+ r# z5 Q. \8 }+ H  M3 I& K2 `5 c1 \5 d
) e; V, V2 u% _4 N
1,请问下,这是什么原因造成的?
7 I$ H# ?8 d4 U/ K+ @/ o. |2,phy模块 和网络驱动开发的过程 是什么样的关系?
4 P3 C# |' i: @  |' ]$ U谢谢
# M+ S6 M' F2 v$ ]% e$ `. p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

83

帖子

426

积分

创龙

Rank: 8Rank: 8

积分
426
沙发
发表于 2017-4-14 08:34:48 | 只看该作者
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
板凳
 楼主| 发表于 2017-4-14 09:33:48 | 只看该作者
vefone 发表于 2017-4-14 08:34# ~3 A& t* i/ q& i  u8 O
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
9 P( i& `5 ^7 \4 O. y# Z7 K% p
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,6 A/ I0 n6 \5 z7 g1 K& m) W% }
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
6 W: M2 @* F3 X+ P1 V1 w: a谢谢

点评

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

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
地板
发表于 2017-4-14 14:46:38 | 只看该作者
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
回复 支持 反对

使用道具 举报

0

主题

83

帖子

426

积分

创龙

Rank: 8Rank: 8

积分
426
5#
发表于 2017-4-17 20:40:02 | 只看该作者
小石 发表于 2017-4-14 09:33
4 {# j& _7 D3 I# K' N0 o5 N用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
2 b1 L0 s$ o+ q# }% m$ X
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。8 z* t* u+ C9 d# F, ]6 E
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
  u4 T! B6 P( e创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

( B2 L& V; ]+ r2 o/ h( s$ T6 u4 Z( [; @4 e请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
4 u' I3 `# }+ j4 a/ u% C在linux启动时,打印的信息是:
1 B" c2 j: [* s/ qEMAC: MII PHY configured, RMII PHY will not be functional,
6 n- w* s2 E* G; Z3 r) y# @9 A应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
( ~* W- f( M# p/ U" `; I6 m, ]0 S谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46, @4 s# K/ Z/ g' r, p- P+ x
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
# Y6 T  T" S7 C% ?
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
  R- i* T  A0 r/ q$ r) _. xlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
8 |6 q" D0 S7 L5 T一般来说,板级的emac驱动都 ...
+ n( G& G; T$ l4 k* U
vefone您好,有些还需要请教下您。# i- `, j, J/ g: c
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
! I  Y1 A. k9 ~2 a9 u" s" [) @4 s) E9 R
$ P% d. h* A8 X7 C" G7 [; ^void __init davinci_common_init(struct davinci_soc_info *soc_info)
1 t! w3 ^# b; J- v4 Q- N
1 [+ {  r" @1 R: y{
8 z1 h) ]# }2 P: u
% S* X5 j2 f, I8 j; q             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
; U: _, X  n* p$ j
1 e* V8 {) M+ }$ [}+ e$ G' {* e. Z1 d2 @

$ F) }! E0 q2 T4 z* j//XXX 还是前面的
( O/ \7 z; x# F6 e* |[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
7 G, s% u1 b4 m& n. t: N3 ?[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
) `% h! f; c+ I6 D! M( A* v[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
! E1 ^- I* s! J  ?
3 Q) d4 P; f" A( t在后面
1 g4 S+ Q' ?" O4 A; F9 d+ p/ M5 }0 W; |8 C0 b) `5 O
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
$ W! b+ N, z/ b9 U* b1 {[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:009 K9 a/ ^7 Q7 J5 r3 f% q- Z6 q

/ ?; A, ~9 r; Z7 L- \请问下这是什么原因?8 b( Z) H/ w. z- J
" M% g  E! Q# }+ T8 S
我百度了一下相关的问题:有介绍的说
; o8 j" @9 U8 r, `& `5 L. a: _1 _
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。8 P" f7 Z2 I& `$ ]% H9 o: G
9 x  P- N# L. y0 y+ d4 o
建议调试在u-boot中进行,方便确认问题。
% M+ g% {* f& l' \' V2 z% @" \" M1 w! A, Z
u-boot下主要确认三点:5 `- m) i$ P' J  w) v; C" [
' x8 U& }/ X: E& p5 s' n* N1 u
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作; }, {( d( |1 W( I
; i2 A; i' h8 b0 }$ b8 R& a" H0 H
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
) D2 i: M, {' z* Q& H
  g/ i: E, M8 k- Y3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??- P8 j' t" ]/ G! ^  B2 h
6 m! q' w% n. z5 H: `& p3 ~6 c
Linux下调试也是确认以上三点。
$ {- p; S* V  v5 |$ P4 I$ o5 W7 B" j9 R: o  _9 b% O
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 08:44 , Processed in 0.043700 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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