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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
0 i; ]) n; T& [9 G. O# e2 W* ?[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1* d7 U8 g+ ^8 O* g$ L! G6 j
[    2.107743] davinci_mdio.0: probed/ C" O! F: p6 L" ^  J
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题6 _* ~5 R. j2 d) L
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown( ~4 k# R; \2 t3 z; p9 `+ S* [
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown8 h$ m" n) c5 p; c4 N

. f; S  n. U6 _9 p% |& k; f6 O[    2.137188] PPP generic driver version 2.4.2
6 S6 j% m" t7 X' s7 z& B1 @[    2.143236] PPP BSD Compression module registered
0 N# i) k6 r# D) d- u
4 b% O; a8 |/ j! M
6 Z8 h- M8 q. ?! \在linux内核中的代码应该是以下:' `$ L& T3 v$ N; ?( {- i, q
        // 注册mii_bus/ o( B8 T% c+ H1 c
        /* register the mii bus 2.   注册mii bus 2*/& ?3 G$ ^; [+ n( O& E1 z# ?
        ret = mdiobus_register(data->bus);' l( ^2 P6 b: b0 P$ A, Z) R/ I
        if (ret)  E) {5 R5 ~4 D" q% T
                goto bail_out;! N3 q& @" ~# b) {$ e  ?

/ v2 D4 }: `7 N7 C        /* scan and dump the bus 扫描和转储总线*/  Q- K+ r, C6 U) V& U' _
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {, Z* E4 z/ `  c6 t! r5 n+ s
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据8 b  E) I+ d1 m" z, c9 u1 I
                if (phy) {
( W: ~) ~) o. E! m0 o3 \8 i                        dev_info(dev, "phy[%d]: device %s, driver %s\n",: W- D" r6 b' s1 v
                                 phy->addr, dev_name(&phy->dev),  S5 g9 s! Q4 q
                                 phy->drv ? phy->drv->name : "unknown");* @- D" A3 v% Q  n% N6 r
                }8 u/ A5 O0 h$ v6 ]; P
        }
- q2 [6 C% ]; k' L- F
' \2 n: i/ R4 B0 v3 X- M! \9 C/ F4 a
* v3 o0 T( m% l+ T5 U最终在后面 网络启动有问题
! O: E& r2 ]+ R  R[    2.387752] PHY davinci_mdio-0:00 not found
( @; s& n3 K! o3 w6 k: B[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
* P0 y: @6 x/ _[    2.398254] IP-Config: Failed to open eth08 f2 y! O2 B7 Q6 p& ?& I
[    2.402589] IP-Config: No network devices available.5 h- _  `' o( @1 H+ E
4 e+ x4 A% s+ t$ A* j; u
% G: _5 f# Y( i
0 i6 Z9 }$ c+ B
1,请问下,这是什么原因造成的?
. F* {2 ]9 S/ v5 u5 `2 H2,phy模块 和网络驱动开发的过程 是什么样的关系?
( t: R  Y) P5 [* r谢谢
+ N  j) [. J) W  E5 ~
分享到:  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, q/ ~5 h% O" _% Z  O; a/ K
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
+ l1 k( A0 f+ o
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
; O; y! C! o0 n7 }7 ^请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?" C1 D" L, `, ~
谢谢

点评

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
" E- K4 `# l8 g2 K% Y) o: t' U用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
  |9 H. C% u* S: l0 G1 Z7 j9 |
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
' m8 @% ]5 A7 ]6 A# p9 `$ n一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46$ M! e* K, N) V  U
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
( Q+ }9 o5 i7 T- q6 v  i
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?8 ]' B$ o3 i, f5 ~5 y; \
在linux启动时,打印的信息是:2 J% w' ]6 x& J: B3 v6 V- D
EMAC: MII PHY configured, RMII PHY will not be functional,; X' z  n0 t4 j* k0 |% o
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。# o2 p. J- H8 b( j- ?
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
1 c; C8 ?: Y6 [5 V* }创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
9 {1 n5 Q4 d$ Y  ?& x# D
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40# B  i! n9 {1 }, P: U6 g; P
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。6 Q% A; ?: X, D$ S% d% S% n
一般来说,板级的emac驱动都 ...

& K. V1 n& R" avefone您好,有些还需要请教下您。. {. K$ G* U1 @. S2 j7 `  C6 |" X
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
2 l) [% g" V/ m' W6 q
* X+ D) S4 L, U! m  t: Avoid __init davinci_common_init(struct davinci_soc_info *soc_info)  T; J& j' J& h/ F* T" q7 f$ W
' g& S1 J! W7 j1 C
{
  I" u' a# X4 i4 y6 Y
, u8 @4 ], V2 {+ s- x5 i7 ^0 i             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
, a' d1 y! a9 m& s
8 Y: e, F2 Z6 n( o0 v& b; u5 x}
( p$ Q1 f' ]/ ^8 \1 o1 J! E) b  t  V, ?, \5 [$ n2 S: E
//XXX 还是前面的
' z* t- N* `$ H, G, H[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, ! t4 |/ N. x% `+ g2 ~
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
1 y6 L- H3 P* a# P' |' V[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
) ~  l8 Z4 F9 m; J" j
. l' n" [+ r4 n, o: [2 V9 j在后面
, C. t: x# q! H3 a: B. _8 J4 I
$ c- j4 \! i" k1 ?0 k/ }[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了/ d7 |. R% y2 V! p6 |
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00$ G$ L# Q$ N" O' d& k3 m2 {: r
2 y9 |% e1 \4 q4 w  x6 n
请问下这是什么原因?7 Y* s9 P1 k7 y3 d

- n* {& X9 E- H: y4 y/ b( S& d我百度了一下相关的问题:有介绍的说( J% p1 M+ O$ q, T1 |
+ M! e+ |3 e* g* G6 X  w) v
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。3 A* _% A7 [- w7 A0 W

' R9 A4 K, [5 X# D" k建议调试在u-boot中进行,方便确认问题。
/ q: e' `& I9 _) B3 j4 j" ]* w) a0 K9 c- j/ w- k* l  I: ]
u-boot下主要确认三点:3 ]& X- |. w! {9 x
; w3 q" ~% s# @* s
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
: b7 a( g+ ^- @$ ?9 x/ f
: I, e0 m1 {$ o2)Pinmux configuration to support rmii interface                                //这个我应该已经满足/ W+ c& x1 e1 @5 ~6 n

& d& T) a' T/ R7 D* E3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
# z! W9 T; n$ }& a" \7 J4 l" [( g+ o+ A. n$ u
Linux下调试也是确认以上三点。
6 p4 c, C7 u7 B2 C) M4 R' {/ Y
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 08:07 , Processed in 0.043264 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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