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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
8 O7 h% X" Z$ c0 h( ^# w- \3 E[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
% o* o  ]7 d7 W( i[    2.107743] davinci_mdio.0: probed
( ]& }' ^$ F/ @: p# j% {3 O: |[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
6 F6 k- ^% p, z* _5 V: U8 v  q[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
: W- _3 P0 V" {) N/ k9 p[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown, v4 d5 D0 Y( N3 c5 s9 X( ~
* r9 o" G, Y, y0 H. m
[    2.137188] PPP generic driver version 2.4.2
# ~, R5 `6 X7 z. }  ^[    2.143236] PPP BSD Compression module registered$ \' v% u3 D  c' F( j* M& ^% J4 T
7 ?+ f1 o3 c% C4 P

) E+ l: a' Q; f4 U  O在linux内核中的代码应该是以下:
$ [2 U. E& S& g        // 注册mii_bus4 o1 q- W* s* E0 [+ g! d0 l
        /* register the mii bus 2.   注册mii bus 2*/
: t( I4 L' s$ M1 J" z; S. c        ret = mdiobus_register(data->bus);
7 R5 u/ p0 c/ A* a' v# V; F        if (ret)  u# H/ d# O( F% F/ {8 `: r
                goto bail_out;
3 D0 O; x1 W$ v
, N  }: g- D2 ]/ B        /* scan and dump the bus 扫描和转储总线*/
/ M; W" d" n& M( E        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
- |: V/ U" u' r/ V$ V( n                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据7 E* |5 k1 a+ X: E: J' W, ^/ `. `( N
                if (phy) {+ u8 s4 f- o7 M5 l" R) b
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
" s9 d8 K; ^+ R4 n, ?3 T                                 phy->addr, dev_name(&phy->dev),
- @& ]* m/ z. F/ u8 ?7 e' u                                 phy->drv ? phy->drv->name : "unknown");, z! l$ X* ~8 y2 ]
                }
) o0 w- {: @% U0 x6 t* P' R        }
1 c+ c% c2 N( s9 t8 ?3 z
/ K6 O( u/ M. I/ @
; G# U8 M( j& w* Z9 J3 d; B: x4 _最终在后面 网络启动有问题
, {4 n4 v* c; i( ?- S[    2.387752] PHY davinci_mdio-0:00 not found
/ I. g& |) O: C$ ?, h. j[    2.392184] net eth0: could not connect to phy davinci_mdio-0:007 H! E& k$ S9 P8 q: T3 ^9 f+ v
[    2.398254] IP-Config: Failed to open eth0
, w( l3 ]/ F5 {+ x6 E[    2.402589] IP-Config: No network devices available.
% P- J! D/ i6 V( n1 a
" m9 A0 H% ~: ]9 H3 U
6 P8 A6 v6 H5 O
2 c9 x" H7 F! l. S3 I  Q
1,请问下,这是什么原因造成的?5 m9 K5 b: Y  V9 A% |# u* l" ]
2,phy模块 和网络驱动开发的过程 是什么样的关系?
9 ~# w. c$ i* R$ N; w; [谢谢
, K# g  C/ v5 ~; 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
% ]; z9 m4 \5 `: k, s/ f& {& E请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
' J8 X+ j, v3 c
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
# v  J' I% h) ~9 k# ~% B- H请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
( `, W( F- I5 F. O! B谢谢

点评

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:332 m! L9 F* s5 G1 K8 E2 j( d
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

1 X) i6 N& r/ Y! \. T/ ~! klinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。4 {% n; k5 ^. a  u; `5 S
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
3 F5 F! G) U$ T! s创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
8 z  `$ S- y0 x0 s1 Z( R! s  r) C
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?7 s  d4 v# R- O: i
在linux启动时,打印的信息是:
+ m4 n- o+ {: C" Q/ s0 z  z+ dEMAC: MII PHY configured, RMII PHY will not be functional,
4 t( `8 |; G4 t7 _8 A3 T' @  t  E应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。, C  t  H; {8 r! K; T5 d
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:462 M' |" ^, T! {: v! I7 W7 R
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

7 V/ f0 q: o: M0 h我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40# l; u% b* u. _/ I7 f4 ~
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
' t( _, l! b9 B. h7 u  o$ h5 g6 G* [一般来说,板级的emac驱动都 ...

' S% g" G, k; n7 \  N- H( {vefone您好,有些还需要请教下您。
6 Y; U6 e$ R4 D  P" s$ ?然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1) ^7 W* g/ N1 N% Y" Y" x
. W+ ?8 g5 e, M' A7 x3 O
void __init davinci_common_init(struct davinci_soc_info *soc_info): z8 H& x) K! |+ k! l) p; b! Q
% c# v7 S- K4 E2 U/ ?( Q
{$ X( {8 H8 L! Z& K

: y4 ~& E8 p6 `! k' L9 n% d/ |( q             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口( q) a1 f- r: C! G

  {; G# a4 B+ m3 r: T) M4 B}1 U: P# H: G% p& M/ H& p# s: ]7 M
) k) |+ H$ R4 c& c
//XXX 还是前面的
8 W7 Q" ?1 S: @% W' v3 u! U- A* C[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 6 D# t8 @$ N; u. z+ \1 g6 q
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown) `+ I0 {* M0 W$ s+ T3 r/ K( @* [
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown) Q1 B# ?7 ^- ^8 G  x) u( n

" w. o9 j0 z6 l3 X7 a4 C在后面" D4 S3 g) F4 K+ P, n

7 M, m7 T! x, B& W5 b[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
% |. c2 H  I# b3 [' s* ?" W' C$ M[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:006 o+ v5 n+ i$ t( ~' b) v# ^3 x0 _
1 n+ ~1 C( e- U' g& B! Z0 R0 x
请问下这是什么原因?% Q+ c9 H  Y" r" i! z

+ M8 T0 f. v! _. L我百度了一下相关的问题:有介绍的说
. `) D. j* o: u1 y
3 e) Y0 S- k. i4 \( b  E由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
; j9 {! B' N6 q$ e" X! l2 O8 {  j6 c; v- v" E- w  ?& Y& D
建议调试在u-boot中进行,方便确认问题。$ Z; d; K& Z6 m4 o, e9 ^+ }
2 m+ v7 _; A! `' W5 X! i+ o) I4 J
u-boot下主要确认三点:
4 J' \& z$ K9 O& k4 z/ T
+ ]2 L$ ^$ E' \8 [+ l2 Z2 i0 d9 g6 n) n1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
, x9 N( ]7 G' @+ f8 s" U! v/ C+ v& U8 ^, ^# J$ ^
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
3 S7 U+ n3 I6 l5 O- I% B* J& p, }6 `/ ~9 U, E: s
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??8 ~) J* W9 L0 u1 L/ o  A2 s. t: G
/ ~: ~" q: H5 ^2 n6 |
Linux下调试也是确认以上三点。
7 `; N1 ^& p1 o2 j5 x3 o$ G
, M# O' ~4 }" h可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-5 00:06 , Processed in 0.043933 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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