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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
' l6 i0 q2 s  V! X[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1; p$ M/ W" P' _9 n
[    2.107743] davinci_mdio.0: probed
0 Q% Y: L6 g4 J; k& Z) }( ^[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
0 b& q: T; v& F& i1 P( Y7 N[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown7 t1 d% Z7 w& H5 j+ l: i
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
+ Q6 I  z9 q6 F1 Z
9 H+ F& {/ |0 r2 r& V, @( A4 g: M; |[    2.137188] PPP generic driver version 2.4.2
. x2 w  M; x3 W  K7 N[    2.143236] PPP BSD Compression module registered- G+ }8 t# i5 ?6 O" I1 P

* H2 x  J( T# `* y! B: T, I* [4 k) T1 h  N8 O
在linux内核中的代码应该是以下:5 a. B" ^) @5 ]6 d4 j3 @0 V
        // 注册mii_bus
  \: z/ d3 X1 x: S3 U+ Q$ l: k; z' T* l        /* register the mii bus 2.   注册mii bus 2*/; s, A4 B4 n- X  e8 Z. s  d6 ~% ?% _
        ret = mdiobus_register(data->bus);. B3 O* Z- D& m; c  q) o4 l$ ^# I
        if (ret)3 v' G$ ~0 r& n- e! H- q9 ]; S
                goto bail_out;
% L" i2 l, q$ M) S. c1 ~' A% E0 ?0 g# J" K) \
        /* scan and dump the bus 扫描和转储总线*/
+ {( I$ z9 }/ x4 ~        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
! W6 k$ W+ z8 Z! _* k; c1 H$ ~                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
; X3 D, S9 V$ D2 K                if (phy) {
; b6 c' r: V5 {( e+ q3 e; N                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
, a7 Q. v! ~& `- f, W; H                                 phy->addr, dev_name(&phy->dev),% d1 [( R& J8 o" P/ q- ?
                                 phy->drv ? phy->drv->name : "unknown");$ a+ s: L7 X3 I$ @4 e  f4 h
                }! v+ @2 }* e6 p
        }# E+ e; B* J6 @: X+ G& g

- P, q( e* S4 W5 n% m* c9 N/ ?* e- ]0 M: l- ~
最终在后面 网络启动有问题
  X/ F/ Q0 p: @) q# A[    2.387752] PHY davinci_mdio-0:00 not found
5 `/ o! K+ O6 z9 W) y" ^[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00/ v: e0 v" ~9 [/ Q3 g# v3 u$ Y
[    2.398254] IP-Config: Failed to open eth0) D' u0 h1 O, M( t* }( O) G: X- A
[    2.402589] IP-Config: No network devices available.4 X0 u% Q* _2 M6 B
: m; x; k5 n% z0 D

6 g: t& m2 m  |

+ j; [6 G9 [: p5 K& [# k! {1,请问下,这是什么原因造成的?
4 ^7 ?% I' R% y2 ~5 R9 O% {2,phy模块 和网络驱动开发的过程 是什么样的关系?7 P" ~' B% X6 m! U: ?5 K% A) @
谢谢
  a! J: |9 W4 J
分享到:  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 Y& P9 M* o8 w2 a" S" H3 G请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

$ A. W- [( b5 @7 ?' r, z1 g用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,6 u# y0 I! W$ V) M) G7 {: Q, `
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?( t5 g3 A+ o3 o
谢谢

点评

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
* Q" b$ ?+ [/ l& _9 |1 m; ?用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

( N# J+ Q/ ~7 D; P; Flinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
2 B0 s# u; X2 Y3 A$ L) {" T0 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
" t! Z+ m" J7 |: x7 Q% g) R创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

* ?1 b3 v. f! ~1 `* ^- C请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?) [5 Z9 O: a9 T) t* ]/ y
在linux启动时,打印的信息是:6 G4 B- ?- p- y" |2 J' g( a
EMAC: MII PHY configured, RMII PHY will not be functional,+ K+ X3 W, e6 j: s! z
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
: v) C, ]% L. d! I: ~/ F谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
& }3 \) l. H, H% w6 F! ]/ S1 _创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
0 i- Y* L! a# C
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
8 _1 u9 l+ s# x+ flinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。( {% z  I7 h$ P+ c1 z- X
一般来说,板级的emac驱动都 ...

# J% h% z8 t* A. d. z7 a* svefone您好,有些还需要请教下您。# s8 E( \# ]+ z/ W1 [1 v
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
+ W1 d, \& a7 j. z3 f
! Q9 y2 R, M$ m' m. @- I# a% kvoid __init davinci_common_init(struct davinci_soc_info *soc_info)6 v! t( |: X' ?; e

, a- q& Y) V" W. u& f% {% V/ E{' j$ J2 Y  s+ N5 x' F/ ~3 q0 k" G

, t8 |% g) R# C( o3 r+ E, o             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
; o. e/ V6 D6 H/ k: H/ f( \: c- S9 F- \' z: ^! a
}
* {+ V& P  Y& H* i# Y5 b/ g, _* N6 f. {0 A# N/ K
//XXX 还是前面的
) S& _$ F( F3 B' ?6 P4 L[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
! V0 c* s: n4 g0 f# i5 c" H/ k9 |[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown. F" ?1 @0 f0 S
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
* z; F; C# O: L3 X0 ?9 B/ F- U$ O
在后面/ c9 V- U, t( ]3 Q' R& }0 {
# i/ Z1 X& t9 Q# w) L( I
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
: O) O: Y, Z% r4 y2 ~$ k1 M[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:008 `& ~% K2 Z1 q& c# l) y, u3 D/ _

. x, o; a% K/ h" ^  {- X* H请问下这是什么原因?$ U$ P6 k0 x/ G" j$ {9 X

* O; L& F: i" E$ |1 S* c) _我百度了一下相关的问题:有介绍的说" B7 l+ A$ W$ A6 x6 f. |
5 ]) s" {1 }% P; F2 ^- J9 [; L
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。! |# _$ Y( N6 ]. ~' p" x
( `. h1 K( f2 c" V* o+ i+ ~
建议调试在u-boot中进行,方便确认问题。3 P( `- d$ S+ t' l9 C0 M
: p2 a; s- x: T7 a: _
u-boot下主要确认三点:
, j. _+ i3 h/ H' S5 |2 U% s
0 t1 o0 J  H% G9 R: ~- @- C1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作  u) T2 Z( I: @4 h
: d2 o, h5 K3 @' U* X! S
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足( E0 {2 A4 e1 T" _, g8 h
7 n0 v7 k7 `. `
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
5 V3 l8 O) u3 r, c
; {8 R7 ^4 V8 x9 ~: oLinux下调试也是确认以上三点。, Q& R* V5 s6 }5 i# t+ t# z0 d" e
3 b- v& k+ g. l$ `" D2 |
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-3 04:50 , Processed in 0.042575 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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