字符设备驱动06 | 学习笔记

简介: 快速学习字符设备驱动06

开发者学堂课程【物联网开发 - 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

image.png

清除完成后,打开 democ 确认一下,编写完成后,在 erroc 出现语法错误。

首先 fops‘has initial izer intializer but incomplete type 不匹配的一些数据类型,以及 imolicit declaration of function ‘cedv -init’等类型的错误,函数并未声明。

不匹配的一些数据类型和函数并未声明的错误类型,说明在使用过程中,在 alloc-chrdev-region 并未包含,并未进行声明。

 image.png

所以需要去包含同文件,两个同文件分别位于

#inux<LINUX/cdev,h>

#linux/fs.>操作系统同当中

alloc -chrdev-region 是由 char-dev.c 定义的,在源码工程当中,内核源码使用 linux4.39版本,在linux头文件中存在 cdv.H,点入存在 cdev-init、cdev-add 等函数声明。

image.png

输入 demo,进行编译,并未包语法错误,字符驱动成功后

产生 demo.ko 文件,则可使用该模块

image.png

3、字符设备驱动注销与删除

进项内核打印信息的清除,并未发现 demo.ko 驱动

对 demo.ko 进行加载,对打印信息使用dmesg密令进行查看

得到 major=247 的主设备号

image.png

对应的三个设备号,由012次设备号加上主设备号组成,代表三个设备,59行执行成功后。

Printk (KERN-INFO “---%s---%s---%d---\n’’,-FILE-’-’FUNC

-’-LINE-)

代表前列步骤均实行成功

字符设备添加到内核中

将字符设备从内核中卸载,输入1-demos 对应着 代表着71行成功执行

image.png

Printk(kern-info “---%s---%s---%d---\n’’,-FILE-,-FUNC-,-LINE-)}

Unregister-chrdev-region (devno ,count)注销设备号成功

4、检验工作

字符设备驱动框架构建完成过后进行测试正确性,再次插入 demo.Ko  dmesg,主设备号仍然是247,则表示字符设备框架配置成功。

相关文章
|
9月前
|
安全 网络协议 Linux
Linux驱动开发 设备驱动的基本概念
Linux驱动开发 设备驱动的基本概念
|
4月前
|
Linux API
字符设备驱动(1):Linux字符设备驱动结构
字符设备驱动(1):Linux字符设备驱动结构
43 1
|
7月前
|
存储 Linux API
嵌入式Linux 字符设备驱动标准ioctl接口
嵌入式Linux 字符设备驱动标准ioctl接口
|
8月前
|
存储 安全 Unix
【Linux驱动】字符设备驱动
【Linux驱动】字符设备驱动
38 0
|
8月前
|
算法 Linux C语言
Linux驱动中常用的一些接口函数
Linux驱动中常用的一些接口函数
|
9月前
|
存储 Linux 文件存储
Linux驱动入门(6.1)LED驱动---设备树
Linux驱动入门(6.1)LED驱动---设备树
91 0
|
10月前
|
Linux 编译器
Linux设备驱动---字符设备驱动接口函数
Linux设备驱动---字符设备驱动接口函数
94 1
|
10月前
|
存储 缓存 Unix
Linux设备驱动程序(三)——字符驱动
本章的目的是编写一个完整的字符设备驱动,我们开发一个字符驱动是因为这一类适合大部分简单硬件设备,字符驱动也比块驱动易于理解。
188 0
|
Linux API
字符设备驱动基础知识
字符设备驱动基础知识
|
Linux 芯片
Linux驱动之I2C设备驱动
下面的代码分析主要都在注释中,会按照驱动中函数的执行顺序分析。