本文共 1716 字,大约阅读时间需要 5 分钟。
在之前的移植过程中,我们已经成功完成了 USB 主机控制器和 USB 3503 Hub 的配置。接下来我们需要重点关注 DM9621 网卡的移植实现。
为了实现 DM9621 网卡在 Uboot 中的工作,我们需要完成以下几个关键步骤:
设备驱动注册
首先,我们需要在设备文件中添加 DM9621 网卡的驱动代码。具体实现如下:U_BOOT_DRIVER(dm9601_eth) = { .name = "dm9601_eth", .id = UCLASS_ETH, .probe = dm9601_eth_probe, .ops = &dm9601_eth_ops, .priv_auto_alloc_size = sizeof(struct dm9601_private), .platdata_auto_alloc_size = sizeof(struct eth_pdata),};设备驱动操作集
操作集定义了网卡的基本操作接口:static const struct eth_ops dm9601_eth_ops = { .start = dm9601_eth_start, .send = dm9601_eth_send, .recv = dm9601_eth_recv, .free_pkt = dm9601_free_pkt, .stop = dm9601_eth_stop, .write_hwaddr = dm9601_write_hwaddr,};设备扩展器表
我们需要创建一个支持 DM9621 的 USB 设备扩展器表:static const struct usb_device_id dm9601_eth_id_table[] = { USB_DEVICE(0x07aa, 0x9601), /* Corega FEther USB-TXC */ USB_DEVICE(0x0a46, 0x9601), /* Davicom USB-100 */ USB_DEVICE(0x0a46, 0x0268), /* ZT6688 USB NIC */ // ... 其他设备类型};U_BOOT_USB_DEVICE(dm9601_eth, dm9601_eth_id_table);关键接口实现
需要实现struct eth_ops 中的接口,并参考现有驱动(如 driver/net/usb/dm9601.c)进行移植。同时,确保驱动框架与 Uboot 的 DM_ETH 模型兼容。为了使以上驱动能够在 Uboot 中正常工作,我们需要在 Kconfig 文件中启用相应配置项:
config USB_ETHER_DM9601 bool "DAVICOM DM9601 (USB 2.0) support" depends on USB_HOST_ETHER && DM_ETH
在 Makefile 中添加驱动的编译目标:
obj-$(CONFIG_USB_ETHER_DM9601) += dm9601.o
在完成上述配置后,我们需要进行以下步骤验证:
启动 Uboot
输入usb start; usb reset,观察是否有 USB 设备正常工作。查看网络接口
输入Ping 192.168.x.x,确认网络是否正常通信。处理数据终止异常
如果出现数据终止异常错误,请检查下列可能性:解决内核校验失败
错误信息提示 CRC 检查失败,可能是由于 SD卡中的内核.bin 文件损坏或读取失败。建议重新烧录 TF卡并确认启动设备是否正常读取内核文件。通过以上步骤,我们可以逐步排查并解决在移植过程中遇到的问题,确保 DM9621 网卡能够正常工作。
如果仍然存在问题,可以参考相关社区讨论或提供详细的日志以便进一步分析。
转载地址:http://zvdjz.baihongyu.com/