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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题
' f& r4 x( W& `8 F7 v" J7 u[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff12 k4 ]" N% B: h* y% N. M- ^
[    2.107743] davinci_mdio.0: probed
. j9 H5 N& f- L; u[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题
! |, W  P. e0 x/ r. O[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown
  ~0 ?/ A  v  n[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
/ D1 }* e. s' j4 V/ d; @' }( n4 ~4 W* X' N  ?. S
[    2.137188] PPP generic driver version 2.4.2
6 b5 B3 E# M! f0 T! E# z[    2.143236] PPP BSD Compression module registered
% k8 y# M! P* h  C% G$ c2 h. z; k8 L3 o8 \4 Q1 B

3 |5 h7 R+ ]4 {, n在linux内核中的代码应该是以下:( k7 X2 q4 c# k! O$ U
        // 注册mii_bus
  O$ Z2 u  W" X        /* register the mii bus 2.   注册mii bus 2*/
% @; q" c& l, A6 N        ret = mdiobus_register(data->bus);, J8 J) M1 G2 {$ G
        if (ret)
. `0 W$ R3 d) `9 i! r1 l; s. o                goto bail_out;  L8 k( G! i9 p& X, F, t
2 l) Y! M/ p* B6 O  I1 l( I* P# p
        /* scan and dump the bus 扫描和转储总线*/( W& V# h. q1 t' _' x) w& r* H1 J
        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
) I% G; X' H8 x! w6 Q                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据$ F& @% m7 ~) W* w
                if (phy) {7 w+ r! B( ?! K3 o8 M, A  h. {" Q
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",1 Q+ n5 ^0 P( \( g0 S8 N' q
                                 phy->addr, dev_name(&phy->dev)," ?* a( s* ^" X1 ?# G# _  `/ h
                                 phy->drv ? phy->drv->name : "unknown");' t9 c* j( Q; X, A' [$ D8 `
                }
7 S" v9 l$ \2 Y: U) e# ]        }
: M, {( P2 O1 |7 z
- m2 l3 L- Q( a' D2 s% z% A: o  v% [/ G) F
最终在后面 网络启动有问题# n9 m0 E! S$ ^- u
[    2.387752] PHY davinci_mdio-0:00 not found
' t: h4 A8 \7 y[    2.392184] net eth0: could not connect to phy davinci_mdio-0:008 E* S2 e7 O! H5 m
[    2.398254] IP-Config: Failed to open eth0! @& W, Y' b) K/ U
[    2.402589] IP-Config: No network devices available.
2 v3 J% B! J2 Y( V- u5 O2 D0 ~0 ^$ E! Y
* y9 Z# E9 v# i' M/ O& H( M( F. _
: d7 v7 e4 F) z# ~
1,请问下,这是什么原因造成的?) w$ j) z- g9 H$ O  y7 ^' U
2,phy模块 和网络驱动开发的过程 是什么样的关系?- @% p0 |9 ^" f, n0 [
谢谢
$ \2 J. ~# y9 R
分享到:  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
+ w* N' \- a: O  {8 i  e请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动
  A& _2 \# Z; R1 `/ c7 V4 V
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,
5 j" `2 z0 S* ?$ w( y请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?* H) ]4 d1 E, e
谢谢

点评

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. L% h/ i0 @& j2 n0 z' Q
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
* E/ V( z7 r4 T- G2 W$ V, s
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
) v/ |8 s- G8 I+ I, T9 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
- `5 f$ T2 |7 g创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

' c% v; c# \( t- U1 I+ t7 Z请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?6 l1 w" a% Z: O; n+ k) Z, X( k2 A
在linux启动时,打印的信息是:+ q% m2 F* a" O1 C8 ]$ K' q9 H# @
EMAC: MII PHY configured, RMII PHY will not be functional,, n3 [' T% g6 D
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
+ q/ w* m. l! i. W3 S! V' R: G谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46, H* v8 T, b; e* L, Y! ~$ [
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

5 v# Q1 E% i7 f/ v8 c我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40
$ i7 o2 t, S( Z* Q/ H4 q6 t# S! hlinux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
/ D2 K- \4 {% x+ K$ {* l7 y一般来说,板级的emac驱动都 ...

) X( {# S6 }2 }3 h; d/ mvefone您好,有些还需要请教下您。
6 ~$ D  k) z7 ]然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为16 ]5 y# p- A' p/ o3 m, l' h

8 {3 R, g( ~6 N" o) i8 h0 Hvoid __init davinci_common_init(struct davinci_soc_info *soc_info)" J0 O  W) n* O; t4 D) P- h
6 ?* C$ j( k7 K# Q( n' I
{
! B' l* |1 L' h  a/ N" u/ n# f
# t% U$ O7 M; i* r) q: F* {% I2 {             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
% y5 `: a3 m: N' G6 g2 ?2 b# Z# ?
# d) o/ L8 j- ~# ^' ]6 t}# |  n( s$ z3 ^

/ s" G' T  R1 l& f7 G& G//XXX 还是前面的
2 r% j7 k% |6 \; M4 ?' a  C5 r[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, # O2 I; k! K! p; [0 Z+ l" X, i
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown6 _1 l+ B% ]( i! X
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
: W: R% _/ T3 r- l1 t# V4 o3 Q7 h- w/ o5 D
在后面6 X6 N6 F4 W( a2 h6 V2 b
4 d7 E. }, l6 v9 T% y
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了" C' V' v1 I: v" S3 J
[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00
: t( D, W4 J+ v8 ^, Z" C: x0 |6 F( I9 j
请问下这是什么原因?+ o: \9 {9 l8 [& q, \
; M" f6 P3 h& Y+ W& k
我百度了一下相关的问题:有介绍的说
2 J: _! h: D( ~, e- I: P1 ]. J. J1 ~8 p& h: M
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。; U, d7 e+ G: L7 f& `
7 Q5 F- F" J5 e" A) t
建议调试在u-boot中进行,方便确认问题。
1 F' J+ R  E" L; N, J5 W( T/ z
7 l: r* h' k- ~. ]- Y2 nu-boot下主要确认三点:8 D0 {+ F7 d. j7 q/ R# r3 j- W

  z$ \7 F. ^" y* }# V1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作
2 R7 Y* h5 H4 _) e7 z& p6 p+ F3 J/ M
3 Y+ X1 r3 O+ Z/ ^6 a  K2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
+ ?; N! }( `: z- O
3 }; n( B2 ^% r- w% b+ a3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??
( G: E: g7 K, F6 e. o* C- ?% ~( b+ ]5 c% S# v6 j  M$ `/ x
Linux下调试也是确认以上三点。
/ R/ X+ ]. ]9 r/ m- o- c2 ^
, l' |% `. [' w6 h( ]7 x) J可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-3 15:25 , Processed in 0.043794 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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