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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
6 @. y/ r$ f+ b1 `9 M[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
- s" Y; w7 d; l' y# b& x[    2.107743] davinci_mdio.0: probed# r- v' b" H$ F3 o5 v
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
, A* i. g/ W. i# f+ K. B% w/ S[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown' N1 Y* x  x/ `% b  i0 _
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown: q6 V% V6 D& T

( Y0 ]4 Q- m* ]; a5 |+ k[    2.137188] PPP generic driver version 2.4.2
4 K/ e. O- {0 w% N6 d# t( f[    2.143236] PPP BSD Compression module registered: u# r- j6 Z3 j1 \

7 }+ r% _$ c/ E  M  q% n
7 O' T) U/ C, v7 u. K3 X5 H  T2 U在linux内核中的代码应该是以下:
$ g3 [/ i; G/ G# `3 w$ c5 \        // 注册mii_bus
6 o, c% I4 `9 A1 |2 f/ _& y        /* register the mii bus 2.   注册mii bus 2*/0 {  T1 F$ L( f% i* y" v# v
        ret = mdiobus_register(data->bus);' j: }5 r7 j6 k- x5 e
        if (ret)  T$ Y" \2 A! J0 f$ x  h4 M
                goto bail_out;2 a7 l/ A# ?# z# T* G

8 D8 }- ]; ~9 l5 ]        /* scan and dump the bus 扫描和转储总线*/
& U( x- ?9 H( L7 l- m  p% G0 g0 p8 U        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
6 S# ]0 G+ F* Y1 p$ P                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据; t" v" I7 C: R7 ~- Z3 u
                if (phy) {' T& u8 l6 R" U: t5 j# {& q+ D
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",* R/ Z, s7 L/ _  H* m
                                 phy->addr, dev_name(&phy->dev),8 L4 U- [& H3 O  ]6 h8 K& L! R
                                 phy->drv ? phy->drv->name : "unknown");/ G' W+ `& P) }$ w; p/ p7 A. J
                }4 ~4 d2 ?3 X4 z) j7 u# q+ L3 R
        }
* z9 h- L2 q! D7 @$ O6 S; U: h6 h# v1 U6 N  g  x3 O
- h/ N$ d( H1 h( b( C- E# S7 V4 ~: f
最终在后面 网络启动有问题' c6 {3 P. o3 u& E
[    2.387752] PHY davinci_mdio-0:00 not found5 D9 Z1 Q3 e2 U( Y  X& \$ t
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
) u5 \6 [2 H- X7 k0 N. q! P[    2.398254] IP-Config: Failed to open eth0
9 s: z/ q: N8 K[    2.402589] IP-Config: No network devices available.
  h* A% ]" c7 T& \" E. F7 H- B% Y( r: E! K) |' N+ x% c) D* e9 W

! k& z4 s4 W+ A  G$ b* E9 w1 j

) j' T$ x0 L8 r1 _/ l( T1,请问下,这是什么原因造成的?
/ d7 |# k- T4 r4 `2,phy模块 和网络驱动开发的过程 是什么样的关系?
7 f' _: W2 X$ F* r. F谢谢9 {1 }+ F, a' g2 z" n
分享到:  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:344 k$ ?1 ?/ W7 |
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

$ e/ r7 D% h1 ~0 E( E用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,- ?' t/ M) V9 [: K4 S
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?5 H- t! y0 [" W" J' O, r
谢谢

点评

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; u$ C) Q4 _" ~! p' n3 n, a6 N* u
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

9 p* y5 c( Z* Flinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。5 Y# P% a. }- p( @- H
一般来说,板级的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& [( {0 k' f% S$ c8 Q4 _6 u创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

- M2 R8 V* E$ C3 t) J4 t7 B请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?) t7 t9 _$ C& t; O; l. x  u3 r) _
在linux启动时,打印的信息是:( a: s1 L5 C2 _1 r7 B
EMAC: MII PHY configured, RMII PHY will not be functional,% T4 ?1 j0 N! @4 {5 w( N) {
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
7 c* \0 A  {  b( P# k谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
$ _. `! p% Z3 H创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

: y4 j! r7 J; g我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
9 d+ a, J( Q+ E1 a3 l& Tlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
: Q7 ?8 K$ X7 F& f6 P4 _* H$ m2 ~一般来说,板级的emac驱动都 ...

- Y2 o. \7 A7 {vefone您好,有些还需要请教下您。1 G: w6 Q- \$ Q0 ]4 G  y' m2 Q3 |
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
, |* C4 B9 w" A5 ~# G0 c1 M% s' j* J
void __init davinci_common_init(struct davinci_soc_info *soc_info); \' E- E) Y/ Z! `( O& D  h
! N2 g: I5 I0 S8 A: m3 p! q9 _
{
8 R" ]. i0 U9 O9 L( d
" S8 Q$ M- E. f& W. o2 w             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口) r6 a# w8 [+ u2 j3 x
0 Z  L- ~( E0 g' O3 a# V  _
}' w3 ^+ K* I1 E% v: s2 R
' _' M- }. M3 d
//XXX 还是前面的( l& U9 v( W9 @! C
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 4 T* c9 G+ n! f8 l! l& L4 C  y
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
& K9 L7 k, S7 P$ P2 M" E" w, t3 G[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
* I7 y7 f, l3 ]. E' K8 `$ G2 x) }- |0 l# `8 S
在后面
6 z% r9 K: x) M8 z0 A8 _1 _# W, w& e% ]* Q/ ]$ Z+ e& G
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
1 ]4 h& c; D0 Y" b[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
+ e, A: M; I1 S4 l$ t4 g
1 y5 ?( N- S$ R6 }0 d  K2 s( _. i2 n请问下这是什么原因?
: Y# T: L& Q1 g5 w: i1 \; Q6 v' c& d3 p
我百度了一下相关的问题:有介绍的说  ~1 i" [5 }5 }: O# Q' [* ]- m

6 D3 J; E3 X. X由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。5 K0 u' h- S5 l) P; k/ o0 o
9 V. P) p; A1 u, @! W
建议调试在u-boot中进行,方便确认问题。
9 a, Z& c" e" G; z7 f3 V7 o. E) b, }7 c4 J
u-boot下主要确认三点:
$ O. H2 k" ?1 |- \& B# s% e+ I! @* f, N& L* i6 k; I
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
7 k2 `# y, y1 |7 F: O7 Z( _3 Z- l
5 R* s) N' `7 V  u9 x  p$ i  C2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
  h" D: g* }7 x8 u4 D+ Y5 \0 x$ ]
; D9 u3 h; s- P) y" H/ N  b. z3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??7 r4 q% q+ Y5 H  H

& T& v  B! l0 R, ]( _" _( _$ w; OLinux下调试也是确认以上三点。
: L  M8 S- b/ y3 C% o
* y: ^4 F  H* X9 c8 v可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 09:50 , Processed in 0.046540 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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