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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
" ]: o1 e+ |$ E* [" U6 d[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
; _0 B/ U. W5 X4 c. Q% ?" G[    2.107743] davinci_mdio.0: probed
7 Z  Y$ ~" N$ H& ]8 u5 t[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题, L* A2 U7 D5 C: G
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
- e& D2 v3 Y8 L5 S( V6 R[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown8 C0 E5 f; Z& b" O! F( j2 c0 f

2 z9 Y+ Q  A+ N+ z! R3 U; g[    2.137188] PPP generic driver version 2.4.2( T+ ]1 f4 N0 _* B5 ^% Z7 S
[    2.143236] PPP BSD Compression module registered; Z- D  [2 w4 F6 k/ b" z) n6 l

+ [+ T+ ~: s4 F$ b) ?0 Z- o+ y, u& ]# b! Q& K" m) _! F
在linux内核中的代码应该是以下:5 y1 B" c+ E. w$ c  h1 j5 f
        // 注册mii_bus
; h3 `- \9 x/ e0 S2 {8 ~        /* register the mii bus 2.   注册mii bus 2*/9 q* L' l( v6 x6 v' Z( Q
        ret = mdiobus_register(data->bus);
8 w9 o, ]; @9 U9 e! c9 m        if (ret)2 |9 k  n" H! R$ P& @7 `! D
                goto bail_out;
' e& I0 `6 ]) H& s% V# o% @3 ^( k& m
        /* scan and dump the bus 扫描和转储总线*/
. _7 M- @0 i9 x. e+ }$ c2 U; g3 H        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
# X- b# s) B, a' O) n                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
9 K  b' w( k3 r2 d; @                if (phy) {% j6 Y' f8 ?& L/ v! B- u0 U  Y, y/ g
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",# `+ M& p% ?9 |; K/ Z6 O" c) o4 t6 {! [
                                 phy->addr, dev_name(&phy->dev),0 v% r8 w: a4 f3 T) K
                                 phy->drv ? phy->drv->name : "unknown");- ^+ p& q2 o1 Z1 Q  k# r: [
                }* F9 R1 m* N, N6 [9 I; G
        }
' q; x, ^. U) p/ e7 r" N9 [+ x! c/ d8 O# I! q
- }+ l% {5 Y: \; ~
最终在后面 网络启动有问题
! v% o  V- n/ G/ l+ P1 Q[    2.387752] PHY davinci_mdio-0:00 not found2 g" z1 [& {* h4 ^4 q
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00  a& O9 c& m8 J2 i1 O' l! r
[    2.398254] IP-Config: Failed to open eth0
' b; n8 n4 P' L; B1 c6 D- g) Q[    2.402589] IP-Config: No network devices available.+ n# |' V' Q& p8 F+ p, q- _

% O5 J' }% _8 ^* o$ W+ z" W* z( l$ u' g( M

2 ]$ j4 d% k/ r1 k* ^! m: i0 z, {1,请问下,这是什么原因造成的?8 Q( Y" M8 s- l/ s- u! C
2,phy模块 和网络驱动开发的过程 是什么样的关系?
' e8 s$ `$ r7 }- u谢谢& z' ~4 R1 r, ]+ T! 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
1 Q$ ~0 K. `2 T* ^3 }2 a请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

( h9 s7 x) |, |% ]6 t2 L用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
9 f+ ?( J' C' g! n" V- X* {请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
/ V7 m- Q% W$ u9 i3 w0 }谢谢

点评

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
8 j& C3 U6 F- W! x$ k  s4 j* k用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
3 l- N4 w/ c5 A/ e
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。' J% u# X. F  Z- W$ n
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46$ X8 r4 j; P" h9 c" F! L
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

" d$ \. ~8 Z  ^4 K! u) W- |请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?. i, F# {8 f& L* b9 Q0 [
在linux启动时,打印的信息是:, D' Y4 z0 f. C4 ~; c# c
EMAC: MII PHY configured, RMII PHY will not be functional,
3 l( |. ]/ [0 _& ~+ v# u8 U% P应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。# [6 }* i: b2 u' |% o- @1 k
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
6 K" c( z' c' s1 s- E6 Z" `- y* [# q# U创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

* r5 _( j8 {4 o3 w3 E, G: ~9 e4 m我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40' `# `$ R5 A$ r) K
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
/ Z/ W, p- }. T3 A一般来说,板级的emac驱动都 ...

" z5 Z2 E& v% N8 c/ l' c' Ovefone您好,有些还需要请教下您。( K4 r: V  L. j% D6 z. \; ]
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
. y; O) P; @* Z, V6 N; h5 e8 {% b, p% x  r
void __init davinci_common_init(struct davinci_soc_info *soc_info)" D5 ^2 `) I* i5 G/ E" G( @" Z

3 J4 \. |1 l- r; m/ k2 x{
$ b% m5 n) M; W9 D0 L
, U, L% d2 R/ v5 P  Y. C/ J             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
; U5 @3 o# Q( G* V
$ B6 G, `- w2 O% N" d# T}
7 X( R+ \4 W+ |8 y# g
9 G8 w) m0 T: ~! l- L//XXX 还是前面的
% a  R, Y& k$ D% D, }# v8 L[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 6 ?0 Y. y6 a7 D& s$ g
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
8 u# U/ X, H6 z[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
! y7 g( ?; x1 L: {" [
, w- M5 X& k2 [) [1 |. C在后面, u2 }; r9 \& N1 ~6 H. ~, P
3 V) I  u$ O7 y, [7 L
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
( k  d$ @- N) e6 c/ \, R( q[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
( T$ s& }( _3 p7 t
' w2 w/ D* {( |/ N请问下这是什么原因?
1 r$ x6 u  A' {2 d' b5 @$ a( ?# S, K
我百度了一下相关的问题:有介绍的说
4 _6 V+ ^% a8 |5 m: z8 \4 g0 ^
9 T. W3 x, J* Z- @: D由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
4 }! z1 \" X5 K% y  u5 |$ \6 s
0 S' m6 W7 v1 C* B建议调试在u-boot中进行,方便确认问题。" S$ F+ N) {5 q$ N
* D1 g& Q' C! i; z3 L; \
u-boot下主要确认三点:4 G- i5 |! z8 S
  U+ p. c% u% t4 E) l; N( m
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
3 @+ D- g/ o- V9 A' m9 b2 ^% T  s9 y( A: e
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足9 t4 O9 p7 ^: n, l/ L9 D; q

3 L2 d% L+ ]5 I1 U) ^; }; B* J4 o3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??6 Y3 A2 |& u0 o: I0 x6 [

* p: ~# [- V. g. p  r! @7 T- KLinux下调试也是确认以上三点。0 p* v- A/ L' J7 H
, R# `  V/ N6 o6 r7 ]: f# e
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-17 11:44 , Processed in 0.044868 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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