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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
9 c6 F2 Z! R9 }. q* R, ][    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
3 W: [5 V9 y0 n% ~& ~[    2.107743] davinci_mdio.0: probed" M' s  C0 h( S0 x* C5 S" d6 j
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
( H4 t9 c- Z. d" S1 k[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
( W. U8 c8 n: x( f& q% \[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
" G1 r% @3 i  _- S4 [6 r2 t
" K# Q  j2 i  h[    2.137188] PPP generic driver version 2.4.2
; V  u, W/ u4 S' y# R[    2.143236] PPP BSD Compression module registered
- {" a4 M+ W! k7 R) ~9 s: H4 w
; S  D& c' _0 ]! t; Y! _
4 R5 h% \) q7 P; v- J( s在linux内核中的代码应该是以下:; {4 n2 B5 _6 E9 r  Q
        // 注册mii_bus& p& U7 _# h, b2 X& D
        /* register the mii bus 2.   注册mii bus 2*/- K+ k" V) j" r9 {8 B, I& g
        ret = mdiobus_register(data->bus);
3 I' v, i( ~  @" J& Q% I        if (ret)  M+ D5 _  i; U* F% U! P) L& e" }
                goto bail_out;8 L5 t. D) o% \
+ D0 \( @. E- s/ h5 u" M
        /* scan and dump the bus 扫描和转储总线*/, W- i; o8 T. G9 {" j
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {% F) p' @8 ^# _8 f8 B. l, x
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
3 }: B! B+ |' b9 Q; G, p2 |# X                if (phy) {( l4 a0 z. ^$ Z7 ~' L% _
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",& ~) l1 n0 \0 t( J8 i6 k* ~; s. m
                                 phy->addr, dev_name(&phy->dev),4 J- ^; O" s- ?$ L$ n2 j
                                 phy->drv ? phy->drv->name : "unknown");4 r& P+ H0 \1 m% |$ q0 `
                }
- ^/ O4 D0 ]) d3 i' m) N6 d( J( x% g        }" N& g* \, S+ m- p8 z! _
+ M3 Y) I* x& J' P5 z9 `

0 r' L& m) `7 o- z4 t最终在后面 网络启动有问题: R8 v" C4 G( C
[    2.387752] PHY davinci_mdio-0:00 not found
7 u4 T* v/ q0 i[    2.392184] net eth0: could not connect to phy davinci_mdio-0:002 M* Y* z( @- \; i3 N/ i
[    2.398254] IP-Config: Failed to open eth0
/ l) m5 @* I9 V1 L[    2.402589] IP-Config: No network devices available.
9 i9 v6 e9 l5 P7 b- l/ m. K7 S) F
- j0 `$ W, G" k# V) F

* x6 l. M* j" U, L1,请问下,这是什么原因造成的?% X! K6 B' V  y  _" F; X1 h
2,phy模块 和网络驱动开发的过程 是什么样的关系?4 n# h  r* Z) a; z5 j* b
谢谢
# K* l1 w! v( z) G: g+ W
分享到:  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
' ^# H; |0 p- \请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

/ O% p* F  E( d用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,& K( o% S: N. Q- L% A% K
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?" ~. z$ E: z& Z
谢谢

点评

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
# f, s% d+ E  L用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

7 y9 o+ ]% `, `linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。: I+ X1 A/ Z9 K8 I; r% S
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46* K& q, g# I9 x3 [; q" K
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

% }/ O! ~2 I5 h" r& N请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?; M  w1 C7 J' \. i. M
在linux启动时,打印的信息是:- j7 M+ m+ U$ a6 c* d
EMAC: MII PHY configured, RMII PHY will not be functional,
2 w$ \# u& e, V/ k1 M% b, O& @- j3 }应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。& k/ }( A: M8 G' G6 `, ]/ z& q; B
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46! j' Z0 C7 B' t% j) H$ w3 y
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
8 [" S8 V8 |8 g$ `7 o, f7 D( A
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
% t/ r3 W, Q) I) b3 c* H; J3 glinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。$ ]2 t0 P% T& U# r7 A6 a
一般来说,板级的emac驱动都 ...

5 U  u' s2 f9 nvefone您好,有些还需要请教下您。
' B5 ~5 J0 O( v7 r: o- Q( I- q然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
& l) n! L4 k/ U. ?/ y# D
- }0 X( B& x, L3 ^2 @. uvoid __init davinci_common_init(struct davinci_soc_info *soc_info)# G. L' {# [; A, w9 S  m

1 d5 p$ f0 a) r1 v{
) d& {) i, v0 i
" V5 P9 j" I6 Y5 F9 n/ H5 P0 e             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
! M) U2 Z3 ]( c8 ]! a
$ B7 `* v8 ~  M}
) p# b5 m( {2 N9 J& \& P
1 N& M7 v  ]1 R) G* b//XXX 还是前面的
* H: f9 k0 {* p! G6 C[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
; g' m8 A& U9 [  Y[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
5 v9 F  ]+ u3 Z[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
$ C4 T% p- O: l3 h
7 o4 I- Q: d5 s7 A( I$ k) C在后面6 q6 l8 d" i5 v9 ]4 |1 ?( }

8 X- q5 _. y  f) z* g[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
, x4 X0 x0 D: G" F$ f. C[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
6 T9 Q0 v8 C! n! W: z: _7 x& E
# V1 ?6 _2 I  Q! o$ g2 E请问下这是什么原因?
# K# X& I" p# {/ p& ]
# d+ D6 L9 x7 X. Z& f+ R我百度了一下相关的问题:有介绍的说' e, J+ E; d, b2 t0 \
  _2 e9 C" q7 ~# B5 b: y% A* ^
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。- K0 l% c- Z3 L1 h

/ q8 Z0 F# l$ Q$ R" p建议调试在u-boot中进行,方便确认问题。
# H+ I: c; D3 {9 w1 l4 a, ^( b$ ]4 T0 t* L
u-boot下主要确认三点:
3 X$ T/ r- g/ D9 e/ w* F, Z
, R/ {! v% M) K9 E3 S1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
* p/ i) O1 \& [1 h3 H6 A0 R: f
; b5 ]0 t0 o; r2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
+ w4 T4 x% P) l( i3 Y" N+ Y" N3 r, n, h# V
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??9 a8 M6 N9 B$ R5 T& Q
* E  Q2 H1 Y  M& R3 a+ X% K
Linux下调试也是确认以上三点。
8 T/ ]: Y, h; L! T1 T
# ~( A1 H7 v- _/ J: u! _可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 17:11 , Processed in 0.044375 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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