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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
; N; T% l* y8 f2 B[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1/ ^" V0 s: x, Z5 D' g. Z
[    2.107743] davinci_mdio.0: probed8 b  M+ v4 M9 \  E9 L5 P
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
) u8 p4 ?: p3 k8 `[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown/ v3 N/ Y0 r2 i* Y. V4 m/ q7 j3 n
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
- E8 y* S) @. p' V8 G# |$ Y. u" Y
9 d( H* P% y' a5 k[    2.137188] PPP generic driver version 2.4.2
" h# v4 \& }6 A6 y( S" C6 ]$ u[    2.143236] PPP BSD Compression module registered+ u* D& E) I' P( Q9 J% ^/ d
6 k  r: w3 k7 s0 z# h
7 f$ X  W# A9 E) i& N  a8 W4 z
在linux内核中的代码应该是以下:# R) q( W) x% m' k& ~
        // 注册mii_bus% b4 K& s* G) q$ y
        /* register the mii bus 2.   注册mii bus 2*/
3 b# X6 Z- f9 x2 ?0 J        ret = mdiobus_register(data->bus);$ Y. z& i& m; X& Z) p
        if (ret)/ X( r; f6 e5 E1 f8 a, X7 Y
                goto bail_out;
1 l" ?! j# W2 N' }9 x+ c% n* c
        /* scan and dump the bus 扫描和转储总线*/- x% }( q3 d: Y* t
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {2 \- R: Y  s- I; d
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据5 c' F0 R; S) c, |. d
                if (phy) {
* Y  |. A1 M; f, s2 ~                        dev_info(dev, "phy[%d]: device %s, driver %s\n",5 B# ^" S; A0 N' i0 P6 N
                                 phy->addr, dev_name(&phy->dev),3 t1 S3 Y* ?6 B8 C! m
                                 phy->drv ? phy->drv->name : "unknown");1 g; j5 h# g) F3 `* i2 u
                }
  Q( }3 s/ B5 A5 n2 F        }& e; H; a( ?' {
2 I  G6 E4 V/ @, {- W
0 h. }, D9 y6 @7 E6 l
最终在后面 网络启动有问题. @* U( r4 d* v2 b
[    2.387752] PHY davinci_mdio-0:00 not found6 p0 i8 O+ r& z* @
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00# V3 c8 z5 b8 J. Q1 W0 e
[    2.398254] IP-Config: Failed to open eth0( a6 W7 M- u5 B  d" v2 E8 y) ?0 |
[    2.402589] IP-Config: No network devices available.: Z5 F+ x6 |- }: ?

7 F) o) F0 |' v% j1 \1 d4 W/ T# {* p3 J3 [- I

' U# \  z! l  g1,请问下,这是什么原因造成的?
8 t. @9 ?+ a. l# T; v1 V( z3 |2,phy模块 和网络驱动开发的过程 是什么样的关系?( n, V/ N% P1 W5 x. Q& Z8 g  z" n
谢谢
) ]3 ~/ @/ }9 f+ r
分享到:  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  ^" Y9 j, E- ?5 S  ^
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
0 a5 \8 b1 }" E7 _" z; U
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
2 A' X/ U# Y5 H( d9 f( g请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
, T( Q7 F8 N7 v1 f! q6 F谢谢

点评

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
$ O1 v# x/ s0 `% G- R用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

- x, h" ]/ X# \6 U; u& Slinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
7 r  F% i* W; i' ~7 G7 c一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
0 ~8 X! M, u3 `1 {创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
4 O1 R- S, B# K# q$ u
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
7 A/ E+ S9 j3 h: f. g在linux启动时,打印的信息是:/ E- B% H2 |; p, I3 j$ q
EMAC: MII PHY configured, RMII PHY will not be functional,
2 i; I; x, \2 r  D. B; k应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。2 q- o0 v: q$ L9 h$ L+ v$ q8 [
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
4 \0 ]8 T0 F% g8 [% [7 r创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

9 K* V) N- W' f- Z3 z& X- a我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
; G/ q3 t: |' {. u7 C; Ilinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。% n! j, y1 P) c% r% E1 s& j
一般来说,板级的emac驱动都 ...
: z+ `" F' x# u$ w( _9 o
vefone您好,有些还需要请教下您。$ E5 ~+ p- L8 {* u/ o! ~; p  F
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1  w8 N; s8 @$ x$ [3 c. t+ m

8 V* m$ i% y+ G" y( G3 ^# yvoid __init davinci_common_init(struct davinci_soc_info *soc_info)# J. d2 ^" F6 M; U% n

- }0 }& U/ ?/ o% e  w8 n* H: T8 \{
" Q" [& _+ Q2 g) S/ s1 p$ [5 \4 x4 T
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
8 i* X1 Z7 W' G  k; p9 y
  D# |" w& L" q4 s3 C" G}
7 {9 {* q4 S4 g6 D0 x" i9 |8 j1 q) o& [
//XXX 还是前面的
( V! P% R7 d$ {- E[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
" q( v1 R0 G+ o8 {[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
+ ~, V: w- S& H0 e& ^[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown/ X- [! l  O) y

1 w7 \0 X& t" J2 k% [0 B9 u3 L在后面, @( i/ Q  z9 \) C! g+ B! i4 D; a
( }' g) g$ b3 B7 _
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了1 E% V! {: e3 O" V; f  D
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00! h1 {& V% o% Z& A% {( f% J' ?0 l

7 G% ?. U# P* j% o5 I+ M: u请问下这是什么原因?
+ u' R: I, R+ w8 f% V5 O  `
. V) n( Q* h" e  ]4 Y我百度了一下相关的问题:有介绍的说2 o6 M. ?  Q! y% H$ c6 n8 O

' g2 F; ~+ v$ e) q由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。# `5 T# ^3 ?7 n, a, K$ y

7 \+ d5 ?, d5 |5 d" j/ P建议调试在u-boot中进行,方便确认问题。4 F0 M9 H- g4 Z9 ^2 |6 p1 I
+ B* A7 ~2 h" {+ ?
u-boot下主要确认三点:
9 N) z$ ~# o2 W  Z4 H1 U9 S9 c  O: x5 ^/ C$ U
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
" [6 {! |5 p4 F9 h! @6 O5 {. y5 F* r, @! m
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足7 E% @8 Z/ t  Z4 c$ _% a) ?

% |/ I. Q1 Q: a- n9 ?; J1 b  n' C3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??, o  s9 g3 d0 |) C2 ~  a
8 [7 \0 G% T" X
Linux下调试也是确认以上三点。, H% f- \5 M% i  a5 I

+ I" S7 Z! E* H- Q, A可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 02:40 , Processed in 0.042158 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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