基于android8.1(kernel4.4)添加字符设备驱动

本文是基于android8.1的rockchip平台添加一个字符型设备驱动,此设备有四个可读写的寄存器,将其命名为virtualio,详细添加步骤如下,具体代码见最后网盘分享

1.kernel drivers目录新建virtualio目录
基于android8.1(kernel4.4)添加字符设备驱动

2.在virtualio目录新建virtualio.h和virtualio.c以及编译需要用到的Kconfig和Makefile文件;
基于android8.1(kernel4.4)添加字符设备驱动

3.在virtualio.h中定义需要用到的数据结构
基于android8.1(kernel4.4)添加字符设备驱动

4.在virtualio中添加设备驱动的相关函数
4.1:定义设备操作函数集合并实现系统调用时所需要的调用设备的操作函数,需要实现的是virutalio_open, virtualio_release, virtualio_read以及virtualio_write四个函数
基于android8.1(kernel4.4)添加字符设备驱动
基于android8.1(kernel4.4)添加字符设备驱动
基于android8.1(kernel4.4)添加字符设备驱动
基于android8.1(kernel4.4)添加字符设备驱动

4.2:proc文件系统中virtualio设备的读写函数集合定义以及读写函数实现
基于android8.1(kernel4.4)添加字符设备驱动

4.3:模块加载和模块卸载函数实现
基于android8.1(kernel4.4)添加字符设备驱动
基于android8.1(kernel4.4)添加字符设备驱动

5.补充编译相关的文件
5.1:drivers目录下的Kconfig文件最后一行添加
基于android8.1(kernel4.4)添加字符设备驱动

在drivers/virtualio目录下的Kconfig文件添加如下代码,默认不编译这个设备驱动
基于android8.1(kernel4.4)添加字符设备驱动
这两步是为了在make menuconfig的时候选择是否编译此设备驱动到内核镜像中,在make menuconfig命令执行并选择是否编译后,会在.config中生成CONFIG_VIRTUALIO宏开关,这个宏开关在Makefile文件中需要用来判定是否需要编译此设备驱动

如下图,在Devices Drivers目录下可以看到这个设备驱动,选中输入Y后保存退出:
基于android8.1(kernel4.4)添加字符设备驱动

5.2:在drivers目录下和Makefile和drivers/virtualio/目录下的Makefile文件添加如下内容,这个步骤是为了编译virtualio.c设备驱动文件
基于android8.1(kernel4.4)添加字符设备驱动
基于android8.1(kernel4.4)添加字符设备驱动

6.单独编译内核烧录相关镜像到板子里面后重启,在dev/目录和proc目录下会生成设备操作的节点
基于android8.1(kernel4.4)添加字符设备驱动

相关源代码
链接:https://pan.baidu.com/s/1oQ3IlIm3tof6MF6MvbvVwQ
提取码:ah4d