嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
: X: B8 _3 T* i( T[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff17 T' W. i' l  _6 O5 V2 a
[    2.107743] davinci_mdio.0: probed
# q; a8 |! Z6 Z( P[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题" \: ~5 r" t6 I& T
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
. G, w8 A( Z/ a' N+ \[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown- B- `- e, `/ t8 A% M- c% d4 A

- J8 Y1 Y6 G0 j* S[    2.137188] PPP generic driver version 2.4.2
0 r; i- ~) P3 e6 H[    2.143236] PPP BSD Compression module registered
! C! [( V( `$ |0 Q9 r4 n& x$ L6 ?$ b" r3 ?
" m* L' j( [% Y& t
在linux内核中的代码应该是以下:1 q) C7 n) }0 B
        // 注册mii_bus" r9 y8 k% Z' N0 h( [
        /* register the mii bus 2.   注册mii bus 2*/( J5 k' t) J# K* ], A
        ret = mdiobus_register(data->bus);
! ^. U0 H4 Q: Y6 `        if (ret)
" x# i: @0 c* [+ |                goto bail_out;
: q  p' Y. a8 r; K0 I: X6 s; p! S5 T. o8 D' W8 }1 Y; D  G
        /* scan and dump the bus 扫描和转储总线*/
4 S2 Q* B3 g( g2 U        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
3 h+ C+ g2 H9 Y  W) i2 [) v                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
( O, u" U2 l0 e; ]                if (phy) {7 E; ]0 l) h  N! R+ ~% F2 ~
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
- W1 j& N  t2 `# f                                 phy->addr, dev_name(&phy->dev),$ Q; W, H0 A. h# F- R
                                 phy->drv ? phy->drv->name : "unknown");
6 V' K# ^: |/ P6 ~" Q1 U: P! K0 e                }7 T- T1 f2 r6 y1 t
        }; T. Y9 f# o- u+ e2 N

, l, N& p0 q$ e" l6 K
  j# I% [$ b% _  e6 t" _6 E最终在后面 网络启动有问题! U9 {7 Z3 c" J4 k/ M# p/ q4 m
[    2.387752] PHY davinci_mdio-0:00 not found
6 y# N+ s4 R' W, D[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00/ }. C: l# T. |, y
[    2.398254] IP-Config: Failed to open eth0
+ O; c# J$ f% r; t[    2.402589] IP-Config: No network devices available.
, \: C5 V- i  q: \2 |' x6 m, @. A2 d% o5 R, M: \  s$ e9 ~" H& s7 |5 X
$ Z( U  b% \7 Q

9 y# m+ O, f) V+ b3 L* ~) J1,请问下,这是什么原因造成的?+ m8 q3 s, O" x7 ?* s& V
2,phy模块 和网络驱动开发的过程 是什么样的关系?$ T* J. h- `6 q( q
谢谢
- E" ^% c  U1 p% E
作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:34
/ Q: F6 j- @1 z# ^3 i请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

$ v) m; D) J& Q8 V用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,- }% U& Q. `1 X
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
5 j* Z6 h# ?: C谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:33/ ]( Q9 e  p9 m
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
% L  R! K* C4 ?* V3 @
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。0 w5 I+ A3 I7 s5 @$ Z( u
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46. U# j& r( D" a5 W: U* Q& z
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

1 a( V# R# Z+ @! I" V# L请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
  v8 V! e: L5 K- T' ?4 E0 M, f在linux启动时,打印的信息是:6 p4 L( @- ~5 X4 N$ r) j- C
EMAC: MII PHY configured, RMII PHY will not be functional,
; s( ^" r/ L) D% `8 C应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。0 M7 d/ K6 @5 Z
谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46
4 d& @% l3 {, z; I) v6 |创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
" g. V/ L  H/ {
我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40
! X9 h. @. M8 L* V2 alinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。; p8 R$ c- f: ~, u9 Z
一般来说,板级的emac驱动都 ...
3 K5 w& k6 n8 A
vefone您好,有些还需要请教下您。
0 W+ p% ]  }5 D8 q3 x. y; x- ?然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
* x+ ~! o% I& L+ N* d) G( D8 X* D) g. G) a0 A! Z# \+ F2 R1 [. F
void __init davinci_common_init(struct davinci_soc_info *soc_info)% B$ S. z% _: b' ]0 \2 `) e

) N" O, J' j. `0 K. G$ w$ ?{
" S5 ?5 N3 ^6 h5 ]& e% m) X: \! }
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口# J0 ?( U& w. A" E0 g
1 `) g2 [' G+ ~
}" T+ u) z9 z) q7 x! t# s

! ?7 ^, e( I" v4 S. ]6 {/ q//XXX 还是前面的) {1 Y6 ?8 i' f8 `+ i0 X4 P
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
  D6 ~# j! U- ?! t* h" r[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
7 X7 f+ s) x8 i7 H[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown5 }8 `& _/ b1 i: `  r/ u
4 c/ U. p2 _+ ~4 W6 K9 i( ^
在后面
9 x4 D% J; k8 M- q
  M0 j' {' V9 F7 t/ b3 g4 h[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了6 X! ~& h# ], ^; n1 f; U, O+ O
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00" u; |2 r- n/ T% U, J7 F6 N

7 y6 I( t$ {9 f$ s0 R请问下这是什么原因?6 d, I; _8 i+ Q  s0 l

0 y' g/ _2 }# F: E9 p: z% U2 s我百度了一下相关的问题:有介绍的说: \7 D! R% T) \. q! H

; B4 l( ^9 n3 f$ e9 |由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。0 h9 L" ~8 N: T# `% {# ^

/ e  ~5 k$ m, ?. G; K) D建议调试在u-boot中进行,方便确认问题。
5 k2 ~* ~  ?: T/ s# P* A0 e3 Y4 Y) n* R, L7 {6 W, V. U; g: H
u-boot下主要确认三点:  C1 @9 w- q) O
9 q9 M* Y7 i/ z! b0 J# D
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
- w1 v$ B! E) U
+ o: B, r' T0 G1 A, j0 O2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
, l1 S3 g2 c9 r/ ]9 O6 E0 i4 H2 N+ W( h" D, @9 C) Z
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??' T4 b# X- W% [% t4 F! b7 w+ C
0 x8 ]+ X' Q) C& d, M" P
Linux下调试也是确认以上三点。  n  L' J. {# g' j. S9 W

% g% j+ o' L' N( F" ^7 v可以指点下吗?




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