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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
- R( W8 [8 `4 }[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1- ^- a. w% Y( W8 s
[    2.107743] davinci_mdio.0: probed% K3 e4 f- f# a' p* m
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题$ q3 y$ R& W& q* ?
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown4 Y( L8 {$ z( ^. e9 ^8 p- p3 ~
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
, r5 w! v! w. i/ l
% Y7 e  L. ?$ o# V  `[    2.137188] PPP generic driver version 2.4.24 I6 ]5 c$ K% A+ ]! f1 ~
[    2.143236] PPP BSD Compression module registered
. H0 D! z  w7 {3 T% i; V9 a% Q) |
. Q9 ?" X' D0 c1 g  Z/ c  y' o( O* r+ T' }$ i9 v# {$ X, Q
在linux内核中的代码应该是以下:. F/ y" P; C0 [( X
        // 注册mii_bus
1 c( d* a  ^# x" \        /* register the mii bus 2.   注册mii bus 2*/
8 ]/ V6 p* o3 l- T        ret = mdiobus_register(data->bus);
$ O, |  O2 r" r1 n9 S        if (ret)0 R# q" u" m& c" L- y
                goto bail_out;' X& T! c  g7 n% Q/ Z
' U1 Z8 Z" j4 H3 C
        /* scan and dump the bus 扫描和转储总线*/
7 B+ E5 Y+ t. F        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {' L. _6 c4 R2 [
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据+ Z$ {$ ^- B1 J' t+ `
                if (phy) {
* o  V& T3 L' O7 e. S) _                        dev_info(dev, "phy[%d]: device %s, driver %s\n",* p. m/ I9 e! d2 i7 B" H# \' u
                                 phy->addr, dev_name(&phy->dev),8 {/ V+ ]) j- j# m/ x- a( K
                                 phy->drv ? phy->drv->name : "unknown");+ A+ q# i8 S. K
                }
* B2 K0 |0 X2 C. q2 y        }) t+ v# [) P( e. b1 ^( [2 ]% Z

6 W5 b2 X3 u) U7 J4 i; {8 k  F* C" @7 F+ ~5 f
最终在后面 网络启动有问题
6 i$ w% ]* k4 {% l$ S8 m; L[    2.387752] PHY davinci_mdio-0:00 not found
# b8 ^- C& K6 N% g6 X[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00% S& P- C# q6 n- r+ @1 V+ `) d5 ]" N+ k
[    2.398254] IP-Config: Failed to open eth0
* R; w2 ^# I! H[    2.402589] IP-Config: No network devices available.+ ]( l! c+ O  e$ D+ j
7 g9 n. t# X# O
+ F( `$ \; p  H) i1 X) X" ~

0 R( }$ g& d  j9 ?) ~- C7 Q1,请问下,这是什么原因造成的?, C, z. o  K# s
2,phy模块 和网络驱动开发的过程 是什么样的关系?
3 ^* T) r3 [# |1 R/ `: j4 Z谢谢
0 n$ z& h& P" [6 t* W0 ~
分享到:  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
: d3 u0 a0 m! |0 U' D$ \1 h2 b请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

& H* H% U4 b" n7 t& Q用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
' B& E3 g+ {/ S" }请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
( `- K5 n7 Y, v6 j3 o/ F3 S+ E谢谢

点评

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# A7 [3 u# q; ^4 p& f8 h
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
3 i7 B, S0 A  O) ~1 y; P
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
2 Y5 c: h* m8 Q; z一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
7 e0 u% K( g, `2 W* f' W创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

% _8 _- ~+ W& y4 [) i请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?6 F" u5 R" n3 K8 d& U! B+ g
在linux启动时,打印的信息是:
) |( W% P: P, C2 v! T1 a( \EMAC: MII PHY configured, RMII PHY will not be functional,! m  {9 w$ ~+ y
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
7 f2 T& P% ?; d谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
/ w+ D) T$ A& T; z9 P% f创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
; v; g  p3 ^( E4 S( C
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40% L* ~  I* ]: ~4 s% ]
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
% x0 f$ P" ?, F4 ~9 u& E5 U2 X一般来说,板级的emac驱动都 ...
# @" b2 H- ?0 |0 l4 u, |
vefone您好,有些还需要请教下您。- R7 u0 A9 l) l) E
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1" ]! n. N  T! Y1 |1 E% k" ^

( \. v. w- k7 X" P# q; l: L; Avoid __init davinci_common_init(struct davinci_soc_info *soc_info)' Y( C- K% {* M( E

# G* Y) B* D! Z' ]1 u# ^{
  R  K5 n% Y. G- y( _  s: [2 c+ D: p: g2 S- i  g0 |
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口$ j% \- K" N- ~. N2 T
; C6 X3 y) L2 q( L5 P$ K
}
& z  @' d2 ?" n5 y+ U" S8 X; [6 S$ q& k* i, ~& [0 N
//XXX 还是前面的
/ {! b1 E. [+ \6 b8 c2 z) j[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 4 m9 T/ a# T: ]7 x" z# h. u: n5 z
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
9 C$ k5 C- B4 f1 P[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
; @+ v9 h. k, x1 E- P. K7 V/ }; r6 n( w# _' v
在后面
9 l6 O( |* ~+ }3 A2 {/ m7 f. _/ m. q" p. s
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了: I" s7 g6 H, l: c# |3 a  m" {
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
# s5 i8 l  [8 Z5 z" S; ^3 `0 G" q2 i$ ~3 t% v3 h% e
请问下这是什么原因?% D( Q1 d& V2 ?, a
: x  r! C2 l0 L0 W, ^
我百度了一下相关的问题:有介绍的说
9 Y; K' V+ Q- l% c$ x$ x
0 \3 }% O' \/ b" P由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
/ B, T$ E, c& b2 g9 B3 P3 i, {  r# a( D6 U
建议调试在u-boot中进行,方便确认问题。
$ P, s* P2 M: i9 ~' |
& l* I1 o% T2 s+ n2 B. x- q* Eu-boot下主要确认三点:& l+ C. A5 r1 n3 ?: v% j# |

# w6 ^/ V/ k' F1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作7 W2 W# v8 Y' D9 \4 v8 `
( |6 H: {7 ]" {2 Y
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足9 _0 }% [' M5 ]# v& D

3 W: |" D4 k4 d" L) j; {3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
9 t) a+ H) d1 a) N  C5 ~4 ^
& Z8 k9 c- ^4 s$ c0 w0 h/ L/ }Linux下调试也是确认以上三点。
  Q7 y0 t; B- P) p
9 n* u5 }! p' B6 `) O& }可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 23:41 , Processed in 0.043417 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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