网卡驱动程序框架:

app: socket

       ---------------
       --------------- 若干层网络协议--纯软件
       ---------------
       ---------------

hard_start_xmit|| /\
/ || netif_rx sk_buff
—————
硬件相关的驱动程序(要提供hard_start_xmit, 有数据时要用netif_rx上报)

           硬件           

怎么写网卡驱动程序?

  1. 分配一个net_device结构体
  2. 设置:
    2.1 发包函数: hard_start_xmit
    2.2 收到数据时(在中断处理函数里)用netif_rx上报数据
    2.3 其他设置
  3. 注册: register_netdevice

测试1th/2th:
nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nonand
bootm 30000000

  1. insmod virt_net.ko //装载驱动
  2. ifconfig vnet0 3.3.3.3 //装载vnet0网卡
    ifconfig // 查看
  3. ping 3.3.3.3 // 成功
    ping 3.3.3.4 // 死机

测试DM9000C驱动程序:

  1. 把dm9dev9000c.c放到内核的drivers/net目录下

  2. 修改drivers/net/Makefile

    obj-\((CONFIG_DM9000) += dm9000.o
    改为
    obj-\)
    (CONFIG_DM9000) += dm9dev9000c.o

  3. make uImage
    cp arch/arm/boot/uImage /work/nfs_root/uImage_dm9000c
    开发板重启
    nfs 30000000 192.168.31.202:/work/nfs_root/uImage_dm9000c
    bootm 30000000
    使用新内核启动

使用NFS启动

ifconfig eth0 192.168.1.17
ping 192.168.1.1

版权声明:本文为Dream998原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Dream998/p/8540796.html