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
相关文档:
linux中关于链接类型分为硬链接和软链接
硬链接指令 ln 文件 链接名称
软链接指令 ln -s 文件 链接名称
共同点:
都可以通过链接名称去访问被链接的文件
不同点:
硬链接会产生一个和源文件相同的文件 不论大小和属性
删除源文件不会对链接文件产生影响
&nbs ......
在看LKD(第二版)第六章(中断和中断处理程序)的时候,刚开始接触到中断线号和共享中断线的时候半天愣是没有想明白,原来理解的中断和中断和中断处理程序就是通过中断线号来进行关联,硬件发生中断,然后通过中断线号查找对应的中断处理程序,最后中断处理程序返回,此次中断则处理完毕,没想 ......
一:前言
I2c是philips提出的外设总线.I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员
的布线.另外,I2C是一种多主机控制总线.它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以.而
I2C 是基于multi master机制.一同总线上可允许多个master.关于I2C协议的知 ......
oracle RAC 9.2.0.4升级到9.2.0.8
操作系统平台:Red Hat Enterprise Linux AS release 3
准备工作:
1. Check Tablespace Sizes and Set Parameter Values
&nb ......
写在前面的话
Linux Device Driver 尝试着看了好几遍,总感觉理解不够透彻,很多东西经不住问,
才深深的意识到,要走进浩瀚无边的 Linux 世界,并不是一蹴而就的事情。我决心从理论到
实践,再一次走一边这本书,同时记录下自己的心得,和大家一起分享,一起讨论,一起进
步。
&nb ......