嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
! f# s& K$ g+ O[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff14 l8 N3 p# i" q. z2 {
[    2.107743] davinci_mdio.0: probed
4 B, Z! A, o  _4 a2 }% K7 b$ ?[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题7 ~' f4 E- M3 u3 x6 h; w2 b
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
- w0 y* T. W# [3 ][    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown( K8 B2 U& ~2 l8 |
0 u2 N3 R+ i' s9 K& b& X
[    2.137188] PPP generic driver version 2.4.2
8 C7 w. x& S4 @. x3 C[    2.143236] PPP BSD Compression module registered
- d* A% v* L" d) R& `9 t- ~6 u' L/ D) m0 U6 \6 N! p! E

, M% w% m! b$ a! T" j) U8 |' |2 y在linux内核中的代码应该是以下:
  I" \" C8 @  B        // 注册mii_bus
4 p% B3 g3 Z+ w" @        /* register the mii bus 2.   注册mii bus 2*/
/ y7 H- z# M; c& j$ N        ret = mdiobus_register(data->bus);! s) g2 E% F: G( k4 ~3 {
        if (ret)9 w: }! c# ?' M, V7 d
                goto bail_out;
! s% h2 h) _% K9 I; F( k( K/ l- i/ U' {
        /* scan and dump the bus 扫描和转储总线*/% t% x0 n- e- ~/ I6 w  M( o
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {6 ]8 A- k- w7 f' t# m
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
4 j7 z( W- r- q) w# T+ o) C                if (phy) {, m  u- k' G0 p* l- x6 p% D
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
9 Y* q7 ~4 v3 Z3 H0 g. t3 o                                 phy->addr, dev_name(&phy->dev),, _) q: V0 H3 {
                                 phy->drv ? phy->drv->name : "unknown");/ r+ g$ R, n' g
                }& g, C, @' I  d
        }
$ s0 A4 x( k+ v6 T% n: k# v/ b$ j8 }* U: g) {" i7 _' t

. Y' x" [) b) u: m: W最终在后面 网络启动有问题
. A1 _* ]' ^* `( T# W, ~' P[    2.387752] PHY davinci_mdio-0:00 not found; Y0 ~2 }# v3 M4 R( J* q8 l
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:007 k) V. v# C! }+ T; ?/ Q
[    2.398254] IP-Config: Failed to open eth05 S; |; ]6 o1 u- E- c
[    2.402589] IP-Config: No network devices available.
% r' o% F4 d1 \) g0 `& C. g0 _" w- n7 B+ X( R9 Q
5 ^6 e5 J0 R% I3 z

+ \/ A" w2 T4 {- M4 d/ w1,请问下,这是什么原因造成的?( v+ T8 d2 n  `& ^% v0 X: l
2,phy模块 和网络驱动开发的过程 是什么样的关系?! K- B1 _, z# p3 @8 Q5 i
谢谢
3 i3 O; s% d. n. z7 n+ r
作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:34
5 w& [# {/ J% M2 K2 \5 S2 s- j! `请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

8 h% v; N. l' W- ?5 e# E8 N用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,, v$ W. }* |- n
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?( F9 x/ ]2 v; M5 |- s
谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:33. \2 A0 X5 E. H7 M7 Y
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
& @  |/ z% ~, x0 N3 w* Y
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。8 h$ a/ A9 r& O- e- V4 p
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46! u5 d! O* Q5 {& x/ J! G# Z
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

2 Z& ^- p" ]: u6 @- u  T请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
0 C* E* c4 {& e+ U7 H& [/ Q在linux启动时,打印的信息是:$ G, @1 i) J, E4 |
EMAC: MII PHY configured, RMII PHY will not be functional,- `& o( |& [  l  }- B' A2 @: g
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。6 I" L2 U7 x) b" k; t
谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:46$ j4 G' M! M) A6 a: i+ j
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

& x* Z$ b6 S6 K; Y. d0 a1 e1 f& u0 n我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40
/ j0 L$ J7 w) x; S1 T9 Olinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
9 Q6 D2 Q8 z  x9 f, o一般来说,板级的emac驱动都 ...

& ?5 O$ C! S9 s* y% A7 O1 ?vefone您好,有些还需要请教下您。; M- R8 q! Q/ r7 n0 O
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
9 E& f" j! j$ l' S; f+ ]
0 Q, B* H  u* @1 b( H4 w; ?void __init davinci_common_init(struct davinci_soc_info *soc_info)8 s" h' X& B" C8 Z

' R2 v2 d5 X6 E{4 I5 k9 H' I$ F& p% V3 n
+ r2 C0 `8 Z% h
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口4 d4 A& M2 C6 c( _. Y* l) _( Q

# a6 j, s! j0 i: E& A}% b7 P2 O: I7 D% [6 S

. y9 V' K) Q- M" ~//XXX 还是前面的# c! X% j! |9 K- J0 H" x  V
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
! X1 n8 \* s& A+ O[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown& k% g2 k' `: u" A4 T
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown" }( l- W0 i7 f9 O7 }) c
: r& a+ N5 Y! i1 r
在后面
, Y  ]3 s9 j+ y
3 P3 c" W; O/ _9 a# C, E[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
5 Q) R3 u; `4 v+ J/ E0 e9 D0 A[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
; z. H6 W8 z& b* @
2 Y4 @( m5 e- j7 b8 V  N( a请问下这是什么原因?
$ S! J1 u4 \! D4 k% L
, X: l5 A7 u+ I. o$ {8 y4 O我百度了一下相关的问题:有介绍的说9 s: w; P9 {+ B- L7 F4 u
- t: v3 k# D8 x/ t2 E4 m6 q
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。" G4 D% A$ q6 |- g7 G
! L: e2 K7 w" i; u1 y% @
建议调试在u-boot中进行,方便确认问题。
2 m! B5 o& N$ {. i: z% Q3 B4 r/ V
$ u0 [1 C" _4 A5 r$ I6 l9 H+ ru-boot下主要确认三点:8 c" k# ^3 D+ e0 m- u5 O7 U4 R

  d; h/ @% A( x6 z! W1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作) [# y. t$ k1 h" j4 t
: R1 C) j5 O# L+ [$ Z, A
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足6 F) L4 }+ i9 `5 b" y% M
* l* e& y, I2 j5 m: r
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
- H! {% b1 A+ ~, X3 E, l& m# \  r' W% Z7 B% v7 l
Linux下调试也是确认以上三点。9 W4 l) b& b0 C! u$ }/ t7 v" l
/ Z$ m: j& X3 ^0 J6 v
可以指点下吗?




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