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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题; ]3 D+ z( F+ s
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
3 ~6 l  G$ N) }. R4 w0 V[    2.107743] davinci_mdio.0: probed# s, q. t: `# O
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
7 D- \" q" c( H$ ~  B9 b- R5 l5 i. \[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown6 G' a. D1 ?" i( _
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
2 H& [( T0 s7 ^3 o8 O, ^9 X8 |6 z3 g8 v' h3 U* |% g
[    2.137188] PPP generic driver version 2.4.2- ]2 P( L& U' _
[    2.143236] PPP BSD Compression module registered
! E, p1 p  h' W" m4 ?5 \4 A+ o% U
# N8 V2 G' z5 t( G5 J
在linux内核中的代码应该是以下:+ ~* j" R5 k) s; `' T! R) t/ Q
        // 注册mii_bus
9 `6 s2 d/ Z7 h2 ~+ O        /* register the mii bus 2.   注册mii bus 2*/
) x+ D, _8 ]" G! E  l        ret = mdiobus_register(data->bus);
$ ?& x& o2 a% K0 I8 z2 n- _! Y" x        if (ret)
* r! h0 v+ U* G                goto bail_out;. w8 h% B5 G" k/ D3 C( W

* U1 O8 r5 }. K/ ]) D% _        /* scan and dump the bus 扫描和转储总线*/0 D4 i1 e+ k; J+ t- a# ]9 M
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
; ]7 L$ X1 ~; [( P% V                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据. j9 ?# l  _- F2 _8 L
                if (phy) {) @' e6 K* O0 D) i
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
9 c8 e2 m; M4 j3 D                                 phy->addr, dev_name(&phy->dev),9 I  ^' Q% ~1 E  w
                                 phy->drv ? phy->drv->name : "unknown");
8 h5 H# v" Y6 U) X" y: U' }  C                }+ F& D# w- e7 c  j( N
        }- D+ P; p1 ?; w6 d5 ~. B% {- A0 u
$ ~: `8 T# D/ t/ Y# F

$ D* e) l  r5 p$ P$ |: \  S! m最终在后面 网络启动有问题; ~0 F, K, j/ ^8 C$ b1 ?$ s
[    2.387752] PHY davinci_mdio-0:00 not found8 h, L  |# S# T+ l8 |& \; i+ p: x
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00( e# ^9 z1 {3 P* n- x) W
[    2.398254] IP-Config: Failed to open eth0
" O: |6 g: ~) @: V[    2.402589] IP-Config: No network devices available.
+ d0 E% A, j" e- V, C0 F- b7 C  b
/ m  s0 d; a/ e* S& e9 C
! ]. m. X4 l3 {# U! B. i: h  B

5 u5 u6 _: H$ O0 T4 ?1,请问下,这是什么原因造成的?
& B! p4 {! e' v2 K2,phy模块 和网络驱动开发的过程 是什么样的关系?7 F4 V* W7 c) N* }7 x% ?
谢谢1 K9 V: {# ^1 H' j1 H5 |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:405 |1 ~2 R" T9 a0 {! Z2 V
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
) O3 j2 B$ L) M# y4 a" A; m一般来说,板级的emac驱动都 ...
! H! |1 w: Q/ r1 W* w+ u
vefone您好,有些还需要请教下您。+ L& O/ d; G/ g% E
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
/ A* F% C8 \6 Z. z* E' P: n8 }1 @$ Z9 F
void __init davinci_common_init(struct davinci_soc_info *soc_info)8 u# a+ h# l& n& W6 a8 |; o+ P
8 G2 J( d% A- A' m& M$ g- O7 V
{# W8 V+ `2 [9 v- {; ~2 F7 _$ p

, s, K  C% {8 ?) G2 V             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口4 |/ `0 K' w- @& J' R# B

6 }9 f+ L' A. e; Y}
7 i( ^. e: u6 y7 S5 s) r7 c: f0 t/ M. S3 g; c
//XXX 还是前面的# f. |, `- N' v8 ?" U* ^4 P2 `
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
$ F0 C; G/ F: L. j; F' D, u: b/ y[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown2 V- Y! l; p+ u: ]
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown, T3 o& s; x+ D" _: u" f! T0 x

5 `* a  i' x( g% L在后面5 [. ?. X1 l9 N1 o1 l* N

3 T- e' a5 }: @[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
9 g8 f5 L' c7 i4 _9 U: V) H* ][ 2.392184] net eth0: could not connect to phy davinci_mdio-0:008 x; L4 ^+ }8 j" s5 m. R  Q' B

+ H' I: I) R* @& f  b请问下这是什么原因?5 o% Q" F$ l2 a, j

! y1 S6 Y- f+ R" t# M+ I; h我百度了一下相关的问题:有介绍的说
1 h( F2 T6 h1 `. Q1 u  [0 A4 X  E" p; E
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
% V0 W7 @5 ], [
. V+ T5 m' d6 L- i$ e建议调试在u-boot中进行,方便确认问题。
4 Q$ N( _/ i$ c6 Q4 H. w9 ^: `, t' N8 _; d( p. a
u-boot下主要确认三点:/ L# n& {  d5 p- Z2 `

) ]5 [4 i& ^1 a7 E1 }1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作+ r( z+ R5 c) `3 z% }6 m0 v
8 L  m9 _8 T- j$ a7 S, p
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足" S+ u( m9 o/ j' S0 b" g6 v; k0 N. v% d
/ N6 k1 e% }1 V' g
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
! ~) a! a7 ?, t
( y: E/ F0 V2 U1 G3 i( q! ^Linux下调试也是确认以上三点。) \" a+ z. T- @/ e5 M  Z1 o. x. ~
: l) S4 J, {: u0 e, p
可以指点下吗?
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
& `$ ]* k9 P0 P' E% E% O创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
( y3 `( ^0 f9 `, q3 F4 u! _
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
: v& F4 }, `" N5 c4 f9 x+ t创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
3 P6 Y$ p) p! d* g% R
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
0 ^0 Y. ?9 L- K2 u在linux启动时,打印的信息是:* t1 t4 `: c; u0 ?/ f4 n
EMAC: MII PHY configured, RMII PHY will not be functional,
8 J2 s) T6 ]* e应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。( G" s+ I, V; E/ O* M+ N# I
谢谢
回复 支持 反对

使用道具 举报

0

主题

83

帖子

426

积分

创龙

Rank: 8Rank: 8

积分
426
5#
发表于 2017-4-17 20:40:02 | 只看该作者
小石 发表于 2017-4-14 09:33
$ P5 y; C: j% E# o! P% P用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
3 k9 [" Z9 S6 |! L
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。' w/ R) K; G1 d/ t3 C. j3 \
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
地板
发表于 2017-4-14 14:46:38 | 只看该作者
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
板凳
 楼主| 发表于 2017-4-14 09:33:48 | 只看该作者
vefone 发表于 2017-4-14 08:34
. _; j& z* `" L5 m* g请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
5 j  G4 ?$ {8 f
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,; E; h0 w: }# c, J5 G3 G8 ?
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?+ D9 ~4 Z/ q( t- ?. @# y6 p
谢谢

点评

linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。 一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配  详情 回复 发表于 2017-4-17 20:40
回复 支持 反对

使用道具 举报

0

主题

83

帖子

426

积分

创龙

Rank: 8Rank: 8

积分
426
沙发
发表于 2017-4-14 08:34:48 | 只看该作者
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 19:36 , Processed in 0.057442 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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