摘要: 在此,我们将编写一个模块,其中有一个中断函数,当内核接收到某个 IRQ 上的一个中断时会调用它。先给出全部代码,读者自己调试,把对该程序的理解跟到本贴后面。—————————————-#include linux/module.h#include linux/init.h#include linux/interrupt.hstatic int irq;static char *interface;//MODULE_PARM_DESC(interface,”A network interface”);2.4内核中该宏的用法molule_parm(interface,charp,064 阅读全文
posted @ 2010-12-24 12:24 flyxiang 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 模块编程属于内核编程,因此,除了对内核相关知识有所了解外,还需要了解与模块相关的知识。1.应用程序与内核模块的比较为了加深对内核模块的了解,表一给出应用程序与内核模块程序的比较。表一 应用程序与内核模块程序的比较C语言应用程序内核模块程序使用函数Libc库内核函数运行空间用户空间内核空间运行权限普通用户超级用户入口函数main()module_init()出口函数exit()module_exit()编译Gcc –cMakefile连接Gccinsmod运行直接运行insmod调试Gdbkdbug, kdb,kgdb等从表一我们可以看出,内核模块程序不能调用libc库中的函数,它运行在内核空间 阅读全文
posted @ 2010-12-24 11:54 flyxiang 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),我们简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kernel)。单内核的最大优点是效率高,因为所有的内容都集成在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。一、 什么是模块模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或 阅读全文
posted @ 2010-12-24 11:53 flyxiang 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 6.1下半部下半部的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作。对于在上半部和下半部之间划分工作,尽管不存在某种严格的规则,但还是有一些提示可供借鉴:(1)如果一个任务对时间非常敏感,将其放在中断处理程序中执行。(2)如果一个任务和硬件相关,将其放在中断处理程序中执行。(3)如果一个任务要保证不被其它中断打断,将其放在中断处理程序中执行。(4)其它所有任务,考虑放在下半部执行。当我们开始尝试写自己的驱动程序的时候,读一下别人的中断处理程序和相应的下半部会令你受益匪浅。现在的问题是:下半部具体放到以后的什么时候去做呢?下半部并不需要指明一个确切时间,只要把这些任务推迟一点,让他 阅读全文
posted @ 2010-12-24 11:47 flyxiang 阅读(766) 评论(0) 推荐(0) 编辑