嵌入式开发者社区

标题: linux 内核启动过程中网络驱动不能启动的问题? [打印本页]

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
- O/ N( q, ?% i[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1" y7 N  x- T! j7 v- r
[    2.107743] davinci_mdio.0: probed
1 f5 s" g  a) z0 [9 e' R5 L+ M1 T, v# E[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题7 u" d3 C& A, ]# C0 R8 N
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown3 |3 P( e, t# o  R
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown- L; O9 t$ L0 b* V" e7 _
$ _, Y) I% m2 c' r3 e: a- C) J
[    2.137188] PPP generic driver version 2.4.2
2 ]% S, |- x0 N! e[    2.143236] PPP BSD Compression module registered( F; i9 v9 b/ [' I" r

& C; A2 D8 y* T/ d% `4 N% w* K0 v0 T) `6 W9 y
在linux内核中的代码应该是以下:# O" w0 s! L0 o! m
        // 注册mii_bus( J  x- w5 x' z' e; B& j0 I
        /* register the mii bus 2.   注册mii bus 2*/
3 x. ~' V2 ^6 {8 O; u        ret = mdiobus_register(data->bus);1 q( T. c9 r; D( `7 _& J1 `
        if (ret)9 H! O2 v" Y- w! I3 E$ W: U% ^
                goto bail_out;  v2 r( {5 ]% r( O( z$ `/ u% \

1 G7 k3 C2 P/ |/ @) n0 Q: d        /* scan and dump the bus 扫描和转储总线*/) K2 ?/ v' z; x9 Z
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
$ T1 E6 a% p3 j9 m                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
9 _/ p' ]  f5 G! u5 Q                if (phy) {& r; X4 ]) b2 k6 Z: T; H4 q
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",; }1 U% D& g% U1 B& t5 `* Y1 O9 W
                                 phy->addr, dev_name(&phy->dev),9 ~% V* \) i. Y6 E) ?
                                 phy->drv ? phy->drv->name : "unknown");3 U5 z/ Y+ r  D' H
                }* n9 s, [0 M. r/ @) M
        }5 G; o: x1 L0 q6 a3 A

) S$ x  B, w9 i2 w$ `
3 r# z+ n9 n* U最终在后面 网络启动有问题
9 i8 J6 r" @  v  w6 l+ g( M  O[    2.387752] PHY davinci_mdio-0:00 not found
$ o  L7 R, g. @/ i1 h( W[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
6 ~& `% s4 m% U[    2.398254] IP-Config: Failed to open eth0
  @3 {) f4 Q# p, Z  Q: G) `[    2.402589] IP-Config: No network devices available.
2 x, x3 c2 q6 B# r3 z
$ ~, D5 ]4 g* ~# T$ G& c- t, e
( g$ @/ h( j& Q+ ?, e8 V
1,请问下,这是什么原因造成的?% g; ]2 e6 Q5 I: z
2,phy模块 和网络驱动开发的过程 是什么样的关系?0 b/ m4 m; B3 k& E2 H
谢谢& J( ]6 X6 G; T( Q! n6 l: R

作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:34
- C- d/ r: r$ N2 l请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

" E( h9 F/ B& q; I! t6 C2 V! _用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
9 S7 o3 A: P1 D, ]请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?# ^; {- s- W: a! e
谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:33
. L7 i3 M: r2 Z$ B$ _1 X用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
. ~& m% J+ ~8 V3 O& y: h
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。+ x# H6 u) T4 ~+ s/ x
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46
' n- c' n$ T' l+ W创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

+ m1 |' U8 g2 A请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
5 {+ z! \+ B8 Y. _* f在linux启动时,打印的信息是:
! S1 |; ?; u* h; ?' u% fEMAC: MII PHY configured, RMII PHY will not be functional,7 _. D( V: e9 f& b
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
, M& R! S0 J$ M* i  o5 ]3 n9 M, C谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46
4 i1 R+ A: k/ X- d创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

! k% [1 t9 z' p! G7 W, S我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40
: M' \2 \8 t5 K  X; ilinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。7 N: Q) A% S( j, \$ Z2 P
一般来说,板级的emac驱动都 ...

7 b( ~. u0 J) H/ }! D7 r/ Yvefone您好,有些还需要请教下您。
2 P3 p, N! i5 `- w" p2 x/ i然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
* @) m: C- I3 o$ `: h$ e- b& _. [1 s0 c( [
void __init davinci_common_init(struct davinci_soc_info *soc_info)
' g- Z# ?6 g4 a& G, O5 p6 a$ E) R
2 C  o$ A/ d  o! Q- U4 M{
" b2 W7 P( o, H' S7 J* Z- y) j2 p" ~( X# y8 K' D# F8 y* F; [. c
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口5 z: I" n2 v) L; H. B' X7 D, p' _
5 P& I. t9 z5 V/ x
}
9 u" ?7 P. t2 ]6 s+ x+ o* p3 A3 @* D3 p! f  s
//XXX 还是前面的
+ D5 V5 `" P3 d, K; q[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
, \/ b+ X6 e; h8 e& F# O[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
5 c0 @0 v; {, E! Y7 O% y. t' c[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown( p/ z* B: O  z( U+ \
$ E+ p- \( p5 Y
在后面0 x( j4 }1 A7 K8 V* U3 P
- q: N3 b0 y$ C4 d$ F9 p/ k% T1 Q' {
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了9 }# v1 ^) i( U1 [( B
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
/ F7 j! H: t* b# ?3 y
9 l0 v6 L  v( Z; m请问下这是什么原因?* y3 w3 x* f2 i
. i; C1 n" U. p
我百度了一下相关的问题:有介绍的说
" U, F4 B/ U* P, G/ u+ ]) X0 ^7 }. [( L2 G: b
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
( N$ U# c# S; U% P3 j
( p. z# M' A' [& ?6 V建议调试在u-boot中进行,方便确认问题。9 Q5 c+ T- x; T2 {$ g7 i5 b2 r- A# n

# w* N* P8 p6 E4 Q; ^5 ju-boot下主要确认三点:6 j2 T3 T8 k5 }& V; Q% g
) H$ c  L0 I' j
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作8 e7 i* G0 g1 s' ^& t2 m& d
- V; R+ \7 |# ^$ A
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足8 \# {% J+ G# S/ Y4 M3 g

( |) p& R; E/ n3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??$ E- a0 P! {# J2 g# \+ J- }. w
  m) k& _. B* O" X( ]: r5 |- _
Linux下调试也是确认以上三点。
) o2 C* v  K6 T; p6 g1 S
# A# j  Z3 _( }0 N9 M可以指点下吗?




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4