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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题; q# M. Z, i- a- F  Q6 I
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1/ h4 `) ?0 Z, _" L! L) ~3 w/ e  w
[    2.107743] davinci_mdio.0: probed
& o* c) u% ?/ z[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题2 \' ]7 b; f4 T
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
) C+ Y/ K% e1 c+ t; h[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
3 M7 I  \: n' t% {8 g  ]7 O
, I# @' j9 r" x3 s) [* W5 u[    2.137188] PPP generic driver version 2.4.2! {$ T/ O+ D' b/ R
[    2.143236] PPP BSD Compression module registered
# C  x% {( Q9 L8 t$ o
' w$ d" ]* ~! P: s% s( f+ M; i1 J- O: C* R3 [5 c+ X
在linux内核中的代码应该是以下:( J- f, G1 T5 z. I" ?0 h
        // 注册mii_bus) e# h) h. H5 u4 \6 m
        /* register the mii bus 2.   注册mii bus 2*/( n. h" T+ ]# {8 ?
        ret = mdiobus_register(data->bus);
# M) l7 R4 H+ P        if (ret)
0 ~7 @, k5 w" M                goto bail_out;: d  Q" v+ {: {! G8 d* v1 h
  K( m! S0 x; Q
        /* scan and dump the bus 扫描和转储总线*/  A5 v9 M2 F: {
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {1 F' E* r3 H" K0 ], R
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
7 {/ R. @7 k5 S/ t0 V+ H. u                if (phy) {
/ g, y7 z% C$ @- s8 A1 s/ G( y  R                        dev_info(dev, "phy[%d]: device %s, driver %s\n",9 m  v. x  l8 |- \
                                 phy->addr, dev_name(&phy->dev),
, u, m9 p3 Y  D! H7 k( Z                                 phy->drv ? phy->drv->name : "unknown");
( b! R, F/ y0 E, Z4 j                }
9 u: p# C( P9 L        }
  h- l$ F3 e: ^; X' v, J& L
; |* I  B( o. o
1 u2 X" G# B1 j) a. d5 Y最终在后面 网络启动有问题8 W( s0 c1 T  A8 M6 B3 V5 d" u
[    2.387752] PHY davinci_mdio-0:00 not found, b, G* G1 \& G# B
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:007 j- E2 R* O) d) W
[    2.398254] IP-Config: Failed to open eth0$ B  {3 s/ ?+ M8 t5 a4 u
[    2.402589] IP-Config: No network devices available.
9 s" U- [0 ?6 N1 S/ X2 H5 N; v' q7 a0 O
$ }" b5 B+ J8 A$ H0 V; z$ M
, n1 b6 Z; S$ P3 l8 v
1,请问下,这是什么原因造成的?
8 A) Z, h3 C% u2,phy模块 和网络驱动开发的过程 是什么样的关系?7 E# ~5 L, g5 R& A& X2 L% \
谢谢. L6 z7 y  ]1 X" A2 H! K
分享到:  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
5 L4 G6 k& z9 ?2 S请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

; R$ e+ c8 U0 q用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,: @" ?; j7 a. L0 c2 y
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
7 F3 h# K% s+ q% i& Q% A谢谢

点评

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- u2 }& D1 \. f" h
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

0 r: j6 N1 P& L% Zlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。! ^' ^) B: E% Y" z
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
. z( G% {3 m: H6 N% W. X创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
6 C0 Y$ B) T! Q' J( O: P
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
$ u5 \) |# m- H$ f  P在linux启动时,打印的信息是:
6 ^- |. h& U4 ]7 f  YEMAC: MII PHY configured, RMII PHY will not be functional,
8 d" ^+ ?6 a% U3 Z应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
( o" t8 @! o9 V5 B$ E& M: F谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46+ a" Y+ h& W( e/ S4 V# |+ U
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
, v* f" a7 _* w/ X: F
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:408 n! F: Z4 h7 r9 X! N" x9 z
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。2 X2 N6 f2 x3 e  J
一般来说,板级的emac驱动都 ...
: q0 l0 P( r" g' R: Z& \0 |, v
vefone您好,有些还需要请教下您。
$ l6 c$ T) d2 f  _3 \3 ]3 w然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
! Y. C5 H7 y/ S0 B5 H! n
. N1 B4 ?+ ~% {: w9 `void __init davinci_common_init(struct davinci_soc_info *soc_info)' w: h8 i- V( }% w

5 B' P9 [+ C0 W5 M* j. k{. K% b* J' X# |  h
8 i8 G' f3 N/ Y8 `+ U2 F/ n
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
! h) Y1 y5 |0 I
5 J" b: B' D6 E2 j/ y}* S; X* O& d: ^+ p: G' R% W2 {
2 y0 |5 }! @2 J3 R) e) j
//XXX 还是前面的
" z+ S6 K, B! e" K; G7 c" f[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
: j0 j$ @" h+ X[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown6 L+ k  H* ~8 P( g1 ~% a& p
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
5 o3 U, _+ R3 L  \, i- ^3 e
4 e6 V+ r. q/ g+ `) w在后面9 y* X' w6 O2 ?8 k1 r

9 t9 x! K* g: [( g[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
6 b: q! Y  I4 a7 `0 P0 F[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00$ `( [$ Q3 S1 C+ w; {

0 E) B) W. V6 |' z3 v( p请问下这是什么原因?4 y) V. O6 U/ w! G$ r* L

1 v; H3 j& Q. e+ r( a我百度了一下相关的问题:有介绍的说' ]8 h1 j7 m9 D& l

2 X* C' ]$ E/ `2 Y9 V. d3 s+ v由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。& b4 u- d2 D: l9 L( n
) N6 x, |6 e( D1 a+ G' U/ ]
建议调试在u-boot中进行,方便确认问题。
+ A; t1 K. m. Z3 x  T% J/ N; @5 b1 n$ i5 ]9 z0 ~/ e+ [
u-boot下主要确认三点:  W2 M' }% |9 i

" p/ ?- ?( h! Y6 |7 q* t: x& Q8 q1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作& H/ I8 i5 ^- p+ R! h0 x
  D) K: o0 N8 u: x+ a
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
5 ^, F0 }1 }& I6 E6 {! l$ C2 A" {3 ^6 V7 W/ N0 {9 w- a+ d
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??& \! |3 L5 a# ^: w, I% |
9 d, j7 L( F! ?; U4 t/ m; w. k( |
Linux下调试也是确认以上三点。# N4 C! K$ W* p/ `! D
, R$ G* H; T1 ?" j, c; E: f/ }
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 13:37 , Processed in 0.042498 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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