1.必须的头文件:
<linux/kernel.h>//说明在内核编程
<linux/module.h>//说明在编写内核模块
2.针对/proc文件系统:
相关定义在<linux/proc_fs.h>
相关函数实现在/kernel source directory/fs/proc/array.c中,包括:procfile_read()、proc_dir_entry包含相应的函数指针
3、L i n u x提供了一个特殊的结构i n o d e _o p e r a t i o n s,该结构存放指向所有这些函数的指针,其中包含一个指向结构f i l e_o p e r a t i o n s的指针,结构f i l e_ o p e r a t i o n s又包含指向m o d u l e_ i n p u t和m o d u l e _o u t p u t函数的指针
4. IOCTL
在U n i x中,可以使用一个称为i o c t l的特殊函数( i o c t l是输入输出控制的英文缩写)。每个设备都有属于自己的i o c t l命令,可以是读i o c t l (从进程把信息发送到内核)、写
i o c t l (把信息返回到进程)、都有或者都没有。调用i o c t l函数必须带上三个参数:适当的设备文件的文件描述符, i o c t l编号以及另外一个长整型的参数,用户可以使用这个长整型参数来传送任何信息。
内核模块的基本组成部分:
首先定义struct file_operations {
seek函数指针
device_read函数指针
device_write函数指针
readdir函数指针
select函数指针
ioctl函数指针
mmap函数指针
device_open函数指针
flush函数指针
device_release函数指针
}
然后在init_module中注册函数,主要是通过module_register_chrdev(字符类设备)注册:major_number、名字和对应的 file_operations 对象的指针
在cleanup_module中unregister相应设备module_unregister_chrdev
相应的用户态程序处理逻辑是:
open(设备名称,模式参数如0)
然后使用ioctl()发起调用
5. <sys/syscall.h>定义了系统调用的列表