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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
8 n( i0 L) ]" L. |[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1/ g9 U. M6 Z0 l+ H% E
[    2.107743] davinci_mdio.0: probed
( K% h/ h% O0 M2 l  z[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
- [! _, g7 t$ G) U3 g[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
8 B) h. O) C! _9 j6 u4 [[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown& ?  m% H$ m/ A$ `
0 @- q0 }9 n1 y9 a
[    2.137188] PPP generic driver version 2.4.2
+ U) h' N3 I/ {[    2.143236] PPP BSD Compression module registered# q( {* l  e. d
+ [' |- o( d8 ~: L" ~1 G; C

% G, A5 J- s( W9 L在linux内核中的代码应该是以下:
) J- x1 ], Z5 S( s' D* V: [$ M        // 注册mii_bus2 f4 N$ u9 Y" e4 \
        /* register the mii bus 2.   注册mii bus 2*/
/ {/ i, u/ o+ t0 u& Y        ret = mdiobus_register(data->bus);
& R% s; O+ W) j$ A# {3 y6 f        if (ret)
6 h9 Z2 ]0 x) |0 t% r- e                goto bail_out;
" u) b$ j7 q. S  a$ ?3 c8 z) `% g* ]' f. \) m$ Y+ s
        /* scan and dump the bus 扫描和转储总线*/' f6 L* t+ ^. _# q! C6 ?$ Z$ }" H1 a2 _
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {3 M- ^8 b0 c7 o) ~( ~
                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
& ?, O! {- A5 w+ a, n# _& Y) \                if (phy) {4 C8 ~; I0 M# s: e2 ]/ d; h6 Y0 \
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",% N# _7 [) n# c( P. y1 z
                                 phy->addr, dev_name(&phy->dev),
! ~. E3 _0 q0 t% h; U( h5 [5 p) p                                 phy->drv ? phy->drv->name : "unknown");
1 H$ n  `3 e+ A* F/ u  w& Y3 R; x                }
8 E1 l. g8 Q0 V        }6 @3 [, A3 V& d# s& p/ o! R
. U: v6 U! f- ?

  E8 K" l) _  `, s$ X最终在后面 网络启动有问题
4 Q0 ?7 o8 n% Y/ J* F, M3 u3 _[    2.387752] PHY davinci_mdio-0:00 not found& |0 S- I$ R0 d  a8 u$ h) Q
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
0 h- M6 e! W% A0 Z  U5 v# O/ R3 ]" o[    2.398254] IP-Config: Failed to open eth0& i9 ?9 G  H' @# j. W7 s
[    2.402589] IP-Config: No network devices available.4 [3 o8 V2 }1 C4 G2 U3 p" E

* E% n8 m6 {1 n* d0 o! Y  H% x; Y5 }2 G! H- L" |  R  K! _
: @9 Z9 r/ Q4 x+ A
1,请问下,这是什么原因造成的?4 s4 Y  l3 T' n: M
2,phy模块 和网络驱动开发的过程 是什么样的关系?3 U8 b0 h1 o9 O* K
谢谢) s  G- ]- R! t7 v* M. 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
% a3 J2 b) H4 y5 N请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

$ y; y' Z! [0 I! f6 C' N2 A用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,, w' m/ e8 D. _  ~. C1 s
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
9 |% W: u6 q) D, H+ W( i谢谢

点评

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+ W- f2 `4 F" k2 `8 {
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
( A: }7 e  k0 K# ~) G* v6 q7 N( ]+ m" E
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
, T# y0 {6 X4 o$ l一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
+ r% [5 }8 i1 `+ P/ t. Z, B* C4 ?创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
: B: G: l0 A9 ^- W0 ?( Q& W
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?. g( N8 X; n+ A% n# N
在linux启动时,打印的信息是:
: t6 V" U/ t( ]1 |EMAC: MII PHY configured, RMII PHY will not be functional,
3 L5 o3 x$ f% Y$ ?应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。8 V4 G  n. t6 r: E! ?) P
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:465 v, G0 l' {7 C) W
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
% {0 h) h. D( l- P' w+ \& h
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:404 _) a# s0 W- M! n8 U1 B2 U
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。/ h% J* G' f) |3 ~: F* C" t- F
一般来说,板级的emac驱动都 ...

! V6 x( n* I2 e: T0 B2 P' w5 Nvefone您好,有些还需要请教下您。
' j! E+ e: k4 `然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为16 ]% o% V0 r9 M& g7 c# d
) o2 K) W1 f  z
void __init davinci_common_init(struct davinci_soc_info *soc_info)
' E5 ]' B6 m/ X3 G
, F+ I4 `% @/ x{) ]1 M1 N2 ^6 P  j
/ U2 \+ w* |; a! i
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口9 t" s" x2 _& N

: V. f1 t- h8 A0 d/ Y( F}' Z! c9 `0 F: ^4 }  {

/ B! _# G$ X% x# @1 `( g//XXX 还是前面的
! A# _8 E/ T# a0 p, z[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
/ }; L. G! A2 R" M- X[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
& w4 x; q3 M& \/ I/ f2 e[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
. [* J8 G2 }2 J. e* w; [; ~: X
5 w$ T0 |& V3 y/ O8 g: R在后面1 r3 O2 w: o% e4 |6 h! H
  u2 H1 U; W6 t4 P* p! G% q! V
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
) z1 D/ O9 I7 Y( q[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
/ u' S' O* C& G! i6 s6 P% W; q$ h; B6 E3 c. e" ~
请问下这是什么原因?& X2 n& p5 Y/ O' D7 b; ^# s, t& o

  b% D& y+ F( O' n/ L) l, t: C我百度了一下相关的问题:有介绍的说
9 K& Z& p2 f8 z5 C- y" X2 Y8 `' V" {
5 H8 h: W5 C4 v) y/ _% W由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。$ [4 K! W$ A/ C$ r
; |# R! M! T; c9 t  U1 i6 X$ V! p
建议调试在u-boot中进行,方便确认问题。
" c( d+ B* I( X5 U, I
. b0 i' n0 t6 g; _5 }' Du-boot下主要确认三点:. N: N6 L1 k; O6 y* ^

+ u% y2 ?$ W  w( B4 P5 R1 t8 ~% ^1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
+ I0 L- O$ @1 V; A
- \  j/ W6 f6 V: i$ G" y2)Pinmux configuration to support rmii interface                                //这个我应该已经满足+ P+ z* `; x, |9 O
6 \: k1 T. ~/ I3 a+ b# _' Y, L, f4 Q
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??) O0 n5 l+ w4 S* Y$ H

# z% |9 X" A4 Z2 h! mLinux下调试也是确认以上三点。
2 |4 ?0 D, @3 K) s/ f
7 I( F0 N' M1 J可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 02:04 , Processed in 0.045886 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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