Linux系统驱动开发之字符设备虚拟设备实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux系统驱动开发之字符设备虚拟设备实

本系列图文(教程)均以全志H3开发板为实验板设计,字符设备驱动开发是最基础的驱动开发。其本质是按字节进行读写操作,读写数据是分先后顺序的。(LED)、按键、I(IC)、SPI、(USB)等等都是字符设备,驱动加载成功以后会在“/dev”目录下生成相应的文件,应用程序通过对“/dev/xxx进行操作即可实现对(硬件)的控制”。应用程序中的每一个系统调用,都在驱动程序中有相应的驱动函数,(Linux)内核文件中存在着一个内核驱动操作函数集合,以结构体file_opera(ti)ons展现。

static inline int register_chrdev(unsigned int maj(or), const char *name,const struct file_operations *fops)static inline void unregister_chrdev(unsigned int major, const char *name) 最后我们需要在驱动中加入LICENSE 信息和信息,其中LICENSE 是必须添加的,否则的话编译的时候会报错,信息非必须。

添加函数为:

MODULE_LICENSE()MODULE_AUTHOR() Linux如何判断当下的设备就是程序想要调用的那一个呢,通过设备号对设备进行唯一匹配。有动态和静态两种分配方式,我们先讲解旧的驱动设备注册方式(静态),也就是使用register_chrdev函数注册设备。其三个参数分

别是主设备号(手动分配),设备名称(字符串),函数集合指针结构体。主设备号的可选范围是0-4095,所以使用之前先查看开发板的Linux系统还有哪些设备号没有用,使用命令cat /proc/devices查看。

最后就是完整的编写驱动和应用程序,驱动程序完成设备打开,读写操作,使用一个虚拟读写设备做一个简单的例子。借助copy_to_user(将内核态数据复制到用户态)和printk函数(内核态)完成(模拟)。

共分以下几步

•编写驱动程序(对printk的解释内核态,设备注册等)

•编写App程序(open等函数)

•编译驱动程序成.ko 测试(编写Makefile文件)

•编译App

•(下载)到(TF)的rootfs分区下

•找到相应文件夹下加载模块insmod **.ko

•查看系统中的所有设备cat /proc/devices

•创建设备节点文件mknod /dev/chrdevbase c 200 0 然后再执行上一步查看设备是否多了chrdevbase

c表示字符设备,200是主设备号,0是次设备号

•如果App要读写chrdevbase设备,直接操作/dev/chrdevbase 就可以

读操作测试./chrdevbaseApp /dev/chrdevbase 1

相关文档
最新文档