博客
关于我
Uboot DM9621网卡移植之路
阅读量:545 次
发布时间:2019-03-07

本文共 1716 字,大约阅读时间需要 5 分钟。

移植过程中的故障排除

在之前的移植过程中,我们已经成功完成了 USB 主机控制器和 USB 3503 Hub 的配置。接下来我们需要重点关注 DM9621 网卡的移植实现。

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,确认网络是否正常通信。

  • 处理数据终止异常

    如果出现数据终止异常错误,请检查下列可能性:

    • USB 连接是否稳定
    • 序列号冲突
    • USB 端点配置是否正确
  • 解决内核校验失败

    错误信息提示 CRC 检查失败,可能是由于 SD卡中的内核.bin 文件损坏或读取失败。建议重新烧录 TF卡并确认启动设备是否正常读取内核文件。

  • 通过以上步骤,我们可以逐步排查并解决在移植过程中遇到的问题,确保 DM9621 网卡能够正常工作。

    如果仍然存在问题,可以参考相关社区讨论或提供详细的日志以便进一步分析。

    转载地址:http://zvdjz.baihongyu.com/

    你可能感兴趣的文章
    OpenCV 中的图像转换
    查看>>
    OpenCV 人脸识别 C++实例代码
    查看>>
    OpenCV 在 Linux 上的 python 与 anaconda 无法正常工作.收到未实现 cv2.imshow() 的错误
    查看>>
    Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)上
    查看>>
    opencv 模板匹配, 已解决模板过大程序不工作的bug
    查看>>
    OpenCV 错误:(-215)size.width>0 &&函数imshow中的size.height>0
    查看>>
    opencv&Python——多种边缘检测
    查看>>
    opencv&python——高通滤波器和低通滤波器
    查看>>
    OpenCV-Python接口、cv和cv2的性能比较
    查看>>
    opencv1-加载、修改、保存图像
    查看>>
    opencv10-形态学操作
    查看>>
    opencv11-提取水平直线和垂直直线
    查看>>
    opencv12-图像金字塔
    查看>>
    opencv14-自定义线性滤波
    查看>>
    opencv15-边缘处理
    查看>>
    opencv16-Sobel算子
    查看>>
    opencv17-laplance算子
    查看>>
    opencv2-矩阵掩膜操作
    查看>>
    opencv20-霍夫圆检测
    查看>>
    opencv21-像素重映射
    查看>>