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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题1 B% d( C' m5 H0 E& D9 c  ]8 @8 U
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff13 a% N7 U( f- \* j* g6 X. N6 I
[    2.107743] davinci_mdio.0: probed
& V+ F. }# w! }' W5 N[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题0 S$ w0 ?- C( y) @: A0 g6 F
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown" W" Q3 f( ~" X- f) {$ L! Y: W
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown/ s" ]/ `  p$ \, X. t, Y6 j

, t, D* D! p  o' \5 p% N[    2.137188] PPP generic driver version 2.4.28 n: t- g" @% G: E$ B
[    2.143236] PPP BSD Compression module registered5 I* H" c/ s3 q+ a' A; X1 f
. i) r2 R3 V0 t3 N' ^! L1 @. d
! H3 X8 c. j! U  B, \
在linux内核中的代码应该是以下:
# c2 {7 H8 f$ |+ X9 f        // 注册mii_bus
: ?4 F' ^$ V  |. Q* P        /* register the mii bus 2.   注册mii bus 2*/5 b4 f2 X6 T: u* J
        ret = mdiobus_register(data->bus);6 q2 W, H# i/ {3 v. E4 ?. z
        if (ret)
+ i5 ^2 t) j; v9 |" ~) `                goto bail_out;
- e8 i) R  J' ^7 z4 V
: |+ ?/ Z& T9 g* c7 w1 V1 N        /* scan and dump the bus 扫描和转储总线*/# d9 g; G' A1 W: \
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {% O: @' |. p9 \% y9 |! P& _6 V
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
2 C/ T) M, x  w+ A% w3 e  x                if (phy) {1 e3 I! `0 t6 T4 W9 C( _
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
$ Q9 Y& H$ F( E5 r% }+ i, l$ }5 G, K                                 phy->addr, dev_name(&phy->dev),
& I) n1 r: @" M$ I5 C                                 phy->drv ? phy->drv->name : "unknown");) O8 {  x/ o, @( {1 P" ]
                }) p& b+ z- H/ B- @; `, k" {  h! z
        }
! z. c6 _3 k4 O' f8 O+ _8 g) c- _0 c$ t/ v  k# Z. i7 Z" _& T

2 ]& m% B! Q$ L& ^8 f- d# B最终在后面 网络启动有问题7 }9 j2 u8 B/ c  e! e: T
[    2.387752] PHY davinci_mdio-0:00 not found3 U: D' }- D# t8 O, d7 P
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
9 x& C+ L% Z$ K3 s[    2.398254] IP-Config: Failed to open eth0
; }: W$ P0 f. u4 `/ O[    2.402589] IP-Config: No network devices available.
1 m8 T1 x7 w! K4 Y$ O# O0 v% F0 Q; p

* O+ q% V$ u. q
6 K. }, q. `7 H. e$ [
1,请问下,这是什么原因造成的?
: I9 w, W, z, `' s- A$ p, H2,phy模块 和网络驱动开发的过程 是什么样的关系?. z9 V  A& o  N. l' W) T
谢谢
4 ^% A4 Z" f7 E. |
分享到:  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
' G- X6 y# a, j! p6 x7 a' l请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

& F7 o5 h+ N: [3 L" Q. n  d用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
$ l% s( D& z- r% `8 c请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?5 j" U) f; K; @, J
谢谢

点评

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
* C8 {& Q( T; \- e, {用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
* Q: h& v  n4 h# g! \2 t7 U1 F/ {
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
9 q4 L+ v( Q8 K3 [; 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! n3 Z0 S4 C9 @+ N8 v! Y
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

# a, {6 z4 E6 \- V' F请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?7 E% f- d1 N/ n( x; g/ u  n
在linux启动时,打印的信息是:5 `% G+ W6 C/ [% T6 d8 _
EMAC: MII PHY configured, RMII PHY will not be functional,
8 z) X! k3 a9 Z2 v应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
. J0 I5 n* v- [. h* _' M谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:462 y9 X, G5 g& y
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
$ Z  X1 O: `# H1 i
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:409 Q( Y; u0 C# ~' V
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
) l8 K2 Z( ?7 C1 Y& x- W一般来说,板级的emac驱动都 ...
- c0 U* E4 Y0 R8 F
vefone您好,有些还需要请教下您。
$ {$ G4 L4 ~. N9 `' C然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
, T) M& y/ \8 c7 u8 V
! M& p$ B7 s/ f- T0 D+ H/ Vvoid __init davinci_common_init(struct davinci_soc_info *soc_info)
# j# i) _5 K6 l' p& m! @5 ^& R+ |
6 g+ b! d8 [0 o$ Z  a' b{
& v: o+ T5 K& B+ R- k
! A9 u6 o# [3 S5 y             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口  L% n* n! F# Z" O

! `. T' a' S% U4 u9 o2 g4 T. I}/ y  P# ~. \2 A# C

: `7 |6 I0 H" D( S. a  w" n//XXX 还是前面的
& [. b8 |! f9 v2 k# [; q! M: x[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
* {/ G) ~: q8 z( E8 g[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
7 p- o4 V$ L( T8 h: c8 s[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
+ [% S% P+ @* @2 `% d- A! }, u. j, Q
! Q# E- S0 |9 Z5 D# N# W在后面" q# t8 e3 S' {4 ^% e. R* X
( l, }( a5 }$ r; q" S. i9 h
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了5 t& I, Z- W  x+ S; v
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
5 L$ A2 ^" p4 W* C
$ W0 [5 _" d( m! @请问下这是什么原因?* ?3 Y1 S. m, @% e4 V! i9 |, S
; D) w* b: g: s7 |
我百度了一下相关的问题:有介绍的说
' g( C5 `, {+ a
" B2 d, j/ }. ~2 o! m( H由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。  v9 }# Q  \6 a" ]

7 [. B9 J% o! n3 s建议调试在u-boot中进行,方便确认问题。: H* }1 V  |) a8 m# u/ d7 F
5 K* l7 E7 H( _
u-boot下主要确认三点:7 v! b% I6 n" F, `. v) t) L
# P1 y. c, @2 i/ Q4 Q* I( S& @
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作- U) m# q/ t, ?$ h% ]  E) U

7 O8 K/ }) ~9 h3 N2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
, d6 f4 H% ^% R
1 }6 X8 Y. h* q" G2 ~- V7 Z) K3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
4 s- x% @( b+ S8 v; X, y6 U6 C! ?1 e' @
Linux下调试也是确认以上三点。# w9 v1 \; _0 L: b
( s( Y( m: ?% n% _: @
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 04:15 , Processed in 0.048091 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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