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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题. o' E$ X: F3 s# F
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
, E. H  s( D" h* k2 J. V7 P[    2.107743] davinci_mdio.0: probed
5 V3 x: m3 V  M[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题! Y& B0 J3 Y" M& N+ k1 `
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown. N& [) K3 [: s6 e7 D) t5 X, \
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown: c! g# b' h! b0 q/ Q
( _5 `2 k  g' ~( g" T
[    2.137188] PPP generic driver version 2.4.2
' S/ X$ _6 }+ X& _: L0 g) N2 h[    2.143236] PPP BSD Compression module registered
) `; i! n7 f! {: B& a! z- r" g3 A$ r$ J! E2 e; g% y% d! ?# v9 Y1 U

# r8 [' u  i& A. L2 J" T+ J# g在linux内核中的代码应该是以下:- C3 W2 D6 o$ o& q9 Q. a& Q
        // 注册mii_bus
; y- B3 t" ?2 ^        /* register the mii bus 2.   注册mii bus 2*/
# j. o, z' l/ r" Z; @8 k. q, Q        ret = mdiobus_register(data->bus);
& H/ R) f9 r% l0 Y, ~        if (ret)' a6 c+ ^0 f, @6 Q  {' `2 Z* U4 [+ B
                goto bail_out;$ B% U6 ]" o* v% L
6 B9 v( U3 d' ]
        /* scan and dump the bus 扫描和转储总线*/( Q4 B1 |8 H8 A
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {% D7 m. p8 j, @6 i* \6 Z
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
0 z. H, n! n% p! {0 Y3 }                if (phy) {
9 m9 [' Z8 T( ~                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
. M( J- i! F) ~. E                                 phy->addr, dev_name(&phy->dev)," {  ?/ T% I! `$ h  I9 _
                                 phy->drv ? phy->drv->name : "unknown");
! k, b0 p3 y% y                }
5 |7 p3 j2 `3 |4 s' k* z        }
/ w+ a/ O& T- I8 l: A& b4 V  t. T; \8 Z) z+ w

! q3 N/ R1 H8 \  |; D! l& I最终在后面 网络启动有问题
2 n' f5 m) p2 }7 m6 S( P; D9 R. h[    2.387752] PHY davinci_mdio-0:00 not found* V8 B& i5 }+ e7 n9 _7 k
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:004 B! n8 k! |3 q6 B  z2 K) U0 o
[    2.398254] IP-Config: Failed to open eth0
( H! T( f& |% B) N  u. S- ][    2.402589] IP-Config: No network devices available.
1 s' H* [; u0 n7 k8 v9 R
9 M) {0 Z9 [0 R  s
/ N# {% M+ U2 @

9 i/ j% z6 F$ O! H1,请问下,这是什么原因造成的?
% g9 n- v' s! K2,phy模块 和网络驱动开发的过程 是什么样的关系?
( N9 @& B+ `; u6 \( S2 @谢谢' \7 ?( e3 M+ Y, p; g/ Z6 ?' ~( 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
' Y: O. ?. J2 X请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
4 z8 I- h( v6 T% u  L& _
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
- \& X% n( j6 v4 q/ C$ X: k请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?0 x$ Z5 {% s/ J1 B2 ]' y: Q6 O. ~& L
谢谢

点评

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:334 B8 H+ ~  A8 T% k; n
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
5 n9 m1 L( f+ o: e6 R% W
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
9 L$ ]( Y9 {0 e0 I' X一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
0 E* o% \- Y. h- Y创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
" f, e1 \1 B! P+ M. @% G
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
$ N( m- Z6 |; H- F在linux启动时,打印的信息是:
+ i+ r) }6 ?% p2 v8 |EMAC: MII PHY configured, RMII PHY will not be functional,& B3 K1 m6 v! K7 w
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
2 c$ H3 H* ^# u) ^/ {3 P/ k谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:467 ^, d, p2 T) q0 e$ {
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

0 ~# X, p2 \+ w. _* c( q4 t我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:408 V; a% V$ C; ?5 t7 W0 B1 J
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
" P( U+ o# S$ P: A. c. m一般来说,板级的emac驱动都 ...
2 F1 k! |! B* W! I' m$ N" x
vefone您好,有些还需要请教下您。' t1 x* l: C! v" B) n( e5 F# b
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1& L% `0 h; c- Q3 B# N. b& I% ^

; p: ~+ C% L2 `2 V% ?; nvoid __init davinci_common_init(struct davinci_soc_info *soc_info)
9 ], _- A8 u) `" q2 ^! m8 L  b# Y* G+ n7 D  h# [
{' X2 }- G" U/ W9 t4 U
8 r6 C& p8 b8 _/ y
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口8 J6 d$ F2 K8 g: g7 p

9 M# Z& B& J8 K. S) o1 }- M}6 U4 W" e) t/ T+ X
+ W# `- o4 C. f4 ?/ D: F5 A
//XXX 还是前面的, s; {; h& }; N( i
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, . h) s; Y: S$ S+ v
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown- _0 e1 J  y6 a1 h/ ]6 o
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown. X8 l1 e, z9 J( `
% F& t8 Z0 Q* W2 |% f5 `
在后面* L. l+ _7 R" Z+ u
( q2 W/ n8 s1 L: _. _  h
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
' D: Z1 G+ S* w7 @* f% y[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
) Z/ h, L( T6 z0 e2 V& q! E: a) U$ b: l* G0 i, w
请问下这是什么原因?
% I) I$ q: F" h  F
1 J! R& ~) r+ G6 H. ~+ y  R6 F我百度了一下相关的问题:有介绍的说  n' `: j6 I( @0 U4 e& h0 Y

; F6 d$ A$ O/ v5 B由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
2 {; \- M, m4 [8 K; i$ N0 _
/ n+ P4 `. W# g2 T建议调试在u-boot中进行,方便确认问题。- e7 W+ L8 i7 J7 Q6 j$ ]

& F$ G7 z1 F8 Y3 Vu-boot下主要确认三点:
# R' Z, y! |8 l2 X) k7 b
3 b0 f3 x4 l1 m8 G6 t1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
2 u2 ~' D/ }0 f' K8 @( M7 b* t
0 k1 v" a& X5 c6 \! Q2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
+ _- B" U( H" o- k2 p  N
$ w2 G1 `9 _1 _* B) H3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
# N- f. F5 }; }5 @
! V% b. X+ g, k/ kLinux下调试也是确认以上三点。; j5 I& x9 `+ l. ~  `) P' Q9 g5 o0 l
0 q% T7 y6 I- j& t2 H; K: ]1 v5 K
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 21:32 , Processed in 0.045021 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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