嵌入式开发者社区

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

作者: 小石    时间: 2017-4-13 09:52
标题: linux 内核启动过程中网络驱动不能启动的问题?
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题6 _% Z7 `5 g0 n( T1 v3 e3 m( w
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
% l% h- Y9 u5 e[    2.107743] davinci_mdio.0: probed
: y) I0 D9 J. S, b0 i1 S2 g% u0 S/ [[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题& D  K, }/ a1 o  e
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
6 t) O% D2 L& Z9 B+ y  b  y9 [! t[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown. h2 g$ P8 @9 N6 v$ v

& K/ |5 a+ K* z# |' \6 n[    2.137188] PPP generic driver version 2.4.2) `( k# Y, w6 L, k& h! i
[    2.143236] PPP BSD Compression module registered3 i# P' [/ L4 h4 C
1 M2 z1 ~2 F+ ]

3 O5 B7 J$ s& o) t在linux内核中的代码应该是以下:
; Z" d+ N* g, P$ w: t        // 注册mii_bus2 T: @9 I. r  l+ _
        /* register the mii bus 2.   注册mii bus 2*/
; ?# {0 w; E' T0 \" J        ret = mdiobus_register(data->bus);* b3 Q& k1 p# x/ i; R$ O; a4 i
        if (ret)
# T4 b4 `* B% d! o4 p                goto bail_out;
3 a5 u2 r1 _+ C5 @/ |* H1 z: `. ?
$ r1 t1 W5 L  d! h9 G# H& l7 ?9 ]        /* scan and dump the bus 扫描和转储总线*/; v% X' Q( J: _/ b" q* e* j
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {5 b3 s; M, T! K  L0 _
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
. ~( V  T+ d. w- q; S                if (phy) {: K0 u4 \; K$ X9 F" c; h* Y, G
                        dev_info(dev, "phy[%d]: device %s, driver %s\n"," o. y/ P) a7 ?
                                 phy->addr, dev_name(&phy->dev)," K) A  V8 }+ T6 h7 [
                                 phy->drv ? phy->drv->name : "unknown");. q7 \0 j' i& o
                }4 G. Y; @( k5 j7 q: G0 @" `
        }
: X2 K9 p& ^3 T0 o6 y' p
$ p* p. L7 i( x) O
  v5 q2 S; }0 |1 e, P最终在后面 网络启动有问题& |! B9 b- ]2 k# p; o% L
[    2.387752] PHY davinci_mdio-0:00 not found
, e3 r0 m2 ~  o$ W( ^8 U& S4 r. F[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
7 w( H7 \5 T, ?[    2.398254] IP-Config: Failed to open eth0
: `& p+ c; ~; f: ]; x[    2.402589] IP-Config: No network devices available.
4 I% c/ x9 Q" i# `
5 m1 G" p, F- U5 M  k2 S* P
$ a0 y) `! \# P3 l* D% o: j

, g  \+ e" ]1 Q; Z5 M3 A1,请问下,这是什么原因造成的?
' K% T- [- p1 K2,phy模块 和网络驱动开发的过程 是什么样的关系?5 V. }# p3 |# u3 ]& n7 ^( a
谢谢
; T, q( j* X( E
作者: vefone    时间: 2017-4-14 08:34
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
作者: 小石    时间: 2017-4-14 09:33
vefone 发表于 2017-4-14 08:346 Q5 f2 y+ w" d2 b* R# ]! K, a: C
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
$ v" k! M. x/ M& n# X
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,/ a7 r$ c) g8 G$ q9 X# P
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
  A  O# ]& f; M5 |. C! P谢谢
作者: human    时间: 2017-4-14 14:46
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
作者: vefone    时间: 2017-4-17 20:40
小石 发表于 2017-4-14 09:33. H7 Y5 j# G( }; l5 f
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
5 E4 u! C5 F3 a% }! a0 R7 K; N
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。, R- f( ~2 G2 Z/ w  G' O+ E
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
作者: 小石    时间: 2017-4-18 10:35
human 发表于 2017-4-14 14:46
& ^/ e) b9 }2 h' ]: d, S; i9 a创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
) a' |6 _9 p/ ^1 j. R
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?0 p6 W7 ?6 A5 [0 g3 G- y
在linux启动时,打印的信息是:
% U* P6 E0 h4 d/ B* [* \. C0 t  UEMAC: MII PHY configured, RMII PHY will not be functional,
5 Z( ^3 f. c5 |' A/ {' D* M应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。$ q3 C) _" M( F" P& B1 i) S& |
谢谢
作者: 小石    时间: 2017-4-18 10:36
human 发表于 2017-4-14 14:462 ]1 m2 J% c1 U" K( v; M
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
1 e; g' Q: B% [
我已经将 emac-mode修改为rmii了
作者: 小石    时间: 2017-4-21 15:31
vefone 发表于 2017-4-17 20:40$ g' N+ C( i7 q! g5 T, _
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。0 @. w/ I  O3 r& S; K7 M6 H$ b+ H
一般来说,板级的emac驱动都 ...
( p% ]3 n1 M. g. Y
vefone您好,有些还需要请教下您。" H7 z/ `1 g  J$ }! w
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
/ c! ^# R! o5 d/ A2 a& I% S9 m! e0 x( p! x# d: }+ L, C* ~$ z) G/ v
void __init davinci_common_init(struct davinci_soc_info *soc_info)0 P4 `& b# O5 x' M( {& a
: E+ I/ s3 n- q1 d
{  y" d6 n) j5 t' B; i* s

! J: A2 F4 N4 _% K, T  i$ ~( B' J             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
- Z; S" l6 a8 g) r
* E: w- J: f( W4 u- o3 _8 y$ b: y9 y}
% C) r0 n1 |5 M5 v2 I
/ k: E% j5 I8 \7 w. n//XXX 还是前面的# `/ w8 t' c# @. C1 W, r6 a
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
# X* w7 T' K; ]9 c# P9 H# W4 T[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
( F' e# `2 T9 r[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
" A; A  V" P) w4 ?7 {
& @  C% J; o: U$ h+ z5 M4 o) p* P在后面
2 a( @- K+ P( ]3 ?: ?. s
+ [0 u3 G1 j# D$ l+ J[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了: l, t# a, o, k' v1 B/ [3 `
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
% k" v5 S4 O# D: i
2 _9 a% j; @! k3 D2 r请问下这是什么原因?
$ q: W/ R- z: c2 E1 c3 \9 H. n. x0 ]
我百度了一下相关的问题:有介绍的说! q. @! u9 u& g" N0 K

: \4 |# k) `+ p( m+ k" s5 @由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。9 h# |5 D# ]) y  ~5 g) l8 G
) H" J  ], T6 X. M9 d% |6 D6 b
建议调试在u-boot中进行,方便确认问题。
5 A# }# a  l$ x3 f2 p, m4 ^  V
& I& a0 ?2 E2 @& M6 B: A" Hu-boot下主要确认三点:
8 Q1 k8 ?6 C% k, P) O
" A4 Z1 L" y/ i( F& B1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
) p0 p$ K$ k! b3 R; t# f9 E' h, ]4 Z4 K0 V2 ?7 j
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足5 v1 t+ z. S% R* M
: p( v( w: m% y% J
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??9 j3 C, F1 f: c8 r& A

0 @& g, ]$ U9 D( m" G5 @3 v/ FLinux下调试也是确认以上三点。
  L% q$ @7 b9 U* O: e$ u! |' ]1 }" c3 k4 D
可以指点下吗?




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