1 首先写一个字符设备源文件 xxx.c
字符设备驱动程序的框架结构
/*文件打开函数*/
int scull_open(struct inode *inode, struct file *filp);
/*文件释放函数*/
int scull_release(struct inode *inode, struct file *filp);
/*读函数*/
static ssize_t scull_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos);
/*写函数*/
static ssize_t scull_write(struct file *filp, const char __user *buf, size_t size, loff_t *ppos);
/* seek文件定位函数 */
static loff_t scull_llseek(struct file *filp, loff_t offset, int whence);
/*文件操作结构体*/
static const struct file_operations scull_fops ={};
/*设备驱动模块加载函数*/
static int sculldev_init(void);
/*模块卸载函数*/
static void sculldev_exit(void);
2 编写头文件xxx.h
3 编写Makefile
完成以上3个步骤后编译make
生成xxx.ko
安装到系统内
sudo insmod xxx.ko
查看驱动设备
cat /proc/devices
前面的数字为主设备号,如果与已有设备号冲突,则需要修改主设备号
创建设备节点
sudo mknod xxxx c AA BB
上边xxxx 代表设备驱动的名称 c 代表字符设备 AA 主设备号 BB次设备号
可以用 ls -al xxxx 查看驱动设备的相关信息
4 编写应用程序main.c 测试驱动程序
编译并执行
执行时需要加sudo