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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
2 r, U% e7 R( M1 G[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
- M  H; {' k" |) E  J8 v2 {[    2.107743] davinci_mdio.0: probed4 q5 Q$ u3 f& }7 p. o4 h) A5 \1 \
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题% P9 X0 g/ v. R
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
) c$ f, g! ^% C; W0 s8 B[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown& ~  e0 r8 [' `, @

) v+ j5 ~$ w/ L, k8 g[    2.137188] PPP generic driver version 2.4.2. ]% v4 J( x) c) ^  l6 u. W
[    2.143236] PPP BSD Compression module registered1 R7 l2 @# v+ S+ E& d
! v4 d, d# A" q& o

: A" a1 h$ ~4 _1 R在linux内核中的代码应该是以下:' c* U3 ~! z( ~) m
        // 注册mii_bus
) \4 m. H$ ~1 `7 W8 m8 d0 X        /* register the mii bus 2.   注册mii bus 2*/
1 K7 J7 q  [: W/ M6 O1 j6 c        ret = mdiobus_register(data->bus);
2 ?7 t, M2 y5 W$ `/ c        if (ret)
* f; U8 {* p* S' {; f                goto bail_out;
+ n$ i8 t. Q. @" A) K% N. o' x% r+ Q2 i% N6 C) e' [
        /* scan and dump the bus 扫描和转储总线*/
- t& h! b3 Y1 Y) X) O& r        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {/ ~+ Q: H( Y9 T
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据8 v3 {  h$ x, ~: x3 k6 N0 W$ o
                if (phy) {1 R* q+ k* o- c8 P$ ?2 T0 a( {
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
, S/ |, H3 _# ?4 N* _                                 phy->addr, dev_name(&phy->dev),
- E+ G3 T, R& U                                 phy->drv ? phy->drv->name : "unknown");
# @; P6 @# r: Y6 {) K2 y5 W6 h, Z/ \* S                }
( Q/ h  A7 O9 I, l6 E' O1 G        }
& X8 b" g, w4 P# J! R5 P) F. ]  d# ]# y) p8 N7 u

* i3 K$ O: j. b9 [" ]最终在后面 网络启动有问题4 G1 _7 |9 Y/ V! j. D$ N! S- O
[    2.387752] PHY davinci_mdio-0:00 not found
/ s5 Y% _5 z$ ^# P' V* m[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00" z' J1 D$ j1 s7 Q4 @
[    2.398254] IP-Config: Failed to open eth01 U. k# [2 L8 b8 k
[    2.402589] IP-Config: No network devices available.
* F& _6 b* e' P) K4 \0 g4 K2 \8 \. b0 _& Y8 V' u0 B
7 b9 r5 a1 g! }- k

+ j' E1 s7 S3 C3 X3 u+ ~4 a7 C1,请问下,这是什么原因造成的?% r* `& W$ g  @8 Y/ x
2,phy模块 和网络驱动开发的过程 是什么样的关系?
* I* ]! q! K4 o8 z: o% d谢谢
! v, z5 M/ V7 t8 a5 v9 r$ _. H
分享到:  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" j/ t: @: a  w6 M
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
$ e( X3 H5 b# s2 s
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,/ c: _4 J% `; ~$ h8 |. Y' }
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
% W" ^. B+ O. I7 b7 n" J( b谢谢

点评

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/ V7 C- {0 {! C) q7 J% S' t6 y9 q
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

' {) K$ Z! y& i/ n% Blinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。( o1 I( J  l0 F2 `- M
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46. T9 k, `0 d0 t" L4 i0 L0 p, ~
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
; f2 N( g7 h6 y  z. D
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
  S) e  X% r% C) ~. O4 \$ T在linux启动时,打印的信息是:
) N9 Q! {7 [8 pEMAC: MII PHY configured, RMII PHY will not be functional,) y: S3 o, ?) G2 b3 X% {
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
* P9 b: G% f% a% V7 C谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:464 ^5 R) Y- z9 n1 T9 U
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
/ E: v, @9 d! d% n' C8 A6 R$ t
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:409 Q. ~7 z+ [2 L
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
% G  ?4 v+ t1 G% l. O% F0 C一般来说,板级的emac驱动都 ...
/ }8 c4 W% m2 i) Q* I+ C; Z
vefone您好,有些还需要请教下您。8 j' ]# a3 d. g- R& I1 R
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
! d( ?' P5 i& Y) B" [6 k7 [  Q4 b9 z2 N
void __init davinci_common_init(struct davinci_soc_info *soc_info)
5 _/ o7 P. Y& e& E- ]- \* A, x/ N- G
4 a2 X& k/ N, |{& v0 }  J$ z& L3 K

, ]4 L$ A& _! P6 K             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
9 ?! @3 E5 e1 s3 w+ M1 ~: Z; @$ I( U2 d
}  z1 J6 U3 b8 V/ k; K
- P0 l+ ~( d* |3 y% Y
//XXX 还是前面的1 c  L/ |1 B- B0 n- T9 h
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, # Y2 }& f2 O% P4 Q
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown5 ]3 X9 |& i- M# e
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown8 L7 y+ S6 H  A+ m+ q, X+ ~& B
/ @- ^! ^- V' k, ?. D; _: F( `
在后面/ @1 r" D& _" I$ q: {

4 v0 S$ r* O  s6 I/ w[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了# h4 A4 x" q4 c* C/ a2 g
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00* k% [4 L2 p, ~1 Z

+ o1 x0 l% F" \请问下这是什么原因?
/ {% k6 r' a$ s+ F9 j( t8 t: M7 i& L9 @1 K2 f
我百度了一下相关的问题:有介绍的说
) z' h" h- }8 v% G
' B* F& z5 h  B  X9 ?由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
" N& b9 r( Y* ?( \* Z: B/ s* |9 Y8 B/ b/ z) Q; D1 T
建议调试在u-boot中进行,方便确认问题。
4 a/ I6 W' o7 k0 D+ s' w( U4 l# z& ~5 h! o* A* R& |5 l* n% T5 w
u-boot下主要确认三点:" C3 u. t' {0 j! ~8 o% [& |! z

1 Q6 g/ Q7 L) x' t1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
# {2 U4 v! x/ y- ?0 f$ B, g- e' @! B6 A
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
! x+ O; R) }8 Y/ e) D0 g' R% k
9 C$ Z; D3 Y8 {+ \2 Q. ], {7 h3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
# ^$ j9 @( u( {- p" ?1 z8 [5 F4 W! {0 x9 s
Linux下调试也是确认以上三点。0 ^4 l/ v- M2 _; f$ `1 f

& ]) a3 q- q9 d) J5 |6 g) I0 x; s可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 11:22 , Processed in 0.043225 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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