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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题, _8 E" a( P* ~1 D) M5 X! n
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
: n, F# N2 ?9 U[    2.107743] davinci_mdio.0: probed1 P2 c% h1 H0 y# h$ }6 \! `( r' b
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题  I. S. x0 I  ~# N
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
- `+ J9 P) i: j; s7 k1 j% M5 p5 P[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown* T& ?" M7 i& y& m
* [. `- _8 C' _7 C3 e( V
[    2.137188] PPP generic driver version 2.4.2
% J' g4 x7 s6 b4 Q$ x( }[    2.143236] PPP BSD Compression module registered
3 E% y0 y3 U* ^$ o) G' p0 o2 y) w: b  H  e+ v! z9 ]

. ?0 W7 _8 d1 n% o5 s9 t/ \在linux内核中的代码应该是以下:+ L; \( f% i( m% K
        // 注册mii_bus% O( D' H# h- \; M+ T1 J6 l
        /* register the mii bus 2.   注册mii bus 2*/
3 r+ e2 u- P+ L+ L8 w+ v        ret = mdiobus_register(data->bus);* J9 ~5 w/ G5 R2 W- b& k
        if (ret)
5 I7 J( N" k+ e; k8 M5 r6 M                goto bail_out;
) i" l# \( l" a$ s% ]
- O8 ^5 w8 X# Y2 v: B* Q: b        /* scan and dump the bus 扫描和转储总线*/
- \; G5 I# N1 U6 O2 z0 W$ c4 h        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
0 e3 I3 K$ r6 j                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据5 e1 Z: b. h# j7 U/ h
                if (phy) {. e1 Z. D8 o) {, U8 f
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",/ h, f. W/ A4 L; @
                                 phy->addr, dev_name(&phy->dev),
2 E3 `, ]0 D4 j  V; N                                 phy->drv ? phy->drv->name : "unknown");; i! F; M/ ]9 [% H1 l
                }
) r- |8 ?9 S( E, a        }0 R  I" \* j( Y- R) K

8 H. \3 Q8 ?  }0 m# F( N: I
( j4 Z; r, q. }5 j. x* J最终在后面 网络启动有问题% P$ r: W3 Q  e
[    2.387752] PHY davinci_mdio-0:00 not found# S# @/ z; `1 f5 t0 _# ~' _! I  @
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00/ _8 \; x2 f2 G  k! o' V
[    2.398254] IP-Config: Failed to open eth0
; P5 ], ]( `# l3 Y4 E+ \) u[    2.402589] IP-Config: No network devices available.
) q! [( F9 g- \, h8 U& ^5 S/ `$ M% q% h3 q

) P# d# Y. a* v0 u: W" U

0 a7 @$ J1 k6 t, o0 n1,请问下,这是什么原因造成的?
1 {3 h" a8 C  \7 Z6 w3 j5 E' g) O& e2,phy模块 和网络驱动开发的过程 是什么样的关系?
4 r3 C. @3 ]4 H" G/ V$ b& f0 `0 S$ `) T谢谢5 E( [: i' n' m0 ]3 ~
分享到:  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
* p" ~' b) J2 N* l. T$ v请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
6 t$ G5 L- I# Q, R" N
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,: }! D0 H: @. `, J3 h" p
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
: b( x$ n+ H0 k8 u谢谢

点评

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- N9 P. Z, V2 O3 c
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

: C( H  w: J- ?, y& slinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。8 l, o) K/ `' `2 h1 p6 O: k
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
1 w* p7 C; I% E0 j  w- w创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

6 U& l" T+ ~- O请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
! x/ y  D; P* R+ C/ h在linux启动时,打印的信息是:
2 J6 A. @' C" r5 G( v& sEMAC: MII PHY configured, RMII PHY will not be functional," G3 @  w# ]: ~3 W
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。* n: s  e# `7 ~3 n+ p" t6 g; j
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
5 p1 \2 b9 `% L3 m, a( H创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

/ Y+ C# Z4 M: s我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40+ J4 B- L1 j* ]2 ^1 ^5 j
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
2 {6 [& l+ X3 K* c1 [1 Q一般来说,板级的emac驱动都 ...

8 a% u1 n2 O5 f+ \( pvefone您好,有些还需要请教下您。' y8 g  ~/ M7 c5 b; r5 U
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
6 B9 M( ^" G) d: d7 W1 |6 p9 E. H5 p9 r
void __init davinci_common_init(struct davinci_soc_info *soc_info)' u* ^! E# ^9 X6 Q# ]" @

0 h. M9 v5 V; r& p  q" t6 v2 T- s% V  [{' E5 n; E% w5 w7 J2 ^" T5 N
" j+ y6 v8 ]) O' z) q4 [7 I0 w# m1 I. ?
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
3 o. B0 r% v; Y+ B+ n5 F
7 b9 I& R. M& P4 V}
+ d1 S5 i7 i. N& {
: q- B4 B& W' l" x+ O  b  G//XXX 还是前面的
6 s: D# V4 y2 P$ G[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
- k6 y0 s: I' E; x[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
1 q8 d) V' Z0 a' M! d4 Y[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
# ]* ?7 C9 D# I0 g- o, Q' n3 y9 E! ]* `; J4 a4 |" M& z: D
在后面, _9 A8 ~  B5 z" I

+ b$ S) |, o& T+ `[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了5 {0 ]: P2 m7 ?  k5 x8 }  |; ^+ N
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
5 s& K. U+ w) e0 \" Y
/ T5 e) T) x. n- J, y6 o请问下这是什么原因?% n. O2 c' ~& f2 _% g7 k
3 t" l* A  D8 z
我百度了一下相关的问题:有介绍的说  P9 O  D" V+ ^: l3 {

. G: U* O- q: c9 E4 I. {. }由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。+ @  c7 C1 n1 a: Q- ]

0 h* D# [2 P. Y& j+ H6 ?" D建议调试在u-boot中进行,方便确认问题。9 N& a+ \9 \% i& [. e6 _9 l
% Y0 r0 o4 D) F
u-boot下主要确认三点:
! }2 `! M6 H$ N8 L9 [4 V  I! q5 B( i  ?5 h& I2 `5 @9 y8 z! k# L
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
5 }7 Y6 u1 T+ P
' I* Y' }8 {) U5 H! |1 f4 ]  L2)Pinmux configuration to support rmii interface                                //这个我应该已经满足8 j3 t/ U  @1 u* M  ?$ {" ~- A" n
; M! Y  v5 |) n0 K6 {- p: _/ N2 Z
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
2 u- [: E: }0 F
9 E1 p' X* x4 bLinux下调试也是确认以上三点。
. X) P/ Q5 W: E/ }! Y6 Q4 f% i3 {1 p' C/ I; r7 `
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-2 23:45 , Processed in 0.047166 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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