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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题( Z9 O% D# a$ ?" @
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1. Y3 N  C1 U9 \! p8 T
[    2.107743] davinci_mdio.0: probed
3 T* f' v: E3 [1 [0 B" E! H% a[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题- a$ J7 t! B& u1 H0 I
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
. |2 d8 |0 A6 p! x  @[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
9 O. H3 C/ Y% B! `3 N8 m- C! ]: m) d/ T2 M8 s
[    2.137188] PPP generic driver version 2.4.2
! \/ t! O% m0 N) H3 N[    2.143236] PPP BSD Compression module registered
: k' o' D3 f% n2 w5 ], e5 |/ m) c4 X1 ^; j, N/ Q2 `8 f9 j- k

, j$ n8 _" i! `6 O6 B在linux内核中的代码应该是以下:9 D6 ^, s8 M9 R# G  J2 b. H
        // 注册mii_bus
1 i6 _: ]' P/ ]7 U/ l        /* register the mii bus 2.   注册mii bus 2*/4 M+ g7 \  I2 u, u+ U/ h6 Y
        ret = mdiobus_register(data->bus);
9 p- W4 z6 h! J3 h$ I- z# t        if (ret)% J& n0 @6 k1 E0 @) v  z: O* l
                goto bail_out;
& J# ^* S5 T$ I4 R6 o* \. t
+ p7 V2 T* j% N) ~8 B) f$ I        /* scan and dump the bus 扫描和转储总线*/
5 }1 f/ ?# P0 h& ]        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
7 q1 T  {- i0 T                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据/ F  n) }  @( m, I( `: f
                if (phy) {$ E7 v2 Q* R, T* X" G
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
- n% m7 x3 f) \8 [                                 phy->addr, dev_name(&phy->dev),
0 w; }. U4 v1 u7 ?. e                                 phy->drv ? phy->drv->name : "unknown");
: \- C: a6 S, B                }
+ t$ T( t  v  G) m0 I# w; `        }
* n; g& O# p! q9 ~( M2 Q- q, s8 S( S" J

0 V( G4 P, e, X% ~最终在后面 网络启动有问题& Y6 K) Z! w* ]- s: g8 |8 c' Y
[    2.387752] PHY davinci_mdio-0:00 not found3 H. D# T9 }, n: H6 m) A6 s( d
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:004 ^  y9 G/ R+ Z- X
[    2.398254] IP-Config: Failed to open eth0
; z* K& A3 |3 Y3 I& ?( a# [[    2.402589] IP-Config: No network devices available.
0 r% B# c9 Y! o1 D5 x# M' B, L% E3 J. b1 D$ e
) A3 r( c8 B; A( f

: l- g! ^9 n0 S6 |1,请问下,这是什么原因造成的?
* a% s) P/ o6 r5 F4 T3 F& b/ L2,phy模块 和网络驱动开发的过程 是什么样的关系?  k: D+ E8 H5 Q# z/ Q, H; i$ u
谢谢
' x# P  s4 h+ K! V% @0 ?3 G
分享到:  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
) V- U+ T+ z0 J) F) p请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

' B2 G7 J: T( x" _! Y用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,4 D1 {: T( X/ h7 M' `8 s; A! U
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?; E( D6 h" Q  l/ Z
谢谢

点评

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:338 g6 K( [/ w: [) v& l) q
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

) x9 D3 H" R, V; slinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。# s9 Z3 ^, n8 g# x
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46/ x# V+ B4 t8 q: V. j4 H
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

6 }2 v2 P: R9 `, w5 y请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?# s7 c: D  S& g0 C: y8 }( c: J
在linux启动时,打印的信息是:
7 s0 v' g- d( S: L2 M/ J, |% \) pEMAC: MII PHY configured, RMII PHY will not be functional,  j8 q( p# R" N8 u5 V) g
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
( p; T+ l: k- l$ D! X谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

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

0 T" o' _& t: S' q5 r5 A8 ]我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40/ y" f2 D2 Q( X8 f
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
+ P+ Z' A3 [0 D3 g  D一般来说,板级的emac驱动都 ...
6 w6 \1 [6 D- X: K5 t$ z
vefone您好,有些还需要请教下您。
( Z9 e$ _3 [' [% X, E% |- }然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
8 s  l2 P- }+ Y) ~4 P( K" R
* ?# ~+ h5 ~2 k+ `void __init davinci_common_init(struct davinci_soc_info *soc_info)
0 |0 v) B+ f: V) ~  R; ^5 h$ T0 a; J# F$ X/ m/ s
{0 L2 C( [8 g1 r2 l

2 g: ]; ^: a! D6 V5 U             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口( d2 c: C7 y: a1 z& z  e
% X) y3 G& S0 w% U# L  r8 `  \
}( S3 v) N: P' X7 j
( p# d1 q. J7 ]5 s( Z
//XXX 还是前面的
  l1 b3 n: W% }* K* [) m7 P[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 4 h, J* ]  {) \
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
2 ]/ ?8 f( E- z' q[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown9 {$ V6 u+ Q9 G' a% F5 d  Q# Q
5 M) S. t" Y, I0 [" `+ ?
在后面
4 X7 Y7 o' z0 s9 {2 `2 x8 Y
+ R; K3 f! M" Y: n[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
/ u+ j2 G* Z2 ]: P* [9 U8 _% f[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
4 {* p( H  \* _& b7 ^  i: G0 a4 J
请问下这是什么原因?
* x" d8 a, V; f6 |0 n  b4 f- N  e5 @' O' |, Z3 J2 Z! v0 y% B" l/ E
我百度了一下相关的问题:有介绍的说* h8 b  c7 ?; F( U& m! H9 p* L
1 O- Z. @. f+ o7 Q7 r$ N
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。3 a+ ?1 V( U1 [8 J* W" n8 }
8 e" Y, J& z$ R* w. D* B8 U
建议调试在u-boot中进行,方便确认问题。
6 y# l8 h  \8 l% @" ^% G
1 C( F/ H$ u+ d+ j9 g( tu-boot下主要确认三点:
* L+ M* S+ F0 t3 ?" _, E- b1 q' {( S$ j+ H1 J1 d
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
+ h0 B  Y2 n( W. M! p+ J- B  ^* l  t4 j! y: h
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
2 \) {! V  D) [( v# O- M
# P0 ~5 `, D/ C6 n3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
. A, c$ i' M) g/ \- Y6 q5 a( c0 ~  b1 V+ A: Z" e
Linux下调试也是确认以上三点。$ d9 \& B' W; O1 o) y

4 N6 E3 v# N! }可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 00:35 , Processed in 0.042512 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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