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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题" x0 ?- i2 D" ~4 C
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
/ e+ u* I) ^; Q% M# {& C6 w# h[    2.107743] davinci_mdio.0: probed
( u& ?, {/ @8 p& `0 ?1 z1 X[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题2 c6 o1 W- L% u
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown, \9 B! P# O2 W1 b4 }2 E
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
1 C6 ~) H# V; l6 Q" [
  c! U0 A4 G8 M/ L/ P, S) }[    2.137188] PPP generic driver version 2.4.25 c! X$ x) q% e; ^
[    2.143236] PPP BSD Compression module registered! v/ F1 L+ t% ]6 U7 K

, x& I, b/ ?' T$ t( O' ]9 F- v; d! M; j
在linux内核中的代码应该是以下:" ]. R0 x- u! ~$ s( z1 T
        // 注册mii_bus% a# U/ i5 {$ r" [1 O& \% G
        /* register the mii bus 2.   注册mii bus 2*/
; H* I/ A& i% P) t* ~: S        ret = mdiobus_register(data->bus);
/ t; S7 c8 L+ C0 k  z        if (ret)! l4 ]% s' w+ [# x. M6 h
                goto bail_out;4 b0 g5 C9 A* P1 j

+ I. K2 ]. q& ]7 l8 j& }        /* scan and dump the bus 扫描和转储总线*/5 e% Y* [$ [" r# r$ ?
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
% n0 f; g5 I3 |) G1 I) w9 i                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
& w/ Q4 M# J! z" r8 _3 ]6 y& \% m                if (phy) {
/ b! Q+ I5 |' W7 f& Y3 U                        dev_info(dev, "phy[%d]: device %s, driver %s\n",9 }; ?: f/ n& p7 o6 }* E* o7 q
                                 phy->addr, dev_name(&phy->dev),# }5 _  j, r: ]7 W2 F
                                 phy->drv ? phy->drv->name : "unknown");
) h% B. s) K8 k                }1 e* U) K; T1 o3 A5 T1 l
        }
- ~( g* ~7 }' {  C
' C: S8 w# c- Z7 m. K' t. }0 i; }1 d& f+ l7 I: @4 N' U
最终在后面 网络启动有问题
- A& `/ P4 o+ L1 N; Y9 _6 m[    2.387752] PHY davinci_mdio-0:00 not found
4 k( u+ t( m5 b0 m7 i( F' i0 }[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
) k( f) h. m( z[    2.398254] IP-Config: Failed to open eth0) Y7 D2 F9 ]9 e2 I
[    2.402589] IP-Config: No network devices available.6 E0 S0 X5 t8 q9 Y8 s  T

2 x+ \" o' G& h
) o9 h/ i! Q/ [" \" f

- q, H1 ]- o% M$ \; h) ?! c! F  y1,请问下,这是什么原因造成的?+ [% F: ~* C7 O1 f8 E
2,phy模块 和网络驱动开发的过程 是什么样的关系?) w8 W- s# K- n* b
谢谢
7 C1 m. M( K, e  k% P
分享到:  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" p* [5 E* R2 l- R: u. B  P
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

/ f+ f1 L# E/ v: G用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,+ `. _: C# s* v; X/ {
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?: S5 @: r: k- 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:333 Z- p  R9 O2 \4 `" G2 z
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
2 y& l/ T; P  U$ n4 ], d
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
, T  `) ~/ j' J/ r% T( k一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:465 m: y; j, z$ v+ a2 j% }! m
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

# ^5 p2 c- |# _# p! ]8 p, q请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?( A! _) D% _" z+ I7 i  W
在linux启动时,打印的信息是:
1 F7 b; b  w6 j$ j2 |$ G, J! _EMAC: MII PHY configured, RMII PHY will not be functional,
) p& \9 G- X. ?* W5 _4 B应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
% ?( M* e& S1 Y. d谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46" m/ z$ c$ t: l  m, b4 g7 M
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

/ x0 D. k6 j7 e* V! X我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
4 M& v, q3 s3 S9 y1 o" g# ~linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。' ^- B$ |. W! ^3 Z1 z6 y4 a- P
一般来说,板级的emac驱动都 ...

+ k0 s" g7 Q5 |1 Pvefone您好,有些还需要请教下您。1 k9 V! X' _6 R; C: u4 i, S
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为19 h" t) ?" i; F, `
" n3 w. _- ]! A+ c6 ?/ _" u5 B
void __init davinci_common_init(struct davinci_soc_info *soc_info)
( u( G  Q9 u0 G( b) t  P5 f6 T/ J1 ^5 I. E9 ^/ H
{' S/ V7 ~1 @  f# P  S; l, j" |

+ T. W; J, \' d  Q" e: M             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
  k9 G  b! n/ V3 e* g/ O! W! L4 d' m  I3 t/ c
}9 z$ `" ^6 P! V* M: W, c

6 D: O: x: Y1 q2 R' O//XXX 还是前面的' v+ e; U  e3 \( y! @$ T
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
; h! X5 a5 `- `/ s% r1 j+ X[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
) m, o, L+ v& o8 o6 A. ^6 F: U3 f4 U0 I[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
1 {+ ?) V3 j0 @% O( a) z8 A
7 A. G* n" p4 i/ Y0 `& P! y在后面
4 c7 s( A% @' d. c0 l3 p
& u9 e5 N/ d8 b! _5 Z# D+ J[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
) k5 ~/ l# U+ i: @9 H) Z9 Q[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00" h& t0 J% S; x' [
- h$ s: g% N, L  n& C4 K$ N
请问下这是什么原因?
; Y1 x4 G% K6 a/ K! Z  b, T  T. f: f: {3 ?& i/ y- d. ^* y& V! a/ Z  `
我百度了一下相关的问题:有介绍的说( H7 \7 ?/ c- G* V' W
# Q) I1 j+ h) z8 F; S
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。  y0 d& o& i$ b% n

1 @9 \, ?' ~; f建议调试在u-boot中进行,方便确认问题。& ?% t( D4 B0 n+ \# ?
+ l$ a, x- K9 `
u-boot下主要确认三点:
- L! j, b6 e. z: \1 f
2 X( E4 w' R9 @- Z, B3 C1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作5 V$ o! G6 z/ y4 [; o0 ?" p7 V- S
2 z0 A* Z8 E" P( b) g/ ?
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
1 W) J5 r2 G' s0 F( M* @* F# c4 c  ^. {
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
. ]" X9 |( O2 g) \) a& t" I
1 X3 i8 Z# L$ y/ i8 d. HLinux下调试也是确认以上三点。! N0 L  I  N( B% b3 }* v
* O% o- m! q3 o2 I
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 02:00 , Processed in 0.045076 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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