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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题( v' g2 Y: C5 U0 `& q
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1
% O- I7 M, P: n. F" X3 t' t8 Z% k+ L[    2.107743] davinci_mdio.0: probed
2 e* `- A- \4 g% p[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
1 f' D2 q) K' F8 ~1 ^7 q[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown* d& E5 J0 Q7 g. Y# n- g) ?
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
1 u) @. A+ p/ ]# J; p# J6 X; R  Y4 k. B# `6 P7 f
[    2.137188] PPP generic driver version 2.4.2
8 l$ b0 k  j- N/ L( S# h! S9 b. c[    2.143236] PPP BSD Compression module registered
& k' ?) l6 l9 \. B
: U2 L, f9 C. Q+ c# s
  R, J) N" s- l* j8 Y& T; i6 @在linux内核中的代码应该是以下:* u. ~% L0 a3 v' F
        // 注册mii_bus( O4 F. E1 q1 c
        /* register the mii bus 2.   注册mii bus 2*/
" C0 `/ }9 K$ @( X0 d        ret = mdiobus_register(data->bus);$ N1 t9 W/ C* v7 O7 t. I0 ]: d. U
        if (ret)
4 v1 o5 J; {" }5 T; u                goto bail_out;4 a6 f1 r1 \7 d+ ~$ D' n' q& R/ b
1 \0 c% H) B, U9 ?) j
        /* scan and dump the bus 扫描和转储总线*/  u! E/ f+ [; e" U7 ^
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
+ k4 g% P4 A( l1 g& [  i                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据% d+ d# E+ k4 g$ \
                if (phy) {, s3 j2 Q6 Z% ~( s6 l
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
1 p$ j. t( a2 v' t                                 phy->addr, dev_name(&phy->dev),1 h" i) U9 \' Q; S4 H/ Q
                                 phy->drv ? phy->drv->name : "unknown");
! A! k7 y8 r( R7 \1 h% g                }. Z0 j& O) t. n$ V: S
        }& R" I, i+ X; \  Y- d3 r6 H' ]5 F: h

6 W+ j: b4 N! G+ O9 y
9 {' Q7 d4 h' ^9 `% A  W+ V! g最终在后面 网络启动有问题
! w; T; S* o' e; X0 l) t' T[    2.387752] PHY davinci_mdio-0:00 not found$ p7 D- H% b6 e& p# |5 F1 V" g
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:009 y" u- Z: R$ A0 k+ W
[    2.398254] IP-Config: Failed to open eth0/ {4 `0 h) v! k+ L; X
[    2.402589] IP-Config: No network devices available.; q. m+ p1 W9 J( `
: p; w; k: h- E+ }. M/ w

) B$ |- s! ~- L* `
. C3 m; C1 P4 b3 k' a4 ^0 [
1,请问下,这是什么原因造成的?
: \9 d) f/ x( X  p& I2,phy模块 和网络驱动开发的过程 是什么样的关系?( M- l8 V2 o; o) `3 k5 \; }3 p9 h
谢谢
) G" _$ m4 D7 K* Z/ d
分享到:  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* X2 c8 c: r: ?& t! `- e* l
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

$ i0 R* o/ k" u7 g% u1 p用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,* H8 n& I) m$ v7 S
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
! f4 @* m0 u/ L" F/ N: a) _1 N' f谢谢

点评

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
6 ~8 ^0 P+ ~: F. Z* ^! D( A' D9 G用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

7 \0 _" I% W% Llinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。# W4 k+ c8 v. X+ V# L  ]* A3 ^
一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
" S! V3 P- m& R3 s# N* E创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
" P, k! l, n+ U7 r% V$ f6 n
请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
1 f$ w5 ^2 w# \  h9 r在linux启动时,打印的信息是:
  w7 B9 }( f# b- v( r/ ZEMAC: MII PHY configured, RMII PHY will not be functional,
# X: J7 |( t# [! y* y" c应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
( ?# a' R6 m: c" k/ M谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
# H2 }8 f6 e9 T& n, H创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii
7 W( \4 {9 [& X: {9 v' A4 `) h2 q
我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
7 r8 W/ Z0 Q# V* A( V5 mlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。0 h# C+ q0 K8 L5 U4 \4 A/ M4 Q
一般来说,板级的emac驱动都 ...
7 H8 s5 `. [& k  A
vefone您好,有些还需要请教下您。
4 v2 i/ P6 I  G* q" T然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
/ b  l0 s  j7 O( ]
8 `8 e: Q) \9 G- I! B% v& }  Rvoid __init davinci_common_init(struct davinci_soc_info *soc_info)
7 ]* s. C' ?7 h$ u0 |0 }- M6 I# t  H& z' m2 |. }& o7 ?& d
{  X. L( D7 Z- ^
8 r3 G! N$ \  ~6 e6 a$ S! Q/ ?
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
9 \( v- m! r/ \1 Q
) R! ]* H: U9 R8 p}
: h' d* Z! a6 A+ ]6 g  R; k' T3 P/ z
3 R# X- j% v+ j* }//XXX 还是前面的, b, r" _$ T) e5 _% _9 I
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
8 B2 h6 ]$ `# A0 _& l[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown. K2 m/ P+ _' @7 d2 X
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
; g. h2 a( G4 [% \& E" U/ y$ a0 ]5 w, e1 M0 e
在后面
% E; ]( w+ I0 G$ e8 E; }/ V, n4 a0 z+ ^/ H' f+ M  @! v
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
0 }7 y& a4 E, X. W/ O' B$ `[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
1 j# V  e% I# v
  M& f+ f+ q0 E: t5 R8 a. j请问下这是什么原因?
1 ?- [9 I$ l6 X( }6 h' H# p9 A5 J6 [' C0 C' f$ n, F1 L
我百度了一下相关的问题:有介绍的说0 M* D8 N. K5 p2 |) K/ a
6 s' k; j2 O- A/ c
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。$ U# q$ W( u: g6 W( f; N
% @8 Y( I* V- W( D6 V* @
建议调试在u-boot中进行,方便确认问题。: d* z' [) V! ]9 v! C

7 n( J: k; `0 h# l% i$ p# F$ n, P. |u-boot下主要确认三点:
5 ?- a5 }! Z! z8 E* F( N
8 U" S8 m; e- v% w$ e( ^$ E1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
: \- L/ {* z) O4 n! [9 S9 u; `& z) s+ s  o& \( s
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
/ O5 d. Z1 o+ W/ q( \& }( Y2 J; |: b
3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??6 [' z. R9 E& _" W% C4 t
% F; {! |0 ~. [
Linux下调试也是确认以上三点。
) t/ x1 }2 L# _; [" F, P. \8 G+ u5 Z0 f/ i  o
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 16:04 , Processed in 0.042244 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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