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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
跳转到指定楼层
楼主
发表于 2017-4-13 09:52:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我准备在omapl138上ARM核实现移植linux系统,网络驱动出现了问题9 e$ c5 Y: Q0 N, ]  L9 ~
[    2.096413] davinci_mdio davinci_mdio.0: detected phy mask fffffff1& e, Y6 E5 ~$ `# C/ G5 d( Q- ?. |
[    2.107743] davinci_mdio.0: probed
7 X& Q" s% U% p[    2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  //在这里有问题& l* n$ m# J. N  o, c' L; I
[    2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown1 V- K; C5 U# M/ V6 B3 o; y- j
[    2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown1 n: i8 Z! d: ^+ Q9 j; ^+ {

1 v8 B1 t& h' v0 n[    2.137188] PPP generic driver version 2.4.2
, |6 r: ~7 [5 ]8 F[    2.143236] PPP BSD Compression module registered( z  m5 b5 J3 e9 w. ~
" J& B+ v$ `+ j; g/ M7 F

; R, l0 C; o) A9 C7 {在linux内核中的代码应该是以下:
& a& Q8 a. o+ a/ _        // 注册mii_bus
! b. P: {1 Z  M        /* register the mii bus 2.   注册mii bus 2*/9 I& E. I! u* V- [3 A0 H
        ret = mdiobus_register(data->bus);
- L# w" r$ }9 e# D9 f: S        if (ret)
5 p' v& V/ w6 g5 c  B                goto bail_out;4 z' S; {& i( H+ X6 E" ?. d5 X
1 d+ W7 f) p4 J7 N
        /* scan and dump the bus 扫描和转储总线*/
% n) G. Z8 O) ^/ H) u        for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
7 [& H' m" y2 q3 J) k                phy = data->bus->phy_map[addr];   // 应该从 phy_map下手  phy_map[0] 没有数据
% n/ z/ h: {$ V                if (phy) {4 Q9 {/ b  q7 Q9 N; Q  w
                        dev_info(dev, "phy[%d]: device %s, driver %s\n",
6 r) v3 _6 z. j9 o9 j                                 phy->addr, dev_name(&phy->dev),
% ~% c2 W0 K+ D7 h7 l3 Q! k* Q                                 phy->drv ? phy->drv->name : "unknown");
; J& w& G3 v7 z( c                }0 Q9 z1 u/ o! M
        }
& L" d0 d6 u# F7 @( f/ M! I- L8 I7 {- z9 q* {- K' C( T+ k0 G  I. Z

0 f6 j, m* v, n. l8 W; V6 ]4 |5 Z& C最终在后面 网络启动有问题/ I0 ?/ v) ^% L3 |' S5 y
[    2.387752] PHY davinci_mdio-0:00 not found
9 {$ t, {. e. q' r[    2.392184] net eth0: could not connect to phy davinci_mdio-0:00
: W- t$ B% c0 C7 f' s- R  _[    2.398254] IP-Config: Failed to open eth0; k& f( S  h9 ^4 U
[    2.402589] IP-Config: No network devices available.
& R0 e3 @. m# g- D
$ u5 i' V) T6 f6 T4 v. \3 C" k& E
; E$ q& ^4 \8 ~# N) B2 ]: h

0 ~* C! @8 n) N' k- ?1 m+ E1,请问下,这是什么原因造成的?; z6 ^2 d0 ^+ L+ ?7 l+ K/ Z
2,phy模块 和网络驱动开发的过程 是什么样的关系?, R: I7 B  }) h, L0 ~5 z8 U
谢谢1 U8 X- `% h& {) n: e0 R+ 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- l# @  M- ^- K0 e5 b
请问您移植的是哪个版本的内核?对比一下我们的内核和emac相关的驱动

' N8 }& P5 f7 F' K" |  I用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RMII,没有使用MII,, v: Z# P) M8 P! D
请教下,linux内核中的phy模块 和网络驱动开发的过程 是什么样的关系?) d: g$ H, L) p* F7 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:333 j" u3 T; H) @' t, X
用的就是创龙的linux3.3内核,在创龙板子是可以的,唯一不同的是接口用的是RMII,打印信息也提示使用了RM ...
1 C; C" K5 W) f3 Y# ^/ j* ]
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
$ R! d& F0 q& ~7 D: M2 B& j' k1 Z一般来说,板级的emac驱动都是通用的(我接触过到的TI相关平台基本都是这样),所以不需要phy的特定驱动。如果需要用到比较特殊的phy,配置相关的驱动就行,在板级的驱动添加对应的信息就行。
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
6#
 楼主| 发表于 2017-4-18 10:35:46 | 只看该作者
human 发表于 2017-4-14 14:46
/ f4 b2 k$ m+ z& U3 c/ d+ D6 t% T9 ^创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

6 s  \! ?  ~% c4 I! J) N$ K9 @- E请问下,emac-mode是设置 uboot的emac接口的,还是设置linux启动时emac接口的?
/ y  N! Z( X9 `/ R8 I在linux启动时,打印的信息是:2 h0 e% ^( }  T0 w' B
EMAC: MII PHY configured, RMII PHY will not be functional,, F) P' G! `& T5 W9 k9 Q2 `) Q$ n
应该说明没有才用RMII接口,请教下,如何修改menuconfig,来修改为RMII接口。
3 a3 z) n6 X8 r) i谢谢
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
7#
 楼主| 发表于 2017-4-18 10:36:56 | 只看该作者
