字符设备驱动开发

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
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/lzd626/p/11973257.html
今日推荐