Linux 驱动开发庖丁解牛之二 —— 模块编程
本文是建立在前面的开发环境已经成功建立的基础之上的。如果没有建立好,请参照《 Linux 驱动开发庖丁解牛之一 —— 开发环境的建立》。
已经有很多文档讲述模块编程,个人觉得《 The Linux kernel module programming guide 》是最详尽的。本文不再立足于从理论上去阐述模块编程的相关知识,而着重从实践的基础上去掌握模块编程,领悟模块编程的实质。当然,具备足够的理论知识才能从实践出发,所以,本文档尽量配合《 Linux Device Driver 》第三版的第二章,以及讲述模块编程最完善的文档《 The Linux kernel module programming guide 》。下面,我们从实践开始出发吧。
1. 人之初( hello world )
/*
* hello.c - The first kernel module programming
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_ALERT */
#include <linux/init.h>
MODULE_LICENCE( “ Dual BSD/GPL ” );
static int hello_init(void)
{
printk(KERN_INFO "Hello world\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO "Goodbye world\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR(“dreamice, jyjiang2005@gmail.com ”);
MODULE_DESCRIPTION(“The first module program”);
MODULE_VERSION(“V1.0”);
MODULE_ALIAS(“Chinese: ren zhi chu”);
Makefile:
obj-m := hello.o
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(RM) *.o *.ko *.mod.c Module.symvers
现在,我们一步一步来解析这个最简单的hello world 模块程序。
1. /linux/module.h 这个是必须的。这个头文件包含了对模块结构的定义以及相关信息。
2. module_init 和 module_exit 这两个函数是必须的。 module_init 就好比应用程序的 main 函数,没有 main 函数,应用程序将不知道从哪里开始执行。
3.关于 printk ,在 ldd3 的第四章有详细的说明,这个可以说是内核调试的一个基本手段。
4. MODULE_LICENCE , MODULE_AUTHOR , MODULE_DESCR
相关文档:
1.2.2 LAPIC
收到来自IOAPIC的中断消息后,LAPIC会将该中断交由CPU处理。和IOAPIC比较,LAPIC具有更多的寄存器以及更复杂的机制。但对于处理来自IOAPIC的中断消息,最重要的寄存器还是IRR、ISR以及EOI。
图1-4显示了x86平台上,IRR和ISR的格式:
图1-4 IRR、ISR构成
与PIC中的IRR、ISR不同的是,LAPIC的ISR、 ......
今天终于把OmapL137的板子跑起了Linux和其带的demo。合众达对这个板子东西做的很少,把omapl137的特点都没有展示出来。可就苦了我们这些想要用这个片子的人了。国内玩这个的人还不多,所有资料就硬着头皮慢慢磨吧。
前段时间uboot是由dsp那边用nandwrite工程写进来的,其校验方式和uboot的ecc校验似乎有冲突, ......
一:前言
I2c是philips提出的外设总线.I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员
的布线.另外,I2C是一种多主机控制总线.它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以.而
I2C 是基于multi master机制.一同总线上可允许多个master.关于I2C协议的知 ......
写在前面的话
Linux Device Driver 尝试着看了好几遍,总感觉理解不够透彻,很多东西经不住问,
才深深的意识到,要走进浩瀚无边的 Linux 世界,并不是一蹴而就的事情。我决心从理论到
实践,再一次走一边这本书,同时记录下自己的心得,和大家一起分享,一起讨论,一起进
步。
&nb ......