Linux内核模块编程

1.必须的头文件:

//说明在内核编程

//说明在编写内核模块

2.针对/proc文件系统:

相关定义在

相关函数实现在/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. 定义了系统调用的列表

你可能感兴趣的:(Linux内核模块编程)