human 发表于 2017-4-14 14:46, a9 N; ~- \6 `2 W
创龙的内核支持mii和rmii,可在U-Boot命令行中设置emac-mode变量值为rmii

+ O' T( ]/ C6 E4 m1 |7 w我已经将 emac-mode修改为rmii了
回复 支持 反对

使用道具 举报

39

主题

95

帖子

389

积分

中级会员

Rank: 3Rank: 3

积分
389
8#
 楼主| 发表于 2017-4-21 15:31:34 | 只看该作者
vefone 发表于 2017-4-17 20:404 @3 _9 [2 D% D' i# O( J
linux的网络驱动部分基本不用你去作修改。因为板级和底层的驱动都已经写好。
  J9 X* l& ^5 H* Z7 ~; a8 a" r一般来说,板级的emac驱动都 ...

# t+ u" L: p1 d) S9 k7 B6 P, X7 Gvefone您好,有些还需要请教下您。* Q& {/ X: N' p: z6 n
然后,我另一个板子的PHY芯片是KSZ8893,是RMII接口的,我没找到在哪里修改为RMII,我就在最初配置的时候将rmii_en设置为1
* ^) q0 l7 o7 u8 l5 c
4 }* j5 T) y. L" v4 C8 ovoid __init davinci_common_init(struct davinci_soc_info *soc_info)  G4 }, m9 i# K' l- o7 k
5 ?# N$ L% c# q1 X! q
{
* b  D6 y# E1 t/ ^- b4 ^. e  P/ m2 A4 T1 V' c
             davinci_soc_info.emac_pdata->rmii_en = 1;  //在后面验证了一下是没有被清零,一直为1,说明使用的是rmii接口
! F& F: V" _3 d, b
  A! J! |0 d- Q4 H5 r+ ?0 a}
! l2 O# M7 x5 `% I
. n5 ^0 `  z% G% Z# s7 ?//XXX 还是前面的9 L, u  L* X0 m+ D% l
[ 2.111605] davinci_mdio davinci_mdio.0: phy[1]: device davinci_mdio-0:01, driver unknown  // 这里我发现是device  davinci_mdio-0:01,
4 T3 E) k% o% w4 e3 t[ 2.119866] davinci_mdio davinci_mdio.0: phy[2]: device davinci_mdio-0:02, driver unknown9 J& X$ z5 u' h* I4 e
[ 2.128281] davinci_mdio davinci_mdio.0: phy[3]: device davinci_mdio-0:03, driver unknown5 e" u7 s) A7 a2 q% |

( P/ s1 w9 m  F在后面8 e! R5 |4 w1 ~- B# Q! n+ g  P
- @7 c5 T" l3 @* A/ b" ^
[ 2.387752] PHY davinci_mdio-0:00 not found                    //  这里应该是没有和前面匹配好。这里就是davinci_mdio-0:00了
+ N$ d0 N: C9 V[ 2.392184] net eth0: could not connect to phy davinci_mdio-0:000 P* E# ^5 S1 h
, H- \$ `" ~% n( s( u
请问下这是什么原因?
  c0 E% D  ^& z* i3 s! @+ a+ E2 e: o$ M; z+ q$ n/ D) A  ~0 |
我百度了一下相关的问题:有介绍的说" ]9 M( g* W, n, Y4 u& H

% a5 k5 ^4 c3 u" p/ m$ T8 f由于TI的SDK包中使用的general PHY driver,所以修改很简单,更明确地说,是确认配置。
( ]* S, H( x. N1 F, N: W5 |( d" J  N
3 _6 F7 n* N% {2 k建议调试在u-boot中进行,方便确认问题。$ b  r# U& ]* ~
! ~* w0 p* Q7 C7 U" y- t' F! z
u-boot下主要确认三点:+ N* i6 [/ L: U; _8 N7 r, f& ?3 g5 D8 {8 `

  ?! {. b/ t/ t4 Y+ a1)Program GMII_SEL in control module with 0x5 for RMII Interface    // 请问下对于omapl138 如何操作' i( ^; {0 E3 l9 V( Z9 l

% d, v" s. K& z! M  c6 v8 r6 J2)Pinmux configuration to support rmii interface                                //这个我应该已经满足
' u: N6 x4 O0 k% t& S) h7 @
! p7 C: u3 q5 [  A) h- Z( d3)Phy ID setting in Platform data(由PHY的硬件电路决定,通过在PHY_ID的三个管脚上下拉来决定)  //这里我一直没有找到配置的具体地方??$ e; G5 T# @* Z' H2 W

! c' q% A1 k( K" c+ J& P4 K0 jLinux下调试也是确认以上三点。
" C! m% c' W! l& `6 ?4 f" t4 D6 d( R; ~9 C( e! ~# v' Y$ h
可以指点下吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 02:49 , Processed in 0.043093 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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