linux 内核启动过程中网络驱动不能启动的问题? - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题. C2 T( O: l$ i  k  T
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
* `) y4 Y/ e1 B6 q. M[    2.107743] davinci_mdio.0: probed, C7 v% N: g7 z4 s/ I9 d  R$ H5 X  Z
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题2 ~9 F/ S9 z. ^9 U( w0 }2 N2 [
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
5 c8 r2 D. T# p8 v: M9 z, {# G[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
$ Y' J6 D: z- ]8 s- s( q' [4 n' W5 p; G, S9 `; X
[    2.137188] PPP generic driver version 2.4.2
" O; q# h+ T' w[    2.143236] PPP BSD Compression module registered5 T9 f) Y4 D- k
" g; L. m. N  _! V5 I/ [

3 L' M! M$ q$ U在linux内核中的代码应该是以下:/ J5 B0 S7 p6 {" U
        // 注册mii_bus' Y2 Y+ O! a/ X, `7 ]( X* f
        /* register the mii bus 2.   注册mii bus 2*/4 ^$ }0 B9 h$ b5 e
        ret = mdiobus_register(data->bus);% e. z5 i/ {9 U
        if (ret)2 W( P# {% }0 ^, M$ a
                goto bail_out;
7 h# O/ {; {$ k& p! ^* c2 n
$ ^+ |- z  u+ d5 z        /* scan and dump the bus 扫描和转储总线*/
* I7 T0 B' }8 b0 Y        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
5 d/ O, c+ x% |6 b, w                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
* ?) V0 R$ A  s* e                if (phy) {- d' Y) u' M2 R$ i+ R7 S) x
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",% }! r; {. u; E# i1 \$ `; d
                                 phy->addr, dev_name(&phy->dev),
+ i! ~. a4 x# K/ r: b* m                                 phy->drv ? phy->drv->name : "unknown");) ~* ?) K: Y6 z( L; D  k& g, W
                }$ ^! |% F; ^  P. b2 e1 R
        }
8 k/ D6 [9 f, i( D3 r
& C1 G! e- Q1 V* p5 |
. t6 Q+ }; c! H最终在后面 网络启动有问题
% c3 @  z! S9 C4 h6 W[    2.387752] PHY davinci_mdio-0:00 not found4 w+ y% m# r1 V! P6 }2 Q
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
, |4 c' L, Q0 }3 ?0 R3 }[    2.398254] IP-Config: Failed to open eth0
8 d/ U; F% T& Q[    2.402589] IP-Config: No network devices available.
0 x% R5 a" g  c3 S$ D7 O# m+ @1 V) M$ B; S) `$ q" p0 h
+ A; v; t, S) f+ D. `, X

9 J- B2 Y( C( d9 J  ]3 F3 [1,请问下,这是什么原因造成的?
8 Z) H, d( i. i0 d1 v- L8 h0 H2,phy模块 和网络驱动开发的过程 是什么样的关系?; W; c! `/ P# m( X: A; @' H
谢谢7 _3 |5 ~; \6 W4 O7 u/ T
分享到:  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
0 t. A5 ^* H+ S) M4 E1 j请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

0 w2 J3 b1 x" L6 i9 @* Q/ B: C用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
5 y5 |  y0 F; ^+ E请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
  Q  G  e7 v9 E& L+ t" o5 m谢谢

点评

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" Z1 q; ~! G3 `* n0 H8 u
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
! g7 @: p4 e* h* C
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。* ~4 o% Y% Q4 G
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
! G% E# s2 ~! v9 A创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
" J$ n6 x) i# |* Y, ?4 k
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
9 X+ r# A! a. y' l在linux启动时,打印的信息是:. M% c! f% O, i0 u/ Z: u
EMAC: MII PHY configured, RMII PHY will not be functional,
+ X  B) I4 q& l应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
8 \6 q* K5 Q3 t8 D, ^* C谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:463 n: s* O% j; c1 G6 B: Z8 E, R
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
4 v* N7 d, [" P
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
' C* O. ^/ \1 |3 h5 i" {linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
/ y$ J4 i2 H, O  {一般来说,板级的emac驱动都 ...

+ p3 ~  J- @. b5 t* [" E  evefone您好,有些还需要请教下您。0 \; q8 c. W" ~& w% [0 h
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
% ?$ E$ P6 K/ P7 H' p, q6 l3 J/ G2 A9 z5 t" {
void __init davinci_common_init(struct davinci_soc_info *soc_info); R1 U0 F% t0 g8 [1 m- A9 C
+ J, ]$ M/ J& A; h2 t4 D
{
. p7 j! N$ ~7 y5 C6 `& [# f8 w' r/ M5 ?% ]
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
# E1 I) `# X# l8 Y3 \7 Q: v7 ]. q: s3 J% C
}
  u8 T7 A$ ?, w# B  c. F
* I0 o1 G  Q) Z' g. j* w//XXX 还是前面的5 a0 R  Q  f1 F  I4 y+ j2 G/ X7 p
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 7 _! p$ `7 f' e9 G! u, q9 ~
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown; r" e! T) z3 M) W; P1 A
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown$ [( J$ r8 B5 @

& O) l7 u" z4 @7 O: b6 J在后面
3 Z/ _$ }, e. e" J
% h& F; l' ?7 y% z& S# D: {[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了. Y9 C" B# @: W$ N- _0 ]) g+ c
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
5 @* Y  z0 ~% U/ `* B
# p* d6 d- d7 B请问下这是什么原因?) h' N8 [% o0 o) @4 @" C- s

3 T5 F- C( \& S5 W# u& _我百度了一下相关的问题:有介绍的说
3 n2 t  W2 }9 N) V% y/ N) z) k, f7 I, l) S
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。- B: E& n9 N3 T# [/ W  p# l

/ ^4 H; V9 p9 R& Q* |0 y建议调试在u-boot中进行,方便确认问题。
& ]& W8 b% T( {
+ v  \/ T8 `5 Y% D# Cu-boot下主要确认三点:
$ G" t1 Y* V9 J! Y3 {; B3 R" ^: S/ N: ~' P: A* J* Q
1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作: w* A1 K  i0 o/ F% ?) G

) G! r1 m, A; t3 h. G: |2)Pinmux configuration to support rmii interface                                //这个我应该已经满足/ _7 I/ i* b7 a8 `; ], P2 a
/ z7 s7 c' y! V  S+ B
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??$ s0 L) |5 J; `  q3 q& ^

- D" t# @7 s7 ~- N6 F* sLinux下调试也是确认以上三点。1 j3 h7 x1 E" h$ `
5 n+ S5 s4 h( l
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-27 13:13 , Processed in 0.044715 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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