Linux2.6 DM9000驱动模编译为模块
来源:互联网 发布:2017怎么在淘宝买翻墙 编辑:程序博客网 时间:2024/05/19 04:07
Linux2.6 DM9000驱动模编译为模块
对于linux2.6内核的源代码中,DM9000的驱动程序已经封装好了。它被加入到platform驱动中:
在 linux2.6.17/drivers/net/dm9000.c:
1199 static int __init
1200 dm9000_init(void)
1201 {
1202 printk(KERN_INFO "%s Ethernet Driver\n", CARDNAME);
1203
1204 return platform_driver_register(&dm9000_driver); /* search board and register */
1205 }
platform是一个虚拟的地址总线,它主要用于描述SOC上的片上资源。
platform所描述的资源有一个共同点,就是在CPU的总线上直接取址。
因为内核只是封装了platform_driver,所以单独编译DM9000.c网卡还是不可用的。
我们需要注册platform_device,即注册platform设备就可以使用DM9000网卡工作了。
在linux2.6.17/include/linux/platform_device.h:
16struct platform_device { //这个结构直接和硬件交互
17 const char * name;
18 u32 id;
19 struct device dev;
20 u32 num_resources;
21 struct resource * resource; //所描述的设备的硬件资源
22};
在 linux+v2.6.17/include/linux/ioport.h:
16 struct resource {
17 const char *name;
18 unsigned long start, end;
19 unsigned long flags;
20 struct resource *parent, *sibling, *child;
21 };
//挂在CPU上的每个独立的设备单元,都需要一段线性的地址空间来描述-查看memory map.
//resource->start描述设备实体在cpu总线上的线性起始物理地址;
//resource->end -描述设备实体在cpu总线上的线性结尾物理地址;
//resource->name 描述这个设备实体的名称,这个名字开发人员可以随意起,但最好贴切;
//
resource->flag 描述这个设备实体的一些共性和特性的标志位;
http://www.wxj.com.cn/docc/design/200907221b.jpg:
对于DM9000 的resource资源,我们需要知道一下信息:
(1) DM9000的访问基地址:即为NGCS2的基地址。注意要是物理地址。
(2) DM9000只用到一条地址线:MA2。
对于DM9000的CMD引脚:当CMD为低电平时,SD0~SD15线上传输的是地址信号。
当CMD为高电平时,SD0~SD15线上传输的是数据信号。
(3) DM9000的中断引脚: ENT14。
(4) 总线位宽:这里是16位。
在linux2.6.17/drivers/net/DM9000.h里增加DM9000设备的硬件资源:
static struct resource xx_dm9k_resource[] = {
[0] = {
.strat = NGCS2, //MA2 = 0.传输地址时使用这个地址
.end = NGCS2 + 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = NGCS2 + 4, //MA2 = 1.传输数据时使用这个地址
.end = NGCS2 + 4 + 1,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = ENT14, //中断号
.end = ENT14,
.flags = IORESOURCE_IRQ,
}
};
static struct dm9000_plat_data xx_dm9k_platdata = {
.flags = DM9000_PLATF_16BITONLY,
};
static struct platform_device xx_dm9k_device = {
.name = "DM9000",
.id = 0,
.num_resource = ARRAY_SIZE(xx_dm9k_resource),
.resource = xx_dm9k_resource,
.dev = {
.platform_data = &xx_dm9k_platdata,
}
};
在 linux2.6.17/drivers/net/dm9000.c添加注册platform设备:
static int __init
dm9000_init(void)
{
BSP_WR32((GPIO2_BASE|GPIO_IPOL), (1<<8));
printk(KERN_INFO "%s Ethernet Driver\n", CARDNAME);
platform_driver_register(&dm9000_driver); /* search board and register */
platform_device_register(&nl_dm9k_device); //注册设备
return 0;
}
static void __exit
dm9000_cleanup(void)
{
platform_driver_unregister(&dm9000_driver); //注销驱动
platform_device_unregister(&nl_dm9k_device); //注销设备
}
在加载DM9000.ko之前需要mii接口模块和crc32模块。
在linux-2.6.17/lib目录下有crc32.ko。
在linux-2.6.17/drivers/net/目录下有mii.c。可以将此编译为模块加入到内核。
DM9000的重要驱动是内核提供的源代码。
这里只是简单的增加设备的硬件资源。
- Linux2.6 DM9000驱动模编译为模块
- Linux2.6 DM9000驱动模编译为模块
- Linux2.6 DM9000驱动模编译为模块
- Linux2.6移植:DM9000驱动
- Linux2.6移植:DM9000驱动 .
- Linux2.6移植:DM9000驱动
- Linux2.6移植:DM9000驱动
- linux2.6下驱动模块编译问题
- Linux2.6 下DM9000网卡驱动
- linux2.6内核下驱动模块的编译方法
- Linux2.6驱动编译分析
- linux2.6驱动编译-常见问题
- 基于linux2.6.30.4内核的DM9000网卡驱动编译成模块成功ping通
- 基于linux2.6.30.4内核的DM9000网卡驱动编译成模块成功ping通
- Linux2.6.34下DM9000网卡驱动移植
- Linux2.6下内核模块编译
- linux2.6内核模块的编译
- 为LWIP移植DM9000驱动
- 短连接http服务器陷阱
- 游标-查询后序列值更新
- 嵌入式开发六:busybox编译根文件系统的一些错误解决办法
- 饮食男女:寂寞青年的又一选择
- windows useful tools
- Linux2.6 DM9000驱动模编译为模块
- (c++/clr 学习网址)http://www.functionx.com/vccli/index.htm
- Linux下DM9000网卡驱动实验
- 计划任务工具 cron 的配置和说明
- 实验一:嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之内核
- linux 硬连接 符号连接
- WP7控件开发(一)
- uIP无操作系统(裸机)移植
- AQA 2011年度 最佳性能测试资源 汇总