最近一直在看linux网络相关的东西, 做为提高准备自己动手写个网卡驱动, 手上刚好有一块mini2440, 所以准备以mini2440的DM9000下刀。当然本人也是第一次写网卡驱动, 所以希望大家看到不足的地方多海函和指教。
今天, 我们先搭一个网卡驱动的框架, 并不设计实际硬件。
首先先包含今天会用到的必要的头文件:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
定义调试和打印用的宏:
#undef LYDM9K_DEBUG
#define LYDM9K_DEBUG
#ifdef LYDM9K_DEBUG
#define printdbg(fmt, args...) \
printk("lydm9k[%s]:\t" fmt, __func__, ##args)
#else
#define printdbg(fmt, args...) \
do {} while(0)
#endif /* LYDM9K_DEBUG */
#define dm9kmsg(fmt, args...) \
printk("lydm9k[%s]:\t" fmt, __func__, ##args)
编写module注册函数和卸载函数:
static int __init lydm9k_init(void)
{
dm9kmsg("insert module lydm9k\n");
platform_device_register(&lydm9k_device);
return platform_driver_register(&lydm9k_driver);
}
static void __exit lydm9k_exit(void)
{
platform_device_unregister(&lydm9k_device);
platform_driver_unregister(&lydm9k_driver);
dm9kmsg("remove module lydm9k\n");
}
MODULE_LICENSE("GPL");
module_init(lydm9k_init);
module_exit(lydm9k_exit);
初始化网卡的device结构体: