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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
! Q9 B4 H1 O9 Y, c0 y" O( V[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
* {. n7 t  w6 F! G; W3 D3 q[    2.107743] davinci_mdio.0: probed+ H4 }/ N$ |  c' D( {6 _
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
- X( ?" P3 Z) O1 I6 ][    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
, s  g  m  `/ J[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown3 M+ w* x( H% K" ^
6 n2 t  ]/ p- D9 n/ L
[    2.137188] PPP generic driver version 2.4.20 M0 t1 H. r) P- F! V
[    2.143236] PPP BSD Compression module registered
6 G1 T/ M+ e, [3 R# {7 l) U' M/ i6 I) F; N; l' W- W  c( w
; X- o/ a- l- }. R- q) Q9 d+ f
在linux内核中的代码应该是以下:: `9 H/ Q; x: L+ X) ^, {
        // 注册mii_bus
8 o) `' E8 |: D/ g' u$ g. K5 |' f+ S        /* register the mii bus 2.   注册mii bus 2*/
( J/ [" A: H# A        ret = mdiobus_register(data->bus);
2 H1 @8 s7 B0 R# v        if (ret)4 m3 |( f* p6 G) _8 b+ K
                goto bail_out;& ^/ x2 G1 ]" I, V

+ B  ]. y: Q9 A6 t3 q9 ]        /* scan and dump the bus 扫描和转储总线*/
$ W" ~3 d& O7 m+ A* _" T$ o) b        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
1 c7 w, u) A, O8 P, k) D* `4 A2 c5 t                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据0 L" Q5 {' a( T
                if (phy) {" O/ h" A3 ^8 X4 L1 v- K
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
4 e8 x" \# L& w5 c/ d7 N- O                                 phy->addr, dev_name(&phy->dev),/ i  c1 f7 }, z2 M
                                 phy->drv ? phy->drv->name : "unknown");
7 Y/ r& \! G; N+ M$ [$ w                }
/ r) h$ K+ I6 h, Z1 i- g        }
' y" s! K( `+ z4 R0 s9 o9 b1 R5 m* J

8 C  w; ]- w% d. a最终在后面 网络启动有问题
, M7 i2 A2 F1 Q4 x[    2.387752] PHY davinci_mdio-0:00 not found9 T4 \( Z) d" t  V
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
! n5 u$ r5 S$ Z" j3 @* E[    2.398254] IP-Config: Failed to open eth0
4 P$ [  S; `% q1 X3 y4 |9 f[    2.402589] IP-Config: No network devices available.
* n& C" x9 r3 C. S) a6 w  d" }% o0 {! e; Z: L8 C

, ]1 p) f) e/ Y) H
& b: k9 h8 K8 Z: |) u& D7 X
1,请问下,这是什么原因造成的?4 E( Z* z; N5 M  r+ O9 _  D  c; q
2,phy模块 和网络驱动开发的过程 是什么样的关系?$ |1 N3 s  t+ i
谢谢
: e, ?, d3 Q/ `! @3 k. @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
$ s! M. s/ I/ F7 \linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
6 `+ c" b6 p2 B% _# i& _/ z9 Q一般来说,板级的emac驱动都 ...
& ~: M$ Z! Z' Q& y+ d) h; A- s! e7 r
vefone您好,有些还需要请教下您。$ w1 f3 r% S% |/ y3 g# n$ H1 z
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1/ N; @# H6 L: p5 s+ _$ j* o1 \9 L

" E& u7 k2 i# Y7 F. ivoid __init davinci_common_init(struct davinci_soc_info *soc_info)
; U. M' t5 b  m' f3 k' \6 Q
8 R2 Q3 y5 W1 `- e{' }8 c7 }* s' g3 r
! m. \/ i9 O( M7 b" ]+ B4 M
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
/ i$ Z8 {! N/ u" X/ R
0 q% j$ }& E& ^+ n6 z* h}
' l' K* J0 e% p& G1 {* i' Y: I! ]' N% u4 M
//XXX 还是前面的
6 ^/ h- B* `. ~% Z5 I0 K[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, ' ?4 H% k9 a% n7 [
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown( J; G6 d2 w: R$ o+ T' |4 _
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
8 Y2 |: W* b  g; S( b; I5 v& R5 C/ Z- _6 x3 J# e
在后面+ ?/ u  c7 e- M$ q, f
3 j5 j  C! f8 q' ^' y: N
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了3 S- u: V; h6 W$ G0 Q
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
% g! W, D2 q7 X/ y, W0 n; `9 i
. s8 m7 s# x4 N' w) F请问下这是什么原因?
- Y4 x/ i4 F, I( T! A' V5 v5 O
9 @% i- w+ _5 m) P6 D1 Z. x5 z+ K4 m( ^  g. W我百度了一下相关的问题:有介绍的说
, ^/ ]' A2 R8 {* h$ u) A; I
2 s" w1 D6 g. B* v; v1 a由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。& Z. W* o- \7 l) _) }7 t

0 M6 x$ v# K, W+ i0 W! ~8 z& d建议调试在u-boot中进行,方便确认问题。' c6 c) X. W' \' M
$ [7 e5 l6 J! v6 B+ u# z) f4 t
u-boot下主要确认三点:
3 {: P; O$ L$ Z* a/ Q6 D3 m) V; F
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作5 R/ a, A8 F- {9 F2 r" P& x5 k% X
" o9 k# Q' A1 u! Z3 p4 F
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
% U) S" Q. W2 o5 ]/ m2 L, c& w% L2 f; n1 }8 Z
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??2 N! U: G$ h; r1 y6 L' m
# Q6 S( O5 r1 L2 ^% i
Linux下调试也是确认以上三点。3 m% `6 M2 ~4 o2 x2 S1 R5 y0 F
0 R7 W' Z0 G1 _/ J
可以指点下吗?
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
# e- ?4 j% V% D! @& P3 F创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

: r3 O* V) D( v0 {, t, S我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
# @- W# S! R) U# L/ i1 z& o6 n创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

# ]- Z9 K& }: W6 e请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
+ N  B4 G4 ^0 S( b7 l% |$ _# y在linux启动时,打印的信息是:7 G& `' v3 Y' D$ B  j/ w' X
EMAC: MII PHY configured, RMII PHY will not be functional,
& k, R) _2 e3 c应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。+ g6 @/ J+ H7 W5 Y% F
谢谢
回复 支持 反对

使用道具 举报

0

主题

83

帖子

426

积分

创龙

Rank: 8Rank: 8

积分
426
5#
发表于 2017-4-17 20:40:02 | 只看该作者
小石 发表于 2017-4-14 09:33
9 Z8 r, x6 W* R+ k用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

" J5 A, W7 q: a: X1 J$ dlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。0 m- t$ c( i+ L4 r4 k# S
一般来说,板级的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
" e3 {( `8 v# N# M2 C请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

, T! u# A$ b7 D6 p+ t用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,% @4 ?6 g4 B; ^
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?5 g& [' |, G' D. x- C. F
谢谢

点评

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-9-19 02:51 , Processed in 0.043032 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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