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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
  @' C& b9 b( Z8 ?" {, X9 J[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff11 G9 D, P( \1 t8 W9 X+ ^2 k6 ?" K6 I3 F
[    2.107743] davinci_mdio.0: probed
2 Z& M: h  V7 s[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
$ T6 y! H) [- A& p$ R/ W[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
$ d$ u( A9 M8 l[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
( }1 O( I* ?5 Y$ I, T& I5 R6 _& t
# ~) T2 K$ h' E& ^4 o6 E[    2.137188] PPP generic driver version 2.4.2# J  B" e  {: E( t5 A+ s3 D2 P4 }
[    2.143236] PPP BSD Compression module registered
! e; {6 p( p, N
) h8 w. ~  R3 }4 T' \/ i
/ C; v$ D7 [' X( g; p4 G: u在linux内核中的代码应该是以下:7 J/ M; v  k2 g# X5 j2 Z
        // 注册mii_bus" z2 ]8 q; c2 Y* `% J# z- o
        /* register the mii bus 2.   注册mii bus 2*/$ l) C. A5 O2 n: L
        ret = mdiobus_register(data->bus);
% s, b9 m8 Y( \        if (ret)
0 I1 R2 |, B- z4 b, M                goto bail_out;
) n- J% \+ b4 t4 `$ g- ~6 k' t) ]4 A- f0 H' K3 [! M- c
        /* scan and dump the bus 扫描和转储总线*/* [6 P$ v6 }' o. V0 V
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {$ I. `$ K6 t9 [: c$ ^
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
1 n9 |& l( O+ P5 u                if (phy) {0 z+ ^; W/ T1 m$ O* h* a8 e: [
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
6 M. p- n8 H( c$ B7 j                                 phy->addr, dev_name(&phy->dev),% c0 O6 ^3 `* p! A* E
                                 phy->drv ? phy->drv->name : "unknown");
/ w% y+ ]# e5 D" J. g  h                }
2 g/ g, F% {4 M& M        }4 U4 Q  u& ^% p; N
' G" j0 X9 S# d3 D! V: C8 y! A
) f  N  a6 s* C/ b8 |* J4 x4 E
最终在后面 网络启动有问题
4 t; j# ~7 p, r% F( W* h; @- m[    2.387752] PHY davinci_mdio-0:00 not found, y6 x# F8 |/ s5 n: D& I; F
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
7 s% r! \0 {5 Q+ ][    2.398254] IP-Config: Failed to open eth0
4 W, m7 V, Y( Z9 [* o. j[    2.402589] IP-Config: No network devices available.
0 S5 ?( z) C  v! S  T4 n$ h3 Z/ x2 v* o! ]$ W8 n- ?4 @! W5 S4 e
( M: m% M8 Y! N1 f$ h

* E7 d  a4 D, _7 e" j1 E' m1,请问下,这是什么原因造成的?
0 P6 t; }; l. I! k2,phy模块 和网络驱动开发的过程 是什么样的关系?. i0 V+ A$ W: d
谢谢
' o# i. j+ ~: a# n# g, e
分享到:  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- P8 E. n) c4 h" v" H
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
+ e9 |5 N9 z7 X9 I3 f( V% Q
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,# ?" _6 R; X+ n3 N) l$ r% J
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
* c& l& q0 y, L/ n$ 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
  g  m6 \: ^( y* Y用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
, N: H/ Z* `- u3 _
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
" e6 J7 L/ T1 @5 y  q一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
: |, s+ y: J' M, \) I1 f- t创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
. V/ _, A% Q" k/ u+ }" N! ?
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
  n/ t6 j) N: F0 `在linux启动时,打印的信息是:; `3 n3 ^  T# F5 N
EMAC: MII PHY configured, RMII PHY will not be functional,
) g+ U* B: ~0 c, `应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。' Z. l* ]& T' X( c8 [
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
) s9 Q/ n: l& ~  J' J+ ~创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

& s3 D+ e6 Y# f; ~0 V# M  ~6 T& w  [. U. V我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
  h- b4 o/ I$ Y2 qlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。: O! W; ^/ A6 s" n4 F& _
一般来说,板级的emac驱动都 ...
/ e- {* C  E, f! c6 e& k' H% Y
vefone您好,有些还需要请教下您。; E0 s/ X8 W+ y% j9 m$ [) L
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为10 z6 e, r3 @7 ]$ [6 a' N

: ~( T2 D( ?! ~. K' Rvoid __init davinci_common_init(struct davinci_soc_info *soc_info)
/ v: @+ Q1 l( g9 i. ^! u- E8 O
6 H4 N5 f* @( {8 u) \{
  G5 y( i3 |8 P, P0 V. o; X& b3 [, h" C3 b6 D5 H
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
3 ~# k) W; O$ s1 |2 p2 m; u1 Z$ e+ q- y( v( ~
}* }+ W! z% j4 D$ c
% _5 i/ C2 P7 k. b3 ?  a% J
//XXX 还是前面的* Q" ~/ F. Q5 U2 y% u. e
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
! T0 M/ k: {! _6 r# P% f[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
, h& ~9 n4 Q/ w9 s9 C7 s$ D[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown4 M' q) `% _# e& y) w5 W9 b/ {

/ t# M. l+ M) p6 ^9 O0 s! t在后面% @3 J5 S: n4 `" |2 D! ]; J1 A
" K, \  ^) @) ?$ k
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了" k' f" i+ a) ~6 \
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:006 l: J. @* M# U5 f) u
1 h! X9 A. W8 y, J8 B) p1 S0 F' a
请问下这是什么原因?
+ o' L0 U* {9 w/ c' ^
" O7 L3 U6 G8 h7 x6 V4 z- L我百度了一下相关的问题:有介绍的说( r/ B0 U1 q% C2 p, V  z2 \4 ~

4 Z) c- L) x( a, w: w  I由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。! o! V; s. M: i4 p0 A( V

1 W( k3 j! [0 W: J* w建议调试在u-boot中进行,方便确认问题。
( ?" W0 O/ M7 f  }# [% Q3 w$ ^! W) q0 h. P$ o4 m1 A; ^
u-boot下主要确认三点:4 w. m4 ^8 G( S4 [

" t7 E" q* Y! ]" n: y1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
: _- @" ]; s0 t6 u. b
; L! O( z: y; `  F2 h2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
% d  t2 j$ d8 ^
. `, }' J9 H, j0 l3 d8 w9 s4 W8 u3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??% }! G; ^) S+ F4 W2 W& U5 }1 Q8 j  P

6 u; l) U, W5 W/ ], }- V6 o! E! iLinux下调试也是确认以上三点。% @; |8 e4 o. k( j

8 s/ g, V6 E4 u" g* U; Z( A, K可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-15 05:52 , Processed in 0.063793 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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