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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
+ l1 ~0 H  R# r4 \! O1 r/ ~* }[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff13 L9 @' T1 F' F% g8 O9 }
[    2.107743] davinci_mdio.0: probed; F' H7 k8 A% J9 O2 Q( n- ^
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
! M* O' ~1 `2 m. Y+ T* p[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
' Q0 l! M  i9 v[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
2 N' @& F% w; [4 @3 q4 z$ F, B: _0 P) r
[    2.137188] PPP generic driver version 2.4.2
! S/ C2 L" S7 P1 }[    2.143236] PPP BSD Compression module registered! ~* @4 Z! }5 b3 p

7 h% s  Z" A  s# W) r; _: Z4 B. y" Z1 J+ E/ Y7 ?$ W
在linux内核中的代码应该是以下:# P) R- u- S, F2 M) W
        // 注册mii_bus
  U* v3 |, c, K8 c, T! B        /* register the mii bus 2.   注册mii bus 2*// Z" F  H7 t: i# r" F
        ret = mdiobus_register(data->bus);  A4 @  H( v8 a, T+ \
        if (ret)
' V  O: q. Z# `: v& }                goto bail_out;
; Y6 [( G. c) m6 j# h$ Y
6 r. z. K6 C7 n7 r( M  k        /* scan and dump the bus 扫描和转储总线*/# K' C  q/ O; A8 k
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {! Y/ A2 W9 [) Z0 W6 t
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据6 |, R1 b# j8 y- \. ]6 C
                if (phy) {; Y& ^) o# w& R5 G% I
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",, Y+ f6 [9 g8 G; y+ v, {
                                 phy->addr, dev_name(&phy->dev),6 Q2 Q  F' K+ D- @7 O2 b! I3 n
                                 phy->drv ? phy->drv->name : "unknown");4 T% y7 V1 C; P( f: T" ^( Y' I+ W
                }4 P1 t" W; @6 B# Y! Y4 T
        }7 T# t7 `, @  A: t2 V

! W* [5 }3 S7 D
) S1 S- X$ m# P& Y最终在后面 网络启动有问题; I* d: T& B$ s, e* a
[    2.387752] PHY davinci_mdio-0:00 not found
' f7 {0 @* ^8 d+ d" G0 E( e( A: L) q[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
9 ^+ K9 p; u- L[    2.398254] IP-Config: Failed to open eth0; L. }5 ]& X" J4 z' @7 O  W
[    2.402589] IP-Config: No network devices available.1 g; J5 K, c3 \" G6 D, a2 k
4 M6 U* `$ v: N; m& u! w4 x2 z& ^

: H, s) k1 }6 M+ g

* {3 N6 P7 \' x5 G' o  ~1,请问下,这是什么原因造成的?
  x, t+ H/ P0 k/ p2,phy模块 和网络驱动开发的过程 是什么样的关系?2 ^8 U& ?0 q9 i% K
谢谢
9 g5 G, n; X: v8 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
8 ~: d- H3 o8 P  s! I6 Y请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

" @# {4 F+ N: {  @' c$ S用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,# L  X& `3 [0 T* w; S
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?; x' p& q9 v3 \1 m$ z( g" Q4 {
谢谢

点评

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! J. S3 k4 z' z" u, L
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
) x: I8 p& }1 k# P
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
2 L/ u! [2 \7 W" I% {$ @一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
5 M- h, c! s8 Q8 W0 n( G' l创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

& V* E# l8 ]9 y! M$ l5 n1 n# L/ j请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
) t5 G0 @( W. P8 N  z3 _( A在linux启动时,打印的信息是:
; D* u# J% \+ D  Q* ]& H% ^EMAC: MII PHY configured, RMII PHY will not be functional,
2 L# B  E; k6 O0 |' H9 p  d. F应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
; M: Z' X: H" N, @8 D9 J: B% t% a谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
* q, n$ w" o: D7 {创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

% M9 Y4 a. ^4 f3 R0 M* o我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
# @) \8 \& J" c# R+ ]1 `3 S: g" M$ Elinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。+ z  a4 v" I' d' Z; B' x  v
一般来说,板级的emac驱动都 ...

" O7 }; w- h! _* dvefone您好,有些还需要请教下您。( V9 P4 X4 q, {$ ]$ @6 {! N
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
2 b# L7 X: F- d5 y  V# f6 p% n' M2 Z( G* w* c' a, ~
void __init davinci_common_init(struct davinci_soc_info *soc_info)
* c5 r2 ]3 H! J6 p. i4 `3 }
! Y( e9 H7 i; G5 m8 [1 A; G. w* B, o{  y. n: b% ?" m
% m5 w6 |& a3 O- I; |
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
% b/ g* z% a7 ]0 |6 l. i7 f. s. \- t6 N0 s# R" R
}
  e% z  E$ ]& ]4 Y* N$ ~$ h% L7 P( s) u( T9 H# c0 w
//XXX 还是前面的
! i5 l( p4 e4 D4 k6 D: w: E1 }[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 3 B- |: ?& ]( y4 s" f- p
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
# |" n! X3 q# p9 _) ~- k% Y: @9 O2 i[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
' u% d+ K0 M% O/ ]' X/ k! N5 V
# {  K# S$ L$ I$ M0 c7 q5 ~5 @在后面
0 ?  S2 ?: ?' i% ~; Q
, H! x7 Q% u; ]9 ?. L8 n[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
8 ?6 r$ I) t0 s, ~[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:003 p. f7 n& A" t7 F$ V* U
: P3 I$ l+ q! @( t$ m
请问下这是什么原因?2 y2 l- N& e6 u0 _
$ }% B: _$ C: w' q: C$ K( N
我百度了一下相关的问题:有介绍的说
* z6 F9 N* B  {, @9 e% }" L- `
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
6 f+ G9 @2 S+ f4 V" y+ K
* H1 X7 V: H# {0 a' u. S! U建议调试在u-boot中进行,方便确认问题。
  g0 H) K4 ~2 k; p6 X# _, N$ b- n6 h) G6 D+ y) m
u-boot下主要确认三点:
1 z+ p$ q. `3 S  {; h! F. u4 L
! r9 f( o$ _. X9 J6 I1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
7 u( P; z. n. V3 u2 }4 f6 i3 C7 K( F7 b
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足) o$ p2 Q) S6 k5 X0 u

6 N  _5 v- t$ S5 z: g1 z3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??' n1 \; ^4 ~5 E
9 }* N  ~  u0 q; a2 k
Linux下调试也是确认以上三点。
( n& z: d. y* o; |: ^2 s. l  B( o; g4 f( e$ G7 Z  ]7 ]
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 01:16 , Processed in 0.045061 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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