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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题% v. i4 ~5 [% \! }2 C4 y! J% |8 t6 g
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff16 c9 g3 Z7 z: Q8 B: V# a
[    2.107743] davinci_mdio.0: probed
+ p9 b5 t' i# _, b[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题8 s6 r) q3 |: U1 w% I$ F
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
  d2 P  Q$ o# H# m[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
8 q8 y2 O& T6 D2 q- A; \8 N# c
8 L" m* _% M0 C: [% K4 R, O9 O6 |[    2.137188] PPP generic driver version 2.4.20 m5 s" t+ F) U: j5 U3 s" b5 E
[    2.143236] PPP BSD Compression module registered
, |$ q" E( g1 D# U- R2 h4 k5 Q+ w" `" L4 S
1 e( R% B3 ]: o( o
在linux内核中的代码应该是以下:
+ U) {4 M  b5 D- Z  A/ P        // 注册mii_bus  h1 T$ x0 }$ Y" s% Z( y
        /* register the mii bus 2.   注册mii bus 2*/
. k8 H0 z6 g& o) M  t$ D        ret = mdiobus_register(data->bus);
, @% |* H8 i& A  D& K+ a        if (ret)
# C" \. l0 [* L; J$ ]                goto bail_out;' m/ A) Y8 a) w8 h! a$ s- {
: v' q0 ^* h. a* f1 q0 R
        /* scan and dump the bus 扫描和转储总线*/! o1 ?+ _# X$ l4 X, p! r
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
. _1 `. @5 @8 z. i# L* @                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
* V2 e. ~3 h0 W9 S+ B5 L5 A                if (phy) {
" l3 f+ L6 ~7 ^9 L. x                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
. |& x. |8 R1 H8 r! q                                 phy->addr, dev_name(&phy->dev),
, j1 Z( ?8 j! F  V, `                                 phy->drv ? phy->drv->name : "unknown");- G" g* p) H4 M
                }4 V7 S5 `8 K& ]+ ~5 n
        }
; R& [' e" j$ j5 ^; U; V; f' z5 R6 J! }1 o6 B' Y+ A

0 `" N% R1 E9 b; T8 z最终在后面 网络启动有问题
; U% `9 Q% l' R# b[    2.387752] PHY davinci_mdio-0:00 not found
( g; {$ f/ d3 c: R' I6 Y) @[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
# K9 k' N4 a$ L: a[    2.398254] IP-Config: Failed to open eth0
( h9 Q1 G+ L0 s[    2.402589] IP-Config: No network devices available.' M- _6 f& y" r* n

8 x( o8 ]: l$ ^, f3 f: k& G9 S* j; Z
5 q) X* ?1 |" j. Y' a
) ]2 @" w6 r# w0 J
1,请问下,这是什么原因造成的?, b+ }! `) A' B9 ^
2,phy模块 和网络驱动开发的过程 是什么样的关系?
% |: u3 ]' Q0 _+ m谢谢9 _5 y- }- n' Q) l& H! G& w: ~, Y4 G
分享到:  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% e: y& X$ _. G' _- L9 `* J  a/ c
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
( B! n$ i* B0 m' F/ g' h8 O; b
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,+ U) O0 H" K( G, a
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
) A* \; \# W6 h# R. K! q+ ]谢谢

点评

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 L% t- C  s9 A1 \, J! i7 \
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

' m3 i7 q  Y& @3 n. Llinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。3 J, @4 I- Y/ W& J) J; g
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:463 N$ X1 ^: G2 J% J3 n
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
6 f: f. O& v$ [5 z
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?2 A9 k- ^& X& ^" }8 J
在linux启动时,打印的信息是:
- y2 [- V. b( N8 K! |EMAC: MII PHY configured, RMII PHY will not be functional,
: E/ V6 |6 r& h7 m应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。% t5 o; S2 y% `
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46$ V# ?: Z2 `% B. ?; [
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

; d) ?0 H+ h# L" e: f) l我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
6 m* I1 `% Z4 v* _$ plinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
3 k$ Y6 s; g7 ^& q% G3 p一般来说,板级的emac驱动都 ...
: w0 q( M; J0 D6 |$ h0 B
vefone您好,有些还需要请教下您。! C, w. Q+ U1 y' p# Q& Z
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1* B% A3 I8 n8 `. U9 \. b  @
* \3 m9 @0 _. O% w
void __init davinci_common_init(struct davinci_soc_info *soc_info)
* f5 k' Q$ G: v+ J
* }5 D8 V) T2 ~6 F1 X1 M* c{
1 V+ r1 Y. M/ J# m6 W7 K, _1 r1 f4 l2 g
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口0 g5 [1 ?" i# V2 M

* `4 c/ {5 ~- [/ _! _) K}
3 v- p% ~2 s" X" U0 f  @) `
9 l7 |8 B& R: l, Q' U. ?//XXX 还是前面的
6 U4 k# ]+ c+ o" c1 W& T[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 1 o- ~( y! g# C) @+ R
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown; g6 D! t# H. b" [6 P. S) l
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
: a1 T- ^) Q- q, }. j" d; i# W% t/ p" ?5 I3 U
在后面
  a) D; m- c" m1 \2 c
/ b" a' S9 m% l9 p. W1 C, G[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
  T+ r1 h, @4 n* `[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00$ t) j8 R8 Y3 Z6 Q1 \3 V) e4 F
$ `) R4 r  d4 |4 {. c  L
请问下这是什么原因?
2 v% w$ {% k* O/ r' ^
- V1 ~" B6 O* W. e: t1 ]( s我百度了一下相关的问题:有介绍的说
4 p: Z0 e: n# t2 X: ]5 F" g7 n# D
" q" t/ K- H- R1 U& L0 E4 {由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
: f) |2 |1 }3 c# k: |  K* g2 j6 Z, s( m. Y! W# {3 |+ }
建议调试在u-boot中进行,方便确认问题。# S- F# g6 l" U( J! G, M

; t" c; d( v% Q" Y6 Hu-boot下主要确认三点:2 A5 K: V9 u+ z0 y4 h( @, X
% M: ?5 m% s; c
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作& I: }! f; I8 q9 l% X

0 n8 h( K5 t! S4 N7 G5 `2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
" P) g6 z% X" z$ _- J
' N% V8 p% ~0 {' i" G1 J5 e. J2 j3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??5 u% Z" _$ L  e* x

9 ^* I  s) j: }* U2 SLinux下调试也是确认以上三点。
2 `: \* s+ o9 t# S9 H
9 U0 v+ m1 D. c& H/ Z: d8 M可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 03:54 , Processed in 0.049074 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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