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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题3 f! E8 `0 h4 A5 M0 b# y
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1& B2 v7 o* j' d7 A( A* T1 p
[    2.107743] davinci_mdio.0: probed3 L* m8 @! P% R8 q, j) b
[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题# ]& ~8 J% Z# y% Z1 d) y
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown( a  i/ p5 o" o  j$ W; _9 J7 [
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown
+ N5 x: }2 i/ C* }9 U$ ?: w5 `7 |$ ?1 u  s
[    2.137188] PPP generic driver version 2.4.2
, b0 k, c/ ^# v; ~$ z" ^[    2.143236] PPP BSD Compression module registered
+ z0 H2 g" W; j# i/ D; A$ K/ z0 ~+ m2 e, ^
" x/ \' \/ T5 N' X! X
在linux内核中的代码应该是以下:% d1 P* S4 `7 F0 c6 Z* B. X
        // 注册mii_bus
% V* h0 g. _1 A5 @* B        /* register the mii bus 2.   注册mii bus 2*/
! E8 p: c) C6 L        ret = mdiobus_register(data->bus);
7 S2 E8 Z9 ]& C7 Y: Z        if (ret), v4 U9 o' B/ G5 M$ K& H! P
                goto bail_out;
" c2 Z! c$ B: z" g" f% y5 ^3 B* J# v% s3 a
        /* scan and dump the bus 扫描和转储总线*/
5 ~+ H, T6 f4 y: o3 M3 m$ e) H9 |        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
3 X. ~  F8 Z' `' H* }' _                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据: ?! }6 g. {3 p1 L4 R; u; g& {
                if (phy) {
9 {$ y4 q! Q5 z$ c3 W7 z; I; H/ u                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
5 `/ d/ w. W' w                                 phy->addr, dev_name(&phy->dev),! z" I% J' [/ W$ {
                                 phy->drv ? phy->drv->name : "unknown");' Z# k- f  ^+ |4 v0 s
                }
( Q, V0 J* s* e" _+ I4 V- ]% d        }, |7 \* |+ V- o3 L; p
( u, E5 C& i& [2 l# b% c% m

$ {! X# M9 Z* n9 v1 H, }8 B' A$ H最终在后面 网络启动有问题
' m% x1 g3 B0 e6 l; C) U# S# a. X[    2.387752] PHY davinci_mdio-0:00 not found
% G2 G. w2 z( R3 ~: g4 t[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00! j( X% h- ?9 i0 Z: p  S; }
[    2.398254] IP-Config: Failed to open eth0
- _( Y  q% W/ z* q8 a[    2.402589] IP-Config: No network devices available.* f/ t$ O% |* u/ a
* j/ H5 i! D. L0 Z

) a. t) l- h0 o1 G; r" p% H2 E
: w; R9 `0 s! M$ k8 }' v% N- V4 ]# h  a
1,请问下,这是什么原因造成的?: M# a1 V- e5 `* F: v: l! t1 V
2,phy模块 和网络驱动开发的过程 是什么样的关系?
$ }! B: n6 @1 ~. k: n" M谢谢
* I& b* l4 \4 R' r! v5 G
分享到:  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
$ {3 g7 w. z6 T/ s8 z5 |4 J请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

( m! M/ B, S3 U, O& x8 V8 D1 D) d用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,  g! e3 B( V6 n6 X; L/ y' c
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?
/ c% _4 @  {3 c$ `  v% `5 h5 n8 l  a谢谢

点评

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
. q, k% Y1 E2 h8 z* |9 T用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
* }0 B4 A3 c  v4 i+ V6 W
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
7 o, G# r5 b/ b6 d一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:464 Z0 f% H: |0 x- r0 M) G
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

3 g7 P' g( e+ `) t请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
5 H2 f6 d" J8 ]) \; `在linux启动时,打印的信息是:8 q( F/ g  u9 s% R% ~
EMAC: MII PHY configured, RMII PHY will not be functional,! Y: o/ w) d8 \# U) a7 Y% [
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
, e' t. b+ A( k8 {7 X谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46
5 A# r& P3 L% }创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

' b# B9 d  G" L5 {9 b7 D我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:40/ K3 g  Q7 ^# j* ~
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。: {  m: S! G1 ]0 s  {2 R
一般来说,板级的emac驱动都 ...

( g' [6 q1 ?3 P  Cvefone您好,有些还需要请教下您。
" X- _2 i. K; `  x; I1 L然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1. u$ v1 K4 Z( f% b3 }& U" n2 S  E2 T

/ s3 E2 W6 r5 E- k  r! ~9 qvoid __init davinci_common_init(struct davinci_soc_info *soc_info)
; ~$ X1 ]0 `3 b3 V1 t; e  \
' l) r5 @) c2 T2 P! J- O{; {* {2 B( q* N4 {7 A- M/ R# C

% }/ h% T$ v' z             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
# u  ]+ k8 O) R+ D3 M! A7 {# ?8 v0 l
}% R$ I( s& i( q7 Q# W

8 U- x8 g% k  f# `6 o//XXX 还是前面的* a3 S& B# A+ Y0 i" ]' k- _
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01, 2 E/ F: b. T7 c& M7 X+ m" S
[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown& l! Z! n4 k8 q$ I9 J1 D5 E1 m3 p
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown/ F/ v7 N7 E" H; [1 |, a
/ V- ?; z/ h. @8 ^7 S
在后面
0 I( f0 T, R+ v9 T
; a9 y8 k; U& y" H5 d! ?" b[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
# H8 _, y: M0 r' ^! j( O[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:00$ ~) O. }* l+ K- U

& T5 X  M5 R! V9 K' [, t请问下这是什么原因?
8 O3 \# T! G. Y0 a  d+ {
' ^' ]5 V* z- ]" \我百度了一下相关的问题:有介绍的说
) e+ h+ B1 V9 z$ O; x9 u; D) c* K' o5 U, d
由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
9 x& P2 |# K, Z% p: l
+ W( i  H# S8 S$ S6 x建议调试在u-boot中进行,方便确认问题。
% @  A0 |2 m6 X* m  i( f: i: E. Y- [) |7 \! U; o8 Z
u-boot下主要确认三点:4 ^2 K. G, n6 A  M( \6 E

, Q. g# d7 k# ?; X: q7 R$ S4 M2 M1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作" q  n/ D# N. ^( F5 O+ ?

" `! G8 J& T. V2)Pinmux configuration to support rmii interface                                //这个我应该已经满足5 y% Z. M# J% O( J+ g1 {: r

8 F! d6 Q& L! P* H) B, S0 j3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??* |7 E  w- N  b  W6 m

6 }: m! Z; X4 q% K8 mLinux下调试也是确认以上三点。
% Z' m5 p0 |+ g  G
2 |% L; a4 X! m6 t: A  o: X可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 05:51 , Processed in 0.047848 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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