移植网卡驱动DM9000

移植DM9000


移植

  1. 编译

  2. 解决错误

    2.1 头文件不对 :去掉或改名

    2.2 宏不对 :改名使用新宏

    2.3 有些函数没有了 :改名使用新函数


移植前的试验

—之前移植的3.4.2内核是否已经具有支持smdk2440单板的网卡(否)

—之前移植的3.4.2内核是否已经具有支持mini2440单板的网卡(是),并可以成功挂接(mount -t nfs -o nolock,vers=2 192.168.0.3:/work/nfs_root/fs_mini_mdev_new /mnt)



移植内核自带的网卡驱动Dm9000.c(版本较低)

  1. 进入3.4.2内核自带网卡驱动文件Dm9000.c,找到平台驱动的结构体dm9000_driver,在源码中搜索”dm9000”,搜索结果确实找到了关于mini2440的设备文件,而没有smdk2440的。


  2. 进入上面搜索到的mach-mini2440.c文件,可知内核确实具有支持mini2440的对应的网卡平台设备



  3. 在源码中smdk2440的单板文件(mach-smdk2440.c)中,添加对应的网卡平台设备

    —查看现在所有的平台设备,并没有网卡驱动对应的平台设备

    —仿照mach-mini2440.c文件中的相关代码,在mach-smdk2440.c添加对应的网卡平台设备




  4. 上传文件,重新编译内核(make uImage)并命名为uImage_3.4.2_net,重启开发板后设置machid为16a(smdk2440),nfs下载新内核并重启,并重新验证内核是否已支持smdk2440的网卡设备(是)

    set machid 16a

    nfs 32000000 192.168.0.3:/work/nfs_root/uImage_3.4.2_net

    bootm 32000000


移植厂家的网卡驱动(较新)

  1. 在work目录下创建目录,在该目录下拷贝二期驱动中修改好的厂家给的网卡驱动文件(drivers_and_tests\17th_dm9000c),修改其Makefile后,在该文件夹下编译。

    —创建新目录,并拷贝文件

    —修改Makefile

    —编译,出现一大堆错误

  2. 解决错误


    —错误中提示dev结构体中没有priv成员(dm9dev9000c.c),故在dm9000.c中查看(搜索”board_info”),发现该文件使用的是netdev_priv。故将dm9dev9000c.c中的(board_info_t *)dev->priv均替换成netdev_priv(dev)


    —上传文件,重新编译,仍存在一大堆错误

    —错误提示dm9dev9000c.c:428:struct net_device’ has no member named ‘open’等等,找到所在行,在dm9000.c中搜索”open”,参照其做法,在dm9dev9000c.c文件中仿照

    —上传文件,重新编译,仍存在一堆错误

    —错误提示dm9000_hash_table(哈希表)有问题,我们用dm9000.c中的哈希表的函数替换它


    —上传文件,重新编译,仍存在一些错误

    —错误提示是一些宏没有定义,查看头文件,需要包含dm9000.h

    —上传文件,并将头文件dm9000.h(drivers\net\ethernet\davicom
    )复制到/work/drivers_and_test_new/Dm9000c文件夹下,重新编译,存在少量错误提示

    —根据错误提示,进行最后修改

    —上传文件,重新编译,编译成功

  3. 将已可以编译过的驱动文件dm9dev9000c.c放入对应的内核目录(dm9000.c的目录)并修改其Makefile,重新编译内核,用新内核启动,验证网卡是否可以正常工作

    3.1 拷贝文件到内核目录

    cp dm9dev9000c.c /work/system/linux-3.4.2/drivers/net/ethernet/davicom/

    3.2 修改Makefile

    vi /work/system/linux-3.4.2/drivers/net/ethernet/davicom/Makefile

    3.3 重新编译内核,并命名为uImage_3.4.2_net_new

    cp arch/arm/boot/uImage /work/nfs_root/uImage_3.4.2_net_new

    3.4 nfs下载新内核并用其启动,验证网卡是否正常(是)

    nfs 30000000 192.168.0.3:/work/nfs_root/uImage_3.4.2_net_new

    bootm 30000000

  4. 但在直接挂接nfs网络文件系统是出现故障

    4.1 设置环境参数并保存,直接挂接nfs网络文件系统;

    set bootargs console=ttySAC,115200 root=/dev/nfs nfsroot=192.168.0.3:/work/nfs_root/fs_mini_mdev_new ip=192.168.0.4:192.168.0.3:192.168.0.1:255.255.255.0::eth0:off

    save

    4.2 nfs下载新内核uImage_3.4.2_net_new后,启动后出现如图故障

    nfs 30000000 192.168.0.3:/work/nfs_root/uImage_3.4.2_net_new

    bootm 30000000

  5. 查看驱动文件dm9dev9000c.c后,在dm9000c_init函数中使用与mini2440相同的时间参数后,重新编译内核(依旧命名为uImage_3.4.2_net_new),nfs下载后并启动,成功启动nfs网络文件系统(并未出现上步故障),最后将该内核烧写到nand的内核分区。

    —修改

    —新内核启动

    —将新内核烧写到nand分区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值