Linux驱动修炼之道

2014-11-24 08:34:46 · 作者: · 浏览: 2

module.h包含可装载模块需要的大量符号和函数定义,包含init.h的目的是指定初始化和清除代码,struct file是在中定义的。


注册字符设备使用


int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);


移除字符设备使用


int unregister_chrdev(unsigned int major, const char *name);


init函数是在insmod时被调用的,exit函数是在rmmod时被调用的。


使用命令 cat /proc/devices 可以查看设备的主设备号。


如果内核没有为我们生成设备文件,我们需要手动生成:


mknod /dev/led_driver c 234 0


__init标记表示该函数只在初始化期间使用,在模块被装载后,模块装载器就会将初始化函数扔掉,这样可将函数占用的内存释放出来。


__exit修饰的函数只在模块卸载或系统关闭时被调用,如果模块被直接内嵌到内核中,或者内核的配置不允许卸载模块,则被标记为__exit的模块将被简单丢弃。


驱动程序:



测试程序:



效果:此时LED灯也轮流闪烁。