1:驱动模块的加载与卸载
1.1:module_init(xxx_init); //注册模块加载函数,通过insmod或modprobe命令加载驱动的时候,xxx_init 这个函数就会被调用。
例如:insmod chrdevtest.ko ; modprobe chrdevtest.ko
1.2:module_exit(xxx_exit); //注册模块卸载函数,通过rmmod或modprobe -r命令加载驱动的时候,xxx_init 这个函数就会被调用。
例如:rmmod chrdevtest.ko ; modprobe -r chrdevtest.ko
2:字符设备注册与注销
2.1:static inline int register_chrdev(unsigned int major, const char*name,const struct file_operations*fops);
参数1为主设备号;参数2为设备名字;参数3为操作函数集合;一般在xxx_init里调用
2.2:static inline void unregister_chrdev(unsigned int major, const char*name);
参数1为主设备号;参数2为设备名字;一般在xxx_exit里调用
3:实现设备的具体操作函数
3.1:取决与具体实现
4:设备号分配
4.1:设备号(就是unsigned int型)分为主设备号(高12位),次设备号(第20位)
4.2:静态分配:在注册设备时,指定主设备号;注销设备时调用unregister_chrdev注销这个设备号及设备
4.3:动态分配:在注册设备之前,调用
alloc_chrdev_region,系统就会分配一个没有使用得设备号;注销设备时调用unregister_chrdev_region回收设备号
5:创建设备节点文件
5.1:驱动加载成功需要在/dev 目录下创建一个与之对应的设备节点文件,应用程序就是通过操作这个设备节点文件来完成对具体设备的操作
例如:
mknod /dev/chrdevtest c 200 0