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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题# y, n( B" U% \. b. {
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1/ ~3 r- u9 a* \' }8 ^
[    2.107743] davinci_mdio.0: probed7 Q; V: s3 K' Z; L# o
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题* A3 Z* a5 J, D, k3 w
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown( x5 i4 _6 I4 p' F: G
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown5 X4 O2 q! O7 {; l  e+ a  B$ n
9 l3 @, I$ x( [: W% Z) T0 d4 M
[    2.137188] PPP generic driver version 2.4.2
, x0 i2 |2 L4 E- G$ P$ L, j( u[    2.143236] PPP BSD Compression module registered
" y& ]8 E4 S0 Z, \6 I7 J) e/ T
( M% p8 W, X) L3 W0 _3 I+ H# j: b. b* J, z: q2 W( j
在linux内核中的代码应该是以下:: O0 h* \8 s+ G2 E+ f
        // 注册mii_bus7 f( I  J& U. T
        /* register the mii bus 2.   注册mii bus 2*/
5 y  v" w  U& R$ Z        ret = mdiobus_register(data->bus);( N& u4 n3 F" C
        if (ret)6 a9 N8 E! M9 g. Z6 r: @/ I
                goto bail_out;
7 b) h( J5 L* q; e3 V$ s
- T4 A* m0 _9 R$ l4 U' U        /* scan and dump the bus 扫描和转储总线*/
3 ]$ P" e0 w! P6 J+ l" ]0 X1 e        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {  F, t9 |- [3 P% ]. O
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据' D/ k/ X% a/ y( V% t3 u5 U1 n- F
                if (phy) {
+ n0 X& R6 a* e& `2 f4 B7 L2 K* E                        dev_info(dev, "phy[%d]: device %s, driver %s\n",& m: E8 c! W7 e# K
                                 phy->addr, dev_name(&phy->dev),
$ j) @% @, n' B* ^' d7 c                                 phy->drv ? phy->drv->name : "unknown");
2 C9 F- B, E) u  e5 a! |; Z, |                }8 I2 h( `5 w1 r# z# k% r% P; P
        }
! B7 q% q( v  x# [
6 T. M0 V# e  S' H$ U7 I" V0 k# g2 H/ R, p" U5 v4 i
最终在后面 网络启动有问题
. I0 y2 k- k6 ^0 D. @1 Z' \' w0 |[    2.387752] PHY davinci_mdio-0:00 not found
4 Y/ n  ^8 d/ ?[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
# H# V% o' v* ^1 B! e( g[    2.398254] IP-Config: Failed to open eth0( q- u9 o& _* g8 I$ Q+ n) @. S" ~
[    2.402589] IP-Config: No network devices available.9 w% l/ g* Q8 _$ f2 L

8 h& D0 [; `+ n8 y8 P, L/ T
  G6 h/ X2 i2 Y8 U  r" w5 m
+ k/ H$ @: G  y. d7 \& |/ B* `
1,请问下,这是什么原因造成的?+ `- h3 Z; l. I  W* o
2,phy模块 和网络驱动开发的过程 是什么样的关系?
6 ]2 t' h$ g! k0 |6 @' H- c谢谢
, _9 o$ e" ^6 P( o3 N6 {. C
分享到:  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
- A) x9 W( N( C  M- M请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
2 \7 p: K& a7 b; |" g/ v  D, v# B
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
+ Y4 V( n; R: [; p& U. S" t# q请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?9 M8 R2 U+ g& ]5 R4 Z
谢谢

点评

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  F, R* U9 Z& K- @9 ]- J
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

# G$ Y8 q# y; k( P. W( Elinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。9 m% B% b8 \0 B3 K% J/ D
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
5 t- |2 F! r0 p2 E- Z, l* i创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

" v+ K) D: w* |/ Y$ e: X请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
1 b' F6 Q( k) c6 k% O+ O在linux启动时,打印的信息是:
4 ?4 I4 E; j0 f2 SEMAC: MII PHY configured, RMII PHY will not be functional,# d( H* Q; a! O$ a) v
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。0 y* H% Z3 ?- A& w
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
% `/ B" T2 \: G! z# Z1 O0 f# o创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

! |9 {# M( |5 C2 b8 s# Y我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
) }* x& Y6 W' |, {linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。) F" q2 J* B" [
一般来说,板级的emac驱动都 ...
; q* o, ?  n! k" i
vefone您好,有些还需要请教下您。
  V% _. Z0 q- l. V+ y5 O- e- b% J然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1# [( V" P; i# {  V1 s
; l% y- D$ k+ ^9 F
void __init davinci_common_init(struct davinci_soc_info *soc_info)- [; x6 E( A) o: g$ M' `

  |8 U' H2 l: G% ^* m{
/ S0 o  J9 j6 C  J6 q( v& Y
4 P/ s  X8 B6 G$ ?$ o; [             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
5 B4 \) _" T  l" T$ F# g# f* q6 l1 W0 n$ D3 d& @
}- _8 c1 {6 i( L

, S+ ^/ v- H' i8 o$ U9 s  R: m9 Y6 o3 T//XXX 还是前面的. v  r! s" f! k1 [" F+ h  S! r# Y
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,   e# k' N9 u" v  _
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
& ~6 e8 H5 `1 e[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
- M) l5 i0 t9 x3 j6 P6 b  h4 R* s: ?6 ~$ L+ A& I1 |
在后面
8 {7 P6 i5 W8 }
/ ~! {) X# ^# g4 K" S  Y: q[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了" V7 {' t* t  [9 \; V/ F, T3 q
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:001 C; z9 t  ?& w; C
* ?+ T' n& D* b& V
请问下这是什么原因?: {$ i6 }3 Y9 e, ?9 T

+ a- `. m7 G9 C: {0 L2 ^& u/ Y$ F# m我百度了一下相关的问题:有介绍的说: C! o+ q- }, B  B/ @  y
  L6 p* }' \& H% o
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
8 D3 b8 Q) J8 z. J& Z" U( N* e1 j7 N% K7 m7 y& [' E
建议调试在u-boot中进行,方便确认问题。
' Q* ]1 \# ~. {9 Z! G9 `. k' E6 Z8 {! Y8 p7 {' c8 I3 k
u-boot下主要确认三点:
$ `! @: d. r% D' V
% ?# j" a+ v8 ^3 W+ o- U1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作* z" ^4 F5 g2 U/ I- d

3 o4 _3 N; J' f$ h8 T2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
9 R& v, ]3 J* M  W( |6 f" ~' `
, w0 @8 S' w7 C+ Z# r& l8 d* h3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
" V2 |+ H% R* H0 m/ {- s) P9 R: l, C: P: M
Linux下调试也是确认以上三点。
6 c6 P# P# q- ?2 O1 S& s4 @0 ^& w# M/ n' C6 O8 W2 E
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 07:10 , Processed in 0.041768 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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