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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
& h6 \) s, h) w: ^' |6 |! e[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1. |, F$ b5 d& J1 E* H% a+ h
[    2.107743] davinci_mdio.0: probed
" W0 c: ^; l; _[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
- P2 t9 r% o5 x- a" A( J' O[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
5 C& k, j  g; t9 Z[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown$ ^6 A9 a5 k' O4 c- C5 R! O1 P) T: W
+ M! s5 d+ S. d6 S6 `& T
[    2.137188] PPP generic driver version 2.4.2
0 o2 g" m) H' U8 k[    2.143236] PPP BSD Compression module registered
( `3 w1 G) _+ e, [6 _9 H7 }0 [# N, }8 {% z9 \/ F+ s
$ j; I. e' J  S# T; s
在linux内核中的代码应该是以下:7 p; ~& H! z2 l3 W3 r( r" M
        // 注册mii_bus+ q& _& x- W& T3 T: Q2 @
        /* register the mii bus 2.   注册mii bus 2*/
' p( ]+ O1 _% P) d3 h: J# b        ret = mdiobus_register(data->bus);
6 {+ T% X$ J( `! V. Q. g% b        if (ret)1 H) M0 C9 |# v
                goto bail_out;
7 d: v5 s: a4 S) r/ ^6 X6 j* |! t
9 Z7 _) [% i5 L* d        /* scan and dump the bus 扫描和转储总线*/
( p, k7 F1 q% @1 _        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
. s  |7 x/ ?, g# S                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
" H$ P3 ], {1 u1 O) Y  U* T7 l                if (phy) {
6 l9 a8 }+ t/ J6 R* A: E3 t* H                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
0 h& t1 v2 K+ y$ @7 V2 v* B- G+ s                                 phy->addr, dev_name(&phy->dev),
0 \$ S  Y* X  ]/ l& X  D" `# H                                 phy->drv ? phy->drv->name : "unknown");
# }! P4 Q3 s8 J+ x9 M5 B                }( x: `$ E' ?0 I* A7 g1 X6 w) \
        }
' C# y  I- E( T7 K& t4 e3 ^+ A: D* ?% Q3 D+ I' g0 q1 a$ w
5 E, H$ v$ I* x
最终在后面 网络启动有问题
; h6 Y& w( @2 \$ {# j: d- S8 X4 I' H[    2.387752] PHY davinci_mdio-0:00 not found4 y' k! q; `" M4 n  C  h( ], U" k
[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
/ }5 f+ }' q8 R; ?. T[    2.398254] IP-Config: Failed to open eth0
+ s1 E0 w8 [$ u% h5 L0 j[    2.402589] IP-Config: No network devices available.% z( r2 ?8 u  ]9 Q, E0 j* K
' q  a0 S. |* E9 u& Q, p* X( B
3 Q- v" e+ R# P1 ~& u' P

5 r, T0 [0 V8 _6 V) J1,请问下,这是什么原因造成的?7 A" x5 ^4 q. k& W# P
2,phy模块 和网络驱动开发的过程 是什么样的关系?6 v+ P: S# i6 s. ?/ W; y
谢谢
9 T/ ]- o: H0 c
分享到:  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
+ U  d1 P" G2 J; I, [3 F请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

: [+ s: k4 w% w: Y用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
% V* R6 u0 h+ i9 m% }# {" Y: r1 M; H请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
) ?6 y7 M. p+ U5 G! U  Y谢谢

点评

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/ i& R& D4 J& n$ o
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...

* l# ^0 X& X4 j4 s4 v+ |9 @linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
7 s* A: e* @% i" }6 y) ~一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
* t) `$ [& [! M) _创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

: f% s0 d. ]( K+ m请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?8 H' f5 I" v2 W3 _- T7 {
在linux启动时,打印的信息是:
  [$ A1 y/ N$ n# H$ v; x7 ]4 U: t4 X$ I  V. xEMAC: MII PHY configured, RMII PHY will not be functional,
2 h0 g! R  u: T3 n3 F; ^( }应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。( j4 R) }, t% a1 ]& z/ b. @) ~
谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
1 J0 X. N: f6 X- |9 E创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

  B' o5 ?2 A# r& }+ B我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:407 d8 j8 n( C9 d0 E% w
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
+ Z2 w5 M6 \( S一般来说,板级的emac驱动都 ...
! Z7 |2 N: R  r: F
vefone您好,有些还需要请教下您。
+ v# E6 U/ {- F然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
6 N( J& W) F! a- s+ \
' i2 |5 k) O. ?" N9 O; h3 qvoid __init davinci_common_init(struct davinci_soc_info *soc_info)
# B& U9 D4 E( o: S% L% o- y6 R; |- c8 h- B2 T& D, u/ {% d. C
{
2 m1 S# Q& Z/ e8 L5 k
/ r3 M# C3 a) c0 x3 b  T/ Y" a* [             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口( h6 g4 _  f9 u; n9 k3 P1 c
  L) X# _& y& p7 v: [" t6 o( t
}
) @, p( C# J5 R6 c2 V: L# f% t* Z6 Q7 K1 Q3 m
//XXX 还是前面的
8 Q, B: \! Q' w: m/ _5 e. E8 ^[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
  G/ ]) r1 Y5 |8 p. A/ S2 F[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
* D" w2 b% c; a2 b[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
6 Q/ }% q+ U/ m8 X! C, b% Y5 ]1 {- U2 R. E1 |! h. P
在后面! o0 c$ H+ p4 u9 C; J* l

0 N* [7 L8 ^8 |0 m[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
9 {2 @1 J0 K# n4 K3 d" P; C, r' L[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00& I: Q" x+ j( Z/ w7 ]$ ?

/ n& G% W4 u$ a- `6 X% y请问下这是什么原因?4 }( C& [9 Y: K! P3 a: ^9 B

- @& K4 y- }  n( h- Q! V7 q我百度了一下相关的问题:有介绍的说0 l# \2 j! B1 r, e) L/ h* L; L
# W) H" D& n9 B. L+ A
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
' Y! z+ X8 u+ u: Q- N
* x) W8 u# V& j& W& }! b建议调试在u-boot中进行,方便确认问题。/ {4 p% h7 C, O$ G4 v

! r+ W. |3 _% W6 h( W# V7 Z2 L# ?u-boot下主要确认三点:
0 ^6 h# ^! O% v# p6 z
2 i5 Z6 w' ^" I/ a1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
7 |1 l$ B8 R' d, O, ]- i9 m. J9 A1 ^: d" Y: @
2)Pinmux configuration to support rmii interface                                //这个我应该已经满足. r, d& T8 z$ c+ q* ~; t

) N6 p8 k& R% @2 [1 n; V! w& z3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??0 K* ]4 B/ I$ g) U5 m% s. W
- m" ~" G. [: Q# E9 L8 f
Linux下调试也是确认以上三点。* q! g) B0 M2 J4 U! {2 U, ~6 I
( m7 D4 q* K4 `. c1 z# S
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-27 18:20 , Processed in 0.045607 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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