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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
  W* q; G+ P8 v2 v! X( |: l[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
( d, Y) V0 E. s8 P[    2.107743] davinci_mdio.0: probed' e5 Y$ `7 ~: S! c+ \
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题9 u, W" L0 N- P7 D" J
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown8 h) I  J2 x2 D
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown( K( D  F6 m! \" A3 A" [
- r0 _. u: p" h/ p  M! v3 B3 B. j
[    2.137188] PPP generic driver version 2.4.2
$ [/ B- S7 \3 G2 B: y4 E) Q/ k: X) j6 ^7 k[    2.143236] PPP BSD Compression module registered8 c6 m7 D; N: Y2 l' o$ Q. v
+ _0 l, u/ t4 M) O6 v
0 z; d6 o2 P# k! v7 ^* {& \, F
在linux内核中的代码应该是以下:2 m" @5 U: b/ L+ H
        // 注册mii_bus
/ B; l& _0 j$ R' Z5 t/ M        /* register the mii bus 2.   注册mii bus 2*/6 }' _6 \9 T: Y
        ret = mdiobus_register(data->bus);
2 p3 U5 B' H/ Q' O/ h" R1 p+ o1 u        if (ret)' {# b/ F' g  y- t
                goto bail_out;6 \) u& K9 u9 }" k

' i1 e  x6 `7 f        /* scan and dump the bus 扫描和转储总线*/
0 d+ O3 K3 {2 S        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
4 q+ n% T. N: L  a" D" j. M                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
3 v' ]/ w2 ^1 |6 N' f- W                if (phy) {
7 U% K& r2 ?$ v2 Y7 Y, k                        dev_info(dev, "phy[%d]: device %s, driver %s\n",% w/ q6 p! ~, V* d  u
                                 phy->addr, dev_name(&phy->dev),5 Q( M4 m, {9 L$ x. ?5 \& l+ S
                                 phy->drv ? phy->drv->name : "unknown");
0 ]. o- ^2 C" ~( T1 J                }8 Z: v# k4 S; R( m: J
        }
. R/ T' r1 |7 E) j7 Z8 ^! h. d6 d1 x* |" Q3 N: F

. j: h' A: P( B# ^! c. I, ~最终在后面 网络启动有问题
# {! J( u5 \) f8 j" {- y2 X[    2.387752] PHY davinci_mdio-0:00 not found
) Z- ~& W1 s0 |% ?4 W[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
3 ~2 I- L2 G) L6 l! G[    2.398254] IP-Config: Failed to open eth0% f3 I4 {$ P( t* f$ o
[    2.402589] IP-Config: No network devices available.! T: f3 {0 A0 c- m9 v0 ?  o

9 F# b+ b& H$ A1 ~) v# O0 ?! S: I3 u" [; d! i3 X
8 ~6 k6 l, `5 |# g/ P
1,请问下,这是什么原因造成的?! @4 @7 ~, ?; }
2,phy模块 和网络驱动开发的过程 是什么样的关系?* d8 e3 }2 N$ O5 E8 g# ]1 T
谢谢
  `* F8 x! v$ x! Y' j
分享到:  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
- g& x6 E  I+ Y; y6 f: N5 O请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

# z' ]4 u) D8 _; P& G  E0 h+ P用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
4 @3 c1 u9 l$ m& j请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
$ [. d2 v6 ~& }4 x3 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" Z2 ]- K6 @9 |/ R
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

* Z1 E- O7 }+ v8 g- Ylinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。  M0 g0 r. u( l. K& S* u& v
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46/ V5 A; N* s/ q" H: l0 c0 x3 G
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
7 m- Y& w2 C* M" _% _' X) e
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
: H- W" _' ?7 @& Y, f% u在linux启动时,打印的信息是:# M; U+ X: C- h: w8 L+ N! S
EMAC: MII PHY configured, RMII PHY will not be functional,
& C9 E: K6 X/ {3 `# \# }应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。% L' [8 f7 P2 P. Q- E  v  S
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
8 }2 O$ c! j9 B) i+ ]- v. p6 B创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
( X& Y( J) B9 Z6 `0 ?- I
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40; i# ^) |* h" A, Q
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
) S! C; C$ A9 `一般来说,板级的emac驱动都 ...
! y" g8 i  F# V! h/ {. p: W
vefone您好,有些还需要请教下您。1 ?: W3 r# r4 D- v5 C
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
% W( n7 [& Y8 J) B3 p- {+ Q) ?; J; D7 n3 Q9 A' G
void __init davinci_common_init(struct davinci_soc_info *soc_info)
; Z0 ~7 R' k+ g" V+ N5 w) ]
1 I9 x. U$ c& [" y+ M{/ s2 ^3 x; K: z
. ^6 q- z. H1 [2 {# c! L4 Z2 x
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口0 H) [& Z5 y7 V7 X$ u
: M* V) p. i. Z% T/ k1 [( a4 Y! `
}- B7 s8 l$ h" J5 x* ^4 x7 \% r; D4 d% U

* {2 _  X) d. v# Z//XXX 还是前面的: P- S1 C4 g2 T( L
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, , B% r- D7 B6 {) z
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
5 A9 g" y1 M7 D6 r% }  s[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown' h% i* f1 y. i$ c& f
! Y3 k' {' n4 u  J" U5 w
在后面
! @6 ^8 l& i0 J, y2 Y! e5 {
+ H9 N/ n+ Q/ q" J" k2 k% q; E[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
: b* u% V$ r# s) ~6 v% U[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:001 t, ~4 F$ y% \! k7 ^/ g6 w* Q2 d" |

' h& C3 t9 K, @( V" Q4 G3 h4 E请问下这是什么原因?7 S% B( p; {8 v& I2 w8 N& ~0 a" E

1 y/ d7 A, k5 K2 h) r我百度了一下相关的问题:有介绍的说
3 d, y" }3 A  M, p. Q" `) l- t/ s- ~* ?
6 B# `/ Y  }+ V. l/ ?由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。  p; M, t+ n+ ]& _* B; Y

* P* g- h0 `: S建议调试在u-boot中进行,方便确认问题。; }4 b( t8 l$ f( @( b1 G
- A" Z+ u' c% T, M) C$ Q
u-boot下主要确认三点:
% |2 X2 a: P( }5 `' G3 g, X8 S/ K, v) j& y3 W7 q. {3 c
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作3 r% `" @/ d4 @/ ]% Q$ k
/ m& m- F3 J- p! i) {  V  z
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足; E0 k' [" X6 g  U3 {

% a; F8 W, ?7 t+ q/ l3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??' o9 O3 K3 f, A

+ U. o; D' |. O# DLinux下调试也是确认以上三点。
1 l+ n% E% m0 G8 O8 H& Q
7 \* w2 d9 H, j1 O0 Q  C% v" L可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-5 02:55 , Processed in 0.044231 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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