开发者学堂课程【物联网开发 - Linux驱动开发实操演练:字符设备驱动06】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/657/detail/10878
字符设备驱动06
字符设备号框架代码的验证
1、代码框架的验证流程
代码写完后,进行代码的编译工作,观察代码是否存在语法上的错误,如果存在错误,进行修改,将代码加载到内核中执行,观察在内核执行中是否存在其他问题。
2、实际操作展示
将代码保存,把 demo 程序放入 ubuntu 操作系统中,
接下来 make clean 进行清除,将 PLAT?=aem 修改为 PLAT?=X86
内核的路径为:
KERNDIR:=/LIB/modues/s(shell uname -r)/bulid
清除完成后,打开 democ 确认一下,编写完成后,在 erroc 出现语法错误。
首先 fops‘has initial izer intializer but incomplete type 不匹配的一些数据类型,以及 imolicit declaration of function ‘cedv -init’等类型的错误,函数并未声明。
不匹配的一些数据类型和函数并未声明的错误类型,说明在使用过程中,在 alloc-chrdev-region 并未包含,并未进行声明。
所以需要去包含同文件,两个同文件分别位于
#inux<LINUX/cdev,h>
#linux/fs.>
操作系统同当中
alloc -chrdev-region
是由 char-dev.c 定义的,在源码工程当中,内核源码使用 linux4.39版本,在linux头文件中存在 cdv.H,点入存在 cdev-init、cdev-add 等函数声明。
输入 demo,进行编译,并未包语法错误,字符驱动成功后
产生 demo.ko 文件,则可使用该模块
3、字符设备驱动注销与删除
进项内核打印信息的清除,并未发现 demo.ko 驱动
对 demo.ko 进行加载,对打印信息使用dmesg密令进行查看
得到 major=247 的主设备号
对应的三个设备号,由012次设备号加上主设备号组成,代表三个设备,59行执行成功后。
Printk (KERN-INFO “---%s---%s---%d---\n’’,-FILE-’-’FUNC
-’-LINE-)
代表前列步骤均实行成功
字符设备添加到内核中
将字符设备从内核中卸载,输入1-demos 对应着 代表着71行成功执行
Printk(kern-info “---%s---%s---%d---\n’’,-FILE-,-FUNC-,-LINE-)}
Unregister-chrdev-region (devno ,count)注销设备号成功
4、检验工作
字符设备驱动框架构建完成过后进行测试正确性,再次插入 demo.Ko dmesg,主设备号仍然是247,则表示字符设备框架配置成功。