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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题/ n* b1 ~( F& T, q" y
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
. [# K. P5 _$ N' P  O[    2.107743] davinci_mdio.0: probed
0 C5 V1 j4 `# |7 A[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
6 [& B* {( F7 J7 N[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
2 Q9 x' I4 S1 n3 C9 g2 K[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
: r3 u1 B1 }4 B" i) E3 }" j) g0 U% ]5 b, ]  b
[    2.137188] PPP generic driver version 2.4.2
* `( U+ V, G7 V* P' w$ n[    2.143236] PPP BSD Compression module registered* K4 T" c' x. |$ Z3 i7 k) m

: d! l/ i9 Z' z2 R; V% M4 }8 E2 C' p) |7 F8 z
在linux内核中的代码应该是以下:
, H2 b8 k( x7 D. `# Z8 k9 e. y        // 注册mii_bus
/ N: ~1 |# c1 w3 P( L        /* register the mii bus 2.   注册mii bus 2*/
2 M3 n; C4 W8 z& M8 x2 W- L        ret = mdiobus_register(data->bus);* v! B0 I) l) J& j
        if (ret)7 B9 R. v, B2 s) i9 O; I! n
                goto bail_out;: N+ ^- |3 T+ Q( ~( h
& i7 l& g: i" V- Y) l# D$ ~
        /* scan and dump the bus 扫描和转储总线*/& D8 R9 b/ ^; \  P
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {8 j# j5 Y& \& w" A% Z/ A1 i0 _
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据/ e+ l% t# q0 D' b+ w* s" H( Y+ h
                if (phy) {
1 [3 ~+ r# [( y+ K  d& M                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
% l/ @( B) q6 I" Z0 S$ X                                 phy->addr, dev_name(&phy->dev),
4 G2 {- w6 ~. x" M1 ~" c! q7 b                                 phy->drv ? phy->drv->name : "unknown");+ t9 H; A( ]! \+ B4 M4 _; L
                }( U0 w( j, o) ^& n8 ]& l% j
        }
6 I# n) V( l' x) T* w3 h; A2 k4 ?0 R. Q
8 i1 J5 m! A$ k+ Y: x, n
最终在后面 网络启动有问题
5 [! O/ ?: y8 @# e0 H) p+ C[    2.387752] PHY davinci_mdio-0:00 not found/ x# t$ K, Y' ?* o
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00- N- p0 x% l! Z1 W! G- ~3 x
[    2.398254] IP-Config: Failed to open eth05 K$ P% V' x$ ?# u1 i
[    2.402589] IP-Config: No network devices available.' u0 i  X! ^- B' q+ O6 [
, O! t% I( l& R. Y. v+ F: z6 f

+ f( j( X3 F9 O
( d+ |; x, s% s$ }! V7 h
1,请问下,这是什么原因造成的?
0 l2 y4 J( _% X2,phy模块 和网络驱动开发的过程 是什么样的关系?
! X& ]! P$ K" k+ o$ r谢谢  D% k, w$ t# [4 Y9 y* ?7 W
分享到:  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
7 H& d4 `5 u5 _( l. b请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
2 C9 f  S, n& {% r( _8 p
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,5 v6 F+ R) r! ?. l
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
( d, u' g1 e) D' m* d! h; P8 b" L. 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
1 B7 \0 h+ ?  R6 f  R用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

) m2 n$ Y9 X2 W0 x6 f; tlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。* S; V! Y; \; t
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46. F# b- |" r7 E# K- m; F4 {
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
8 {" v! o2 Z& z9 g# C
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
$ M# W# M6 t4 U. f7 b在linux启动时,打印的信息是:
; z$ |1 c4 s' d% k7 s5 i9 M! E, VEMAC: MII PHY configured, RMII PHY will not be functional,# ?' }7 m+ }* g  K  l6 P2 A
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。8 J. _8 [; s' [+ w8 K6 p& ]
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
6 j" {# |; P: K' W创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

( k9 Q" k( r8 |( L. P2 \; V- f% L我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
$ T$ E7 o0 q4 g1 N1 O1 t; Hlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
! ?! s* C( }' s- W/ N% {一般来说,板级的emac驱动都 ...
: [9 i" p9 t8 u4 R4 v( c) G0 N
vefone您好,有些还需要请教下您。& M9 G6 j; A2 B. {7 L0 |
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为15 q3 b  e( q- F& u$ A" b
  T/ ^- t- T! T7 A1 _6 w
void __init davinci_common_init(struct davinci_soc_info *soc_info)
: i7 P8 `  V2 n4 P' a( \( R* g# i( t1 W
{
" ^4 D5 i8 e7 m' N& I$ L" T- x, A3 H  V% j* O( l1 u7 j) m
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口0 v: j# _! k; L

6 ?/ y( C$ @$ ]; z' Y) X4 r}
4 b) |( w$ e. e: B2 B& e1 a  w
; `% I$ U2 F$ P/ l  B% E( F4 S//XXX 还是前面的
7 A7 B2 n, m2 d6 a$ w: Y, [; l[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
' M4 ~- R; _+ c: I! x  \[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
5 G7 \7 `, M/ t7 V[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
1 L) t. n8 T' A; B0 z) p7 t7 f4 S2 \/ a1 h
在后面. E8 @6 E! o+ V/ }4 x* x9 Q

  Y' D8 \9 h) q5 a[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
3 c" r+ j; T/ |. C# ^% @[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:009 ~  C# u, D$ A2 ~9 v* [

/ D5 S4 F. k- A7 a" B/ t# h请问下这是什么原因?
- _/ |& U$ Q, e  s
1 T2 G: R; z& ~1 O6 }$ g我百度了一下相关的问题:有介绍的说
$ |- A. {7 V* H0 B
9 c- K/ G/ \% q% B$ Q* A2 Y由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
) p! ~- ~- X5 |4 e
7 n6 ^3 N- i2 B1 H! ]+ t5 |. z/ {建议调试在u-boot中进行,方便确认问题。
3 }; l1 U4 L# B5 `% f1 |, |$ c
% B7 C% s9 n, {u-boot下主要确认三点:
/ s' m, |. @2 w5 I5 d( s. [) O
6 P# w! K+ ^2 V9 f9 k% I. v1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作, J+ ?: c/ x7 K
+ a. {# ^$ y: f7 o- L5 F
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
0 ]% I- ?0 x6 s  e, I5 ]2 G7 Y  d0 M2 c3 W3 u" K
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
) G; K( f5 H7 D2 G
2 Y) ^. q- J8 E; @/ {1 w! \Linux下调试也是确认以上三点。& W4 q0 o6 m1 z8 c
2 R5 }4 H4 o- r9 h" c* R' V$ O
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 01:28 , Processed in 0.042696 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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