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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
9 T( w7 r# L, q1 h3 [1 H) u, |5 L) d[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1. x( p. F) f8 ^; L, V
[    2.107743] davinci_mdio.0: probed3 G! ?: x+ ^) F, m+ M2 u# d
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题0 i. z8 Q0 Q+ h1 P( V0 T" D" |  M
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown; z  G; f# N% Y
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown" I$ _" M# A- q# y' q# d$ }

' V' \, r. s5 O- y  r[    2.137188] PPP generic driver version 2.4.2+ ~8 N* Y5 W6 [8 v+ R& u
[    2.143236] PPP BSD Compression module registered8 F) Z# g: U( k4 C. @& I- S
; A  U7 q" {( b5 s; h, n+ W% {
7 h6 j9 {+ P) J8 _  s% ]
在linux内核中的代码应该是以下:2 l+ Z! W* h* }$ X+ }3 w, k# P4 ?
        // 注册mii_bus, g3 d( g% F$ [; ]( ?
        /* register the mii bus 2.   注册mii bus 2*/, t* Z- Y) }% }  |8 Z
        ret = mdiobus_register(data->bus);7 o& N! X: b, G. ^+ Z) I
        if (ret)5 E, }/ \' q' K: K0 `
                goto bail_out;5 ?& g! {! Q7 j4 s2 |& ^  p5 ~. z
0 B3 H, S) D: C9 [* U* b9 i3 y
        /* scan and dump the bus 扫描和转储总线*/! P* m1 q2 n3 p7 ~: n. q4 x6 o
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {. m; n/ a" y5 F
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据- U0 v% H' K) f4 g0 V9 e
                if (phy) {
1 v+ L6 Z, I2 b9 r                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
; i/ h7 E; t. F) H8 r, A' i1 s3 U                                 phy->addr, dev_name(&phy->dev),, t  l$ Y2 J. }3 D/ a
                                 phy->drv ? phy->drv->name : "unknown");8 r% E) \) ^# |; V4 Y
                }
4 i& |# U! y! D6 h: |" O7 T        }
, M) n* Z, e# ~
" H7 G9 Z9 G5 _5 Z9 E8 E
* ?9 j4 x8 o* O& K" Y最终在后面 网络启动有问题
6 y! p6 C, S" U- _- U. }8 _[    2.387752] PHY davinci_mdio-0:00 not found
% ]& c( g! u: E& ?: `- O: a# `[    2.392184] net eth0: could not connect to phy davinci_mdio-0:006 E9 S5 f2 f- W( s3 V1 u) E
[    2.398254] IP-Config: Failed to open eth0* z6 w3 v* v# v- p+ |1 [
[    2.402589] IP-Config: No network devices available./ ^2 }+ y- ^& y- X
2 @- e8 y) r$ [* e* {7 |) b8 @
* J1 _. V) w" y3 r8 D

9 x" E- `1 u( Y+ b9 T: t1,请问下,这是什么原因造成的?
- S+ ?" ^2 L- q' z/ o2,phy模块 和网络驱动开发的过程 是什么样的关系?
" t; a) E: O4 L谢谢
( t( o" y! r+ u9 P5 o* A( @
分享到:  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
% |" R# [" D: d& t$ e7 t+ [请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

4 U# `+ q. r) S% R/ q6 y用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
' q# Y$ J8 _/ l% Q请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
- T" Q1 y$ m/ {谢谢

点评

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
3 N* s' z! _' {# t9 n. t用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

) b7 |% k3 I; c$ X! G9 j5 G% q5 vlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
4 w# d' e6 }+ R5 U一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:461 r7 R/ r# f" S7 E+ P% X2 q0 g) \
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

% w+ E9 R# a- E- \请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
$ I+ j% H7 M; q/ L, S# J" E6 I% c# d在linux启动时,打印的信息是:- w2 E, W7 H- f. `* ~
EMAC: MII PHY configured, RMII PHY will not be functional,
  S2 m0 e2 N3 V! F' A" \4 c应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。/ x) O* _9 D" B, Q! w- y, c5 ?' N" p
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
- m6 \% t( V+ G创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
1 @4 p, }5 n6 P, P. Q2 i' ]
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
* g0 @0 }3 p  |; n5 m5 elinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
* _7 H- t7 X" L/ P一般来说,板级的emac驱动都 ...

/ u  L+ q: @4 A7 p) t  e) r, S. m5 [vefone您好,有些还需要请教下您。
/ [$ l9 a* |, Y8 c3 z# [' n0 @' u, j然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
, m  N: ]' H$ r2 ]
; B8 E1 M- J! ~4 x( J2 }void __init davinci_common_init(struct davinci_soc_info *soc_info)# e2 U& o; o* s
0 M7 ^; B3 X% k- Z, A
{- v- a! h" a6 i5 N1 X8 {4 n  y

) M/ b2 @' q4 `) v1 f! c$ M6 K             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口  c- _% X/ T  ~# A6 m* @! L

9 i: V* k5 T) P# U}
3 H& w; w: V" q& K8 y/ N' J7 x
  q/ X9 }, \3 _. G//XXX 还是前面的
3 e8 o, c9 T4 ]1 ^& c% {[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
( {! z7 x- H) W" a  a4 w[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown$ r0 r3 E% k/ k; J
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown( x* A  \6 K2 ~) T7 H

; P5 g. y! z3 j$ t; x在后面9 W  g0 Q5 \7 F( b6 E! E% x

5 i- @: Q6 i: K: b$ E[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了# t, G; ]. X+ F3 T% G3 r
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
; }( v, s" f8 @# a+ {/ ~
- n: {. u! ~! a* s7 b  F; K$ l8 z请问下这是什么原因?/ ]0 E+ }) @" Z5 R9 W" O
9 G, ^# I9 b/ K4 ^0 Q
我百度了一下相关的问题:有介绍的说$ p7 n) b) F+ N! s; x% T. `' L5 [
7 L4 z, t+ l; s
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。, r) {& w2 l: |9 S! }9 K
4 _; L+ o8 ^, e$ A% r7 t
建议调试在u-boot中进行,方便确认问题。
- r' |2 U: K* |5 a; u* L
* S, R7 O3 D+ m# [! ru-boot下主要确认三点:
" q0 w) B) i. s" f* \3 C9 k( N! }  j: B, y! A* H( R
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
* Y( \4 G& R+ Y0 e: I6 f+ {/ ~# w0 o. W
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足6 x' M; C. h" T! P/ b0 i

! \3 I, j  L- u5 b3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
$ R* Q4 M* b8 U6 k3 v+ s5 M1 N" Y9 G6 r
Linux下调试也是确认以上三点。1 c& I: p8 A  a6 o7 }" @" B

4 ]$ I& R6 N. c; C. K3 e0 ^可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-5 08:28 , Processed in 0.049771 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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