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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题" i4 u' R4 U+ b2 A* k+ U7 \% ?
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff14 m2 G% ^' d. z; I) ^& N" V. x' _
[    2.107743] davinci_mdio.0: probed
8 P, l/ a4 H2 y& k& p[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题/ S5 K- [5 @. f% T5 |4 U/ a* l
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
/ S9 U  ~. |: |( w, P[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
4 v7 F! r8 D$ K' h( F
" T4 B; b1 f. ^& n  }) f5 G[    2.137188] PPP generic driver version 2.4.2
8 p4 M. o  o6 e$ |, x2 v[    2.143236] PPP BSD Compression module registered
) ^5 r# q+ B2 y; g
  t+ R/ i& W" I% G5 Y. x( g8 a9 |1 {5 x7 U0 E
在linux内核中的代码应该是以下:; v  Z4 w, b9 W
        // 注册mii_bus1 v7 R3 q! U& Y+ ^6 A9 A
        /* register the mii bus 2.   注册mii bus 2*/' ]! R* _# h, z! i; m
        ret = mdiobus_register(data->bus);
" [8 a9 [' u/ Y; ^# Q* c( P, f        if (ret)
; z& _7 e8 {3 C' L' y0 @0 P* Z( s% [                goto bail_out;7 C/ H0 G. C2 k8 y# N. ^

( k0 x7 n2 U% F6 y' Y% D: ]        /* scan and dump the bus 扫描和转储总线*/
/ u: F- M$ S5 D$ d6 q5 K1 d( S1 O        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
% {( ?/ n! O* Y: y, r+ S* F                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
8 t" X; U* _2 y: S                if (phy) {
% o5 S! P7 \1 V& w                        dev_info(dev, "phy[%d]: device %s, driver %s\n",! [0 l9 c8 D8 P, Z" O
                                 phy->addr, dev_name(&phy->dev),
1 n9 [; f9 |$ @4 y                                 phy->drv ? phy->drv->name : "unknown");, c+ U% B8 n9 d, t' l2 ?
                }
) K. q4 L5 r& c6 _' [0 K        }
! x, J7 T0 z/ k4 c9 E9 L
: Z' U3 }8 \9 Z; P8 N
  q1 @% E9 S$ j* L4 e最终在后面 网络启动有问题: ]* {: Q; u8 q* m4 f. C/ B% y
[    2.387752] PHY davinci_mdio-0:00 not found2 n( ~* J# o( V9 f
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
/ y8 M# y. Q) c7 O. H' h3 c8 _[    2.398254] IP-Config: Failed to open eth0
" q5 y1 x- n% Y[    2.402589] IP-Config: No network devices available.+ @0 I; S* p2 t8 c( q" p( C
8 e: H2 m  `* Q% E' ~! y
( Z6 {; K3 }: i, j* s
6 U. N5 p# X' J- F' q; e$ E' h! a
1,请问下,这是什么原因造成的?; T4 M6 O8 ?4 `8 X3 r2 l0 N
2,phy模块 和网络驱动开发的过程 是什么样的关系?; W* c" `3 Y: [' D: z
谢谢
2 J% V0 G% J' [9 U* t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
沙发
 楼主| 发表于 2017-4-14 09:33:48 | 显示全部楼层
vefone 发表于 2017-4-14 08:34
. v0 r' [3 Z9 E$ l) o% I请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

7 C. f! p' {  X" N& q4 F1 l' z用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
  @2 P6 ]) t0 [请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?" |, W4 J& \4 l3 T
谢谢

点评

linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。 一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配  详情 回复 发表于 2017-4-17 20:40
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
板凳
 楼主| 发表于 2017-4-18 10:35:46 | 显示全部楼层
human 发表于 2017-4-14 14:46
4 }5 K4 u0 j7 b$ ?创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

/ G1 E! k- @3 G! f5 K! }. L- X$ l/ J8 U# O请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
; X* o/ v6 n* T8 }在linux启动时,打印的信息是:5 o/ `- z' P3 J0 j8 H+ a- n8 q) T
EMAC: MII PHY configured, RMII PHY will not be functional,! g% W* j: h' ~
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
. e+ I5 m, [( q谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
地板
 楼主| 发表于 2017-4-18 10:36:56 | 显示全部楼层
human 发表于 2017-4-14 14:460 a4 k# B& q9 I. I7 g. f5 R6 n: A
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

" e8 |% z9 K$ b6 C& l: T! Y0 i我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
5#
 楼主| 发表于 2017-4-21 15:31:34 | 显示全部楼层
vefone 发表于 2017-4-17 20:40
! K( z0 C& L5 @' {! \) @  D& Clinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
9 B- d  {+ q: x! F一般来说,板级的emac驱动都 ...

& `) V! H7 _$ M' x2 fvefone您好,有些还需要请教下您。
# P- r! M- w4 X然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1- E/ l/ h( N" y& s

$ |. d9 M4 I) L4 Y2 b1 rvoid __init davinci_common_init(struct davinci_soc_info *soc_info)- n/ E: x7 x% q; a/ c: S
- J4 ?$ o1 O( l- v0 E& r
{
5 x2 [( c0 B* x+ g$ P" A8 d3 T7 T
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口! D7 p3 f2 Z; G, u3 Y

0 z' A# K- J( {7 l}, N3 K9 J, G& }9 k, P2 e

, l% `9 E) Y) e( h- M5 R% X+ S//XXX 还是前面的; U1 X* M3 M" V* h9 m
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
. {) `% v- k, j1 O; P[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown' V" _" t( W: F' _. @) U+ Q+ }
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
' i- Z+ I$ B' \5 ~* S- Q
# Z5 s2 s' E% a% B& b. q1 e在后面
) _+ M% O$ A' d( T9 _6 G8 N0 D0 j/ e, q
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
& b& ]7 i7 e2 M( \7 k[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
, y, W# C7 @0 c: j
0 p' B& T& ]7 f/ _; N请问下这是什么原因?4 b  A- L* a. p  d. g  W4 h
; i; V! y* U+ `8 g2 {& {
我百度了一下相关的问题:有介绍的说/ h- S* G. S( w- m" @: A
* j, d3 m( S' k, Q& _
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。3 y; U4 E+ L  @; U
, E8 c3 `" B; i) d& t
建议调试在u-boot中进行,方便确认问题。
5 l  D  D  p0 L7 M) `
3 q* u" s* y) yu-boot下主要确认三点:
& Q/ T7 G4 o# z9 R
  w" y( a; R5 T& C7 F1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
5 c+ Z! b6 i- A# g$ ~# z6 T' p# O$ S9 e
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足1 \: k& I4 i% b8 d, K
3 ^& ^- j1 K1 @1 _1 {
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??! U8 V1 q' l, y' h/ Q4 G6 g# L8 N: G

2 t* s: ~. m7 y) q& gLinux下调试也是确认以上三点。9 d! N4 e- X1 b$ }5 g% R* t  ~
0 D, M" i. ?' c7 u$ }5 _% o
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 09:07 , Processed in 0.040857 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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