Linux2.6 DM9000驱动模编译为模块
2014-06-06 20:32
302 查看
对于linux2.6内核的源代码中,DM9000的驱动程序已经封装好了。它被加入到platform驱动中:在 linux2.6.17/drivers/net/dm9000.c:
platform是一个虚拟的地址总线,它主要用于描述SOC上的片上资源。platform所描述的资源有一个共同点,就是在CPU的总线上直接取址。
因为内核只是封装了platform_driver,所以单独编译DM9000.c网卡还是不可用的。
我们需要注册platform_device,即注册platform设备就可以使用DM9000网卡工作了。在linux2.6.17/include/linux/platform_device.h:
在 linux+v2.6.17/include/linux/ioport.h:
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设备的硬件资源:
在 linux2.6.17/drivers/net/dm9000.c添加注册platform设备:
在加载DM9000.ko之前需要mii接口模块和crc32模块。在linux-2.6.17/lib目录下有crc32.ko。在linux-2.6.17/drivers/net/目录下有mii.c。可以将此编译为模块加入到内核。DM9000的重要驱动是内核提供的源代码。这里只是简单的增加设备的硬件资源。
阅读(737) | 评论(0) | 转发(0) |
0
上一篇:linux2.6.28-tty设备驱动学习(二)
下一篇:字符设备的信号量,阻塞和非阻塞,poll实现
相关热门文章
VMware下CentOS 6编译内核...
Linux设备驱动程序
2014商派首届电商技术大会【门...
“放弃旧的”【管式螺旋输送机...
【详解】如何编写Linux下Nand ...
linux 常见服务端口
【ROOTFS搭建】busybox的httpd...
xmanager 2.0 for linux配置
什么是shell
linux socket的bug??
初学UNIX环境高级编程的,关于...
chinaunix博客什么时候可以设...
一个访问量较大网站的服务器。...
收音机驱动与v4l2架构的关系,...
如何将linux驱动改为裸机驱动(...
给主人留下些什么吧!~~
评论热议
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_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}; |
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 描述这个设备实体的一些共性和特性的标志位; |
对于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,}}; |
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); //注销设备 } |
阅读(737) | 评论(0) | 转发(0) |
0
上一篇:linux2.6.28-tty设备驱动学习(二)
下一篇:字符设备的信号量,阻塞和非阻塞,poll实现
相关热门文章
VMware下CentOS 6编译内核...
Linux设备驱动程序
2014商派首届电商技术大会【门...
“放弃旧的”【管式螺旋输送机...
【详解】如何编写Linux下Nand ...
linux 常见服务端口
【ROOTFS搭建】busybox的httpd...
xmanager 2.0 for linux配置
什么是shell
linux socket的bug??
初学UNIX环境高级编程的,关于...
chinaunix博客什么时候可以设...
一个访问量较大网站的服务器。...
收音机驱动与v4l2架构的关系,...
如何将linux驱动改为裸机驱动(...
给主人留下些什么吧!~~
评论热议
相关文章推荐
- Linux2.6 DM9000驱动模编译为模块
- 基于linux2.6.30.4内核的DM9000网卡驱动编译成模块成功ping通
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响—linux2.4单独编译驱动模块
- 基于linux2.6.30.4内核的DM9000网卡驱动编译成模块成功ping通
- Linux 2.6 内核驱动模块的编译和加载
- Linux 2.6内核的编译步骤及模块的动态加载
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 在Linux 2.6内核下编译可以加载的内核模块(转)
- Linux 2.6内核的编译步骤及模块的动态加载
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响(一)
- 在Linux 2.6内核下编译可以加载的内核模块
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 转:linux启动时对编译进内核驱动模块的加载
- 【转载】从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- Linux 2.6内核的编译步骤及模块的动态加载
- Linux 2.6内核的编译步骤及模块动态加载