linux移植网卡驱动问题(itop-4412)

        针对itop-4412这个板子移植网卡驱动,本来以为非常简单的,结果费了老大的劲还不能成功,经过反复厂家提供的编辑过的内核,发现内核linux-4.14.2中drivers/char/目录下有个power_ctrl.c这样一个文件,这应该是这个网卡dm9625的电源驱动代码,如果不将这个编入内核,网卡灯死活不亮,而虽然内核中有这个文件,最关键的一点,是在Makefile中即没有将它加入进去,导致代码一样,运行起来却老是失败。而在内核linux-5.6.8中,没有这个power_ctrl.c文件。
下面是排查步聚:
1. 软件硬件环境
1.1 itop-4412开发板,实际arm内核为cortex-A9
这里需要认真看一家硬件手册,这个网卡芯片为DM-9621,也就是基于usb的网卡芯片,另外特别注意它的连接方式图,hub方式。
1.2 软件环境
内核我选择linux-5.6.8,同时下载linux-4.14.2

2. 内核中驱动配置
2.1 网卡驱动配置
Device Drivers
->Network device support
    ->USB Network Adapters
        ->Multi-purpose USB Networking Framework
            ->Davicom DM96xx based USB 10/100 ethernet devices  
注意都选*号            
2.2 USB驱动部分
Device Drivers
->USB Support
    ->EHCI HCD (USB 2.0) support 
        ->Improved Transaction Translator scheduling 
        ->EHCI support for Samsung S5P/Exynos SoC Series 
3. 编译后运行
网卡灯不亮,但是串口输出可以看到如下字样:
[    2.069416] usbcore: registered new interface driver dm9601

但是没有识别到usb-hub设备,说明这儿电源管理一定有问题,电路没有接通,对比厂家的输出,
发现有如下输出时灯才亮:
[    3.213796] usb 1-3: New USB device found, idVendor=0424, idProduct=3503, bcdDevice=a1.a0
[    3.220887] usb 1-3: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    3.234438] hub 1-3:1.0: USB hub found
[    3.238661] hub 1-3:1.0: 3 ports detected
[    3.561117] usb 1-3.2: new high-speed USB device number 3 using exynos-ehci
[    3.712329] usb 1-3.2: config 1 interface 0 altsetting 0 endpoint 0x83 has an invalid bInterval 0, changing to 7
[    3.801829] usb 1-3.2: New USB device found, idVendor=0a46, idProduct=9621, bcdDevice= 1.01
[    3.808800] usb 1-3.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    3.827055] dm9601 1-3.2:1.0 eth0: register 'dm9601' at usb-12580000.ehci-3.2, Davicom DM96xx USB 10/100 Ethernet, 00:00:ff:ff:00:00
[    4.180788] dm9601 1-3.2:1.0 eth0: link down
[    6.755003] dm9601 1-3.2:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1

经过反复测试对比,发现在linux-4.14.2中目录drivers/char/下有这个文件:power_ctrl.c,这个应该就是usb-hub电路驱动,而在内核
linux-5.6.8中相应目录下是没有这个文件的。即使用在linux-4.14.2中有这个文件,为什么灯还是不亮呢?没有办法了,知道肯定问题就在这儿,逐渐排除对比后,发现在原生的内核中,虽然有这个文件,但是没有加入Makefile中。
即在drivers/char/Makefile中最后加一行:
obj-y    += power_ctrl.o

我使用的是linux-5.6.8内核,将power_ctrl.c这个文件从linux-4.14.2中复制到drivers/char/下,再将
obj-y    += power_ctrl.o
加入Makefile中,重新编译,这次可以看到灯亮了。

后记:这里要鄙视一下一些板子厂家,这种关键细节在文档中故意只字不提,埋了很多坑等着你去踩,浪费了很多的时间,为了让更多的
技术研习朋友少浪费时间,我把我的经历分享出来,希望对大家有帮助。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值