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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
7 c. M  E1 c. r[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1* N) S' m8 _% Z. L2 Y
[    2.107743] davinci_mdio.0: probed) p# S7 a8 ]6 T3 _+ _) r6 m* S
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
& n- e0 Z" [! D5 R# D6 c[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
, ~+ m" B9 n) H/ [8 j- |. N[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
4 N( h! a, u* Q4 c; _1 V  o+ W5 E) Z* k4 {
[    2.137188] PPP generic driver version 2.4.22 r. a6 x' T1 a  J8 x
[    2.143236] PPP BSD Compression module registered3 \- V; M# B: J7 `6 Z
" I3 J, [* p) j+ G* E

& D; s' N9 \3 d  Y# N7 t在linux内核中的代码应该是以下:
. t, k( @2 h& D4 a6 l- i8 b7 z6 |. d        // 注册mii_bus9 |+ |7 @- Z- {/ E! `% c- e
        /* register the mii bus 2.   注册mii bus 2*/9 I4 O) g. o, r8 Q) D! D+ w5 g- h" \$ T) e
        ret = mdiobus_register(data->bus);% R, ?% [$ M2 V& b( |  p# I1 \
        if (ret)
. C, P4 l! I+ K6 z& a                goto bail_out;
0 d# S3 }/ f; b) ]+ m6 G/ S6 P0 C* b# I
        /* scan and dump the bus 扫描和转储总线*/
3 \3 }/ o3 e5 X9 |# T) i2 P        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {% H8 }/ s: m8 Y* _
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
2 |4 d5 U" Q3 O0 `, J( \3 x3 K                if (phy) {- u: h  w% V$ B! L
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
" h9 S% {5 K" l                                 phy->addr, dev_name(&phy->dev),
% i8 ]8 X7 D+ `% {                                 phy->drv ? phy->drv->name : "unknown");$ m  _+ h3 }" K
                }9 D: n# f5 @1 P
        }, ^* t& \1 T$ l5 @- f6 _$ p- \* k

" e& \+ o. l9 L# v5 y; r
/ Q" d3 V7 D  F' Y' e最终在后面 网络启动有问题. K/ p, w3 N' L, p* ^! q' t
[    2.387752] PHY davinci_mdio-0:00 not found
9 R$ ?. \7 J, f! H[    2.392184] net eth0: could not connect to phy davinci_mdio-0:000 O# ^( I9 z1 I8 c; w' E
[    2.398254] IP-Config: Failed to open eth0; d7 g4 X1 \& _1 c7 L! X1 i
[    2.402589] IP-Config: No network devices available.0 a3 u. ~+ x+ h5 I& b9 I7 [/ ~

7 |' M) S# x& k& W& P
. f* f( R% X6 H+ l. T  I; g

: x! P0 {8 `( Y# {5 c" `6 }! ^/ O1,请问下,这是什么原因造成的?
7 z3 h+ y5 {, o! S3 o* s' z2,phy模块 和网络驱动开发的过程 是什么样的关系?
% k5 ]' V/ R) k4 ]谢谢/ t1 x9 N( Q$ l
分享到:  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% J! H/ h5 t9 e请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

3 ^$ d" Q6 I, T2 a用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,# `( l+ y7 k- g  s* Z$ I
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
- a& F- I8 Q; a; w* M8 \0 v$ ?谢谢

点评

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
# }  l& m4 l8 u. Q; K用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
+ t( _* v+ z5 v% w5 Y& P0 Z+ a, S
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。. @$ w& V( w9 _& ~5 h
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:463 K) r5 T6 K- |1 e4 w* e0 l, P
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
& O& x6 k* F; b7 w) v: [+ m
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?% ?0 D) v  }% a3 P: Q
在linux启动时,打印的信息是:
0 B" Y' d- u1 \8 U0 |EMAC: MII PHY configured, RMII PHY will not be functional,9 E0 Q. M* o2 N
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
$ V8 j. q$ i# B- b4 T$ j  }" \谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:464 g, _( a5 |. w; d% l; K, i: p# z
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

" Y: _; p) X+ H6 f我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
8 X9 n. g; m; blinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
* \2 A# M3 S1 n9 a/ J: z6 _一般来说,板级的emac驱动都 ...
- ^2 ^4 r9 B* h1 b+ ^0 N
vefone您好,有些还需要请教下您。
) H+ K8 m8 ]* V8 N. k然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1; }* {7 f( h7 l3 Z# X5 X- ?

/ i* Q* Q- Y/ {void __init davinci_common_init(struct davinci_soc_info *soc_info)
1 t: I0 H+ T, A  k4 r7 V7 m
" `3 ~! |2 v4 l% R5 L8 Y& A( x{
8 ^$ O+ c3 f: m% n3 n8 I
5 D9 b( j/ {0 L6 p) ?0 L" @6 u             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口* |/ |1 q8 n1 I% O3 [/ x6 x

3 G: U6 P, E8 b' }  e( ]}1 w" O: K# A3 ]3 }: `* X$ [
! e( p! W) P% H2 b% |0 g
//XXX 还是前面的  n* z  s: U8 c) j" C5 F: z5 s. @* s- S
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 7 H: ?+ [7 c: z( y
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
1 e5 y* i2 D6 H9 `, @: _[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
* {5 T& ?3 E  t4 V: F9 X' W
+ P: a, u0 C; j在后面
, U& E- {- Y" X5 b
3 n! t1 u9 T9 g9 h: @+ E' s[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了, D# ^! D0 l( [' i2 {
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
, G1 M4 s% }' ?4 m" b9 M$ O: l! t' \
请问下这是什么原因?& }0 Y0 {  [* N) F* n

' D. @6 q! M# N, Y我百度了一下相关的问题:有介绍的说( N! Y9 n1 {9 Q9 f+ m( ]6 C, p

0 i% ?* o4 M# `7 P3 q由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
; d; v6 m$ ]. w( N! e" v  m! k$ i+ A0 x' u( i: @( q- m
建议调试在u-boot中进行,方便确认问题。
9 a. K3 W( ]- p5 q- U9 a& c/ C' W# h! J
u-boot下主要确认三点:
* [. p; @- B) \, v* j: b' g" Z1 Q3 P) p7 T2 J: N
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
: ?& r# e( d5 C- J' u- s
- \' d# O* V9 u2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
1 g$ z: a% e+ C3 B: T& F' u" @3 a8 c; Z! a
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
6 P5 n* k4 K* c. L  K' Y, V1 T. V; ^# f+ A/ W' u9 g
Linux下调试也是确认以上三点。+ E$ ]5 Z9 j$ J* b' T  P/ X3 S7 K

. K# b8 ]0 ~' E0 u+ h3 M" `可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-28 21:36 , Processed in 0.045028 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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