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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题* g; n) X1 [- w( }  r
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1# m6 Q& N7 X7 O8 Z: O
[    2.107743] davinci_mdio.0: probed
% |& f! f4 ^% Q1 y0 ^6 N[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
! m3 _. z# d8 ?! L9 T[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
+ a' G  o* I$ Y# R" }7 i3 o[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown+ M& F0 r) |" J# a' ~

9 I# o1 {# Y2 @* N% o% D# y% a: R$ d[    2.137188] PPP generic driver version 2.4.26 B' c1 N, s% @" |% U' [
[    2.143236] PPP BSD Compression module registered- V/ F6 E. S0 u' h3 X8 C7 W" D3 f" X
$ f# k7 N- y# _9 s' Q$ z

5 d# L8 C; l# K# S: Z0 @8 A7 V. {在linux内核中的代码应该是以下:
+ ]4 K7 @& \' b        // 注册mii_bus
( c1 F3 V! g: q4 f& ~. j3 f        /* register the mii bus 2.   注册mii bus 2*/
- P# G1 N7 p' R' s' P        ret = mdiobus_register(data->bus);
9 {4 Z8 r1 m; \9 f' ~8 p6 K' x        if (ret)
$ [( J+ L  L2 B6 E6 I/ b5 a. r                goto bail_out;
! @, J- u# P  S$ X) m. r& e+ r+ n* {- D# V8 c' k) Z6 R
        /* scan and dump the bus 扫描和转储总线*/0 C7 e2 ?! F  E1 Q* a' G; O
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {- E6 w1 w& f9 \  Q  c
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据) y' Z" t2 r. W* g) I) G
                if (phy) {
4 y- F1 z% j& B3 N8 {                        dev_info(dev, "phy[%d]: device %s, driver %s\n",' b/ K  G5 Z( ]( G8 U; p
                                 phy->addr, dev_name(&phy->dev),
0 t* M% z, ]4 k4 @; s0 t                                 phy->drv ? phy->drv->name : "unknown");
: [+ i1 Q; L2 E  ~                }
) x1 W3 m7 {8 ?1 w( O        }
3 l- v9 y5 V; J( Q
( {- D( i2 ^6 o9 O( k
1 v1 w6 {2 F1 F6 O/ X最终在后面 网络启动有问题
: w1 _$ a2 S4 z/ O- r& W0 g[    2.387752] PHY davinci_mdio-0:00 not found# f9 F/ h% D# I; N6 V, L: |$ D$ p
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
. S; t6 I  g# z9 L) d$ `[    2.398254] IP-Config: Failed to open eth03 `1 h0 N7 T$ M( k2 d: S1 y
[    2.402589] IP-Config: No network devices available.
4 v2 x" }) q  C8 C1 u" {) a
; c! [% [6 O( L# c$ p5 P
7 ]+ I/ k8 {+ W6 r  A0 ~& D
. `8 K/ D& V' {, f* |
1,请问下,这是什么原因造成的?3 `7 }( M. ?' K& \- e
2,phy模块 和网络驱动开发的过程 是什么样的关系?
# k$ E9 s) P7 x7 j谢谢) v# e3 h- I, v# X/ R2 u6 O; m# d3 A
分享到:  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
6 r; p' A- |1 k8 t# l请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
: |7 M" q/ [  c  m* j. T
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,0 _# m. E5 }, L5 I8 [" a
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
/ {' I: z. \* Q- h谢谢

点评

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

1 ^0 j+ c7 L/ E* ?; t* }linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
8 q* C& E* a" A- x; f( M4 _( }7 b一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
6 n% E# b. f" J; |( D创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
$ ~" d3 r5 o0 Z  h0 t: M
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?( C9 M3 s9 P3 v0 y( C, t  G( r3 s; I
在linux启动时,打印的信息是:4 |3 S  j# n1 r5 t
EMAC: MII PHY configured, RMII PHY will not be functional,, ?3 a1 x- s8 |( d) J/ P  C
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
  B5 p. W4 N$ ^: i. h1 J谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
. H8 l) h/ _3 i/ M; G$ Y创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
/ r, c, R; G- ~8 {5 z' t  a' S
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:400 R2 o8 ~- D! b) [0 K
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
% _% {2 z  n; Z+ c( J' r, e一般来说,板级的emac驱动都 ...
3 P+ q% x" p% E8 U/ P! Q- x1 o4 e
vefone您好,有些还需要请教下您。4 V* |; w; t) m! r! Q7 b6 H
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1( G2 ~- X3 S5 f  Q5 E5 L

( U8 h  K- e2 }0 h6 \void __init davinci_common_init(struct davinci_soc_info *soc_info)/ y" h% G3 p8 w6 m6 Q
0 |( E- J0 b; s" D: ~* h
{
5 b9 N8 E$ H0 C( j# ~
  r6 b+ G; [3 Y8 h/ m             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口# k7 [* H( \$ z" Z, B

2 W6 i+ F" `0 `0 N) Y' y}! p$ q% J5 ]3 P0 A
7 L- m+ k0 A; s. i
//XXX 还是前面的" t4 B; g6 k+ n: B  l  \8 x) `" [
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
( r6 U; ^6 N+ [[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown  N: @/ r( v1 T% d' `" x
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
$ G2 M4 N2 R, Q8 }4 N/ z
+ X8 l7 R* n) U+ n' e: \4 M在后面
3 i$ v2 E* |' k" ]2 W! F* R1 j& Y! S4 s7 A8 L
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
: t# ?# Y+ u/ p) n3 v[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:001 z" c6 j5 q. m
" Z* ?1 H& W; v: _
请问下这是什么原因?) m$ q& c6 Y" I5 y

+ ~6 e1 d* a6 Y% g. R: l4 b: \我百度了一下相关的问题:有介绍的说1 D( E( ^- e* ^

1 M3 l8 ?6 V) \, s  S: ^8 Y5 }由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。0 A: @& _' i' ]: r. b2 z8 c

! P5 V- y3 H( S6 m* f% p# `建议调试在u-boot中进行,方便确认问题。
# E+ E( t( _& g8 J
7 T4 I3 z' O" F# n2 h5 Z& qu-boot下主要确认三点:
5 n1 Z# X& R  L' c
% F- P0 |! J. F* }& q8 M+ g1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作- |' H/ S: R$ N# E4 f
; P1 K1 V& a" V8 n/ D0 C3 z
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足/ j  I% c6 y  B5 u2 e) q! u
+ B$ w" v/ R* {
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
% m* F2 B2 t7 Z
9 T& t: o% E* j$ I+ JLinux下调试也是确认以上三点。
* i# D+ o+ F+ ]; j- r& A7 t' G1 J0 w2 o
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 03:20 , Processed in 0.041122 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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