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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题7 p, l% Q# H9 j- o
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1( t  W% D, X2 \9 ~% `8 {: n
[    2.107743] davinci_mdio.0: probed5 ]/ w0 ^  }) G& Y2 o% a
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题8 y. y& [4 x9 T, K" R+ x: w2 r* o* d
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown* `  n9 }/ O$ o4 N% \  T
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown9 r; X' p) v" b0 n7 t: }7 u
# F' ^) u) K  w! C/ v7 D
[    2.137188] PPP generic driver version 2.4.2
; S+ G, C& E, `& s[    2.143236] PPP BSD Compression module registered
) W; h5 B7 D& l$ \0 t
8 m; k" @; O6 K5 w5 L+ q5 f* a4 i9 |, y- H
在linux内核中的代码应该是以下:% z4 O/ b# R" Z% ^  a
        // 注册mii_bus0 E$ [5 g, N) A0 Q4 p3 D
        /* register the mii bus 2.   注册mii bus 2*/
) }% {7 d0 a2 J: o9 p        ret = mdiobus_register(data->bus);3 }4 V9 q9 P6 X1 {- ^- b) Q
        if (ret)
8 e& M2 M. U: E  x# p( r                goto bail_out;. @' X, Q# z: W
4 U. J: h3 }! m
        /* scan and dump the bus 扫描和转储总线*/0 C  j' v8 N" n
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {3 i8 M% d+ g$ L
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据: b- @3 s5 O' Y3 t& g
                if (phy) {- c+ j3 h' d  H0 ^2 r0 G5 q- t% j2 e
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
. a0 f3 y4 V8 v( m0 Z) b                                 phy->addr, dev_name(&phy->dev),
- C' i4 Y$ {& t1 k                                 phy->drv ? phy->drv->name : "unknown");
4 H6 A$ j% _: g+ s: ~( q; j                }
) d' M1 |6 X/ k" b& q  Y$ f- x        }" P+ H$ T0 l+ U

- y9 t: u! x, Y- [
3 F: E9 |/ M+ E. d5 g, t/ ?, b最终在后面 网络启动有问题! t, k1 Q# u7 E8 ~  q" i/ t, z
[    2.387752] PHY davinci_mdio-0:00 not found
- R$ t+ q0 }- y) F: b( [. v[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00" X  x, N) [# i! U& S
[    2.398254] IP-Config: Failed to open eth0
' l. I; d$ o& A( X[    2.402589] IP-Config: No network devices available.
6 V) g; a: A; P* I. n9 J
5 |  y' K! C6 A$ v
( U& I' x; \) _( p

9 ^- K* g, ]6 o& n0 h8 B1,请问下,这是什么原因造成的?: T# w! K5 ?6 H' x8 y
2,phy模块 和网络驱动开发的过程 是什么样的关系?/ w, h4 ^. ~  d6 n5 A7 S- z. l
谢谢& g" t2 v1 n6 T+ ?
分享到:  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
5 ^  B' f9 I* `3 {. {请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
! v: F9 u' X7 J- @2 B  m
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,* R% ~- X# q( u# E5 D4 `8 |" W
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
  K4 P% E$ G# 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:33, _# ]! f4 k/ b+ \' [$ i4 o0 a
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
! c9 A; q, L% |( `4 [% d
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。/ \7 d2 T' Y3 h
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:465 P7 y/ q4 ^  H+ H/ l
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
8 p6 Y7 b: F4 a3 m7 `
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
, l+ p" _' z: r, `在linux启动时,打印的信息是:9 Y( I/ P" n) Q+ L
EMAC: MII PHY configured, RMII PHY will not be functional,
# D. ^, O8 G# L# i$ s; M$ b) V* L应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
" U- M: T7 E& q4 s) J& D3 a谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
6 v$ I8 V0 v# ~* O4 h& `# h创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

$ q6 r4 B% l  o我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
( c) c$ w5 s7 @& T. s  olinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。5 y# `0 h5 v( g1 a/ k
一般来说,板级的emac驱动都 ...

) x" m) D1 V* f, Cvefone您好,有些还需要请教下您。
4 {+ [- S: C+ u8 I: c3 y$ O然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为19 L0 ?( {' d6 m8 T
; X' s+ ^6 a$ b' e. ^" I. c
void __init davinci_common_init(struct davinci_soc_info *soc_info)3 r  W) I; u2 m6 Q/ N

5 C) m) Q+ n! ]7 w1 p{8 f7 x' a2 I1 Q( E0 X

! I0 {8 X4 q( I# z% d/ l! q# O6 r/ r  V             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
. n' K" I8 x$ @* M
9 N0 y  E+ X4 a( }/ |7 S0 ?' j( q}2 P* ?& G6 G& J* N, _$ K& `
: j; O3 r% c. i  @/ w* b4 R
//XXX 还是前面的
* `& q3 W/ Y6 q" h( v0 G[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
$ K5 |% f  Y7 u; C[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
; i9 t) a  e! P* x0 `+ |7 M" K; O[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
/ v0 m# f$ C  r' c
9 `$ P( L/ b0 d2 ^6 y在后面
0 U( x4 B2 ?& S5 M- {  |9 v  q
: Z! O9 \  x4 K# Z: I[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了( ^' q. {/ y+ `$ s
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00. F) _* D; A' n+ }& x0 K
# V/ C- k; X8 V, o; @5 g( m7 q
请问下这是什么原因?
9 [; d$ g. N" ~
" w( Q% H: z/ ~% A0 \& s4 c我百度了一下相关的问题:有介绍的说  \; E& P! E% z5 ]
% a& u. R. \& a' d; d% C
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。" W  _! q& D- m& r6 U
3 ^- S9 N. O: E9 `9 l+ j
建议调试在u-boot中进行,方便确认问题。
1 t6 \2 S' _: L, h2 [! A8 V" t+ o9 V. ~* K
u-boot下主要确认三点:
# `  w- a5 D6 o& M) u2 p" S) Z* s+ W, z
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作3 q& p4 }0 @0 D$ R5 C: g* j

0 b; ~( a+ f: r$ q2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
; {$ c) x  V5 Q9 l( ]" z: \' |/ n* g6 K
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??# g4 y- d1 m8 @3 o

# G2 q7 x: R( Z0 x1 yLinux下调试也是确认以上三点。7 x! V$ D5 g3 e/ W  }- z

8 G& c. Q9 R7 G可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 22:11 , Processed in 0.041552 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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