字符设备驱动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,则表示字符设备框架配置成功。

相关文章
|
安全 物联网 Linux
IoT技术-用HackRF做一个私网LTE基站
本文中涉及到国家通信安全。请不要随便尝试。如若尝试后造成任何后果与本文作者无任何关系。
2097 1
IoT技术-用HackRF做一个私网LTE基站
|
存储 缓存 NoSQL
Leveldb学习笔记:leveldb的使用与原理探究
Leveldb学习笔记:leveldb的使用与原理探究
Leveldb学习笔记:leveldb的使用与原理探究
|
10月前
|
人工智能 智能设计 云计算
云工开物合作动态丨中国传媒大学与阿里云签署校企合作协议
2024年4月26日,中国传媒大学与阿里云在校企合作签约仪式上达成战略合作。中传校长张树庭表示,此次合作将加速推进人工智能行动计划,助力AI人才培养和学术研究。阿里云副总裁刘湘雯介绍,将以“云工开物”项目为支点,推动AI设计、计算广告等领域的深入合作。双方还就课程开发、实践平台建设等进行洽谈,并签署合作协议。当日,阿里云专家为中传学子带来多场精彩讲座。
|
12月前
|
API
鸿蒙开发:自定义一个英文键盘
实现方式呢,有很多种,目前采用了比较简单的一种,如果大家采用网格Grid组件实现方式,也是可以的,但是需要考虑每行的边距以及数据,还有最后两行的格子占位问题。
230 4
鸿蒙开发:自定义一个英文键盘
|
数据采集 搜索推荐 前端开发
`<Link>`标签和`<a>`标签在 SEO 方面有什么不同?
`&lt;Link&gt;`标签和`&lt;a&gt;`标签在SEO方面的主要区别在于用途和搜索引擎的处理方式。`&lt;a&gt;`标签用于创建可点击的超链接,对用户和搜索引擎都可见;而`&lt;Link&gt;`标签常用于预加载资源或定义文档关系,对搜索引擎的影响较小。
|
机器学习/深度学习 存储 人工智能
GitHub 上受欢迎的项目
GitHub 上受欢迎的项目
|
Ubuntu 网络协议
Ubuntu 系统中网络总是断掉重新连接
Ubuntu 系统中网络总是断掉重新连接
739 5
|
应用服务中间件 nginx Docker
connect() failed (113: No route to host) while connecting to upstream
connect() failed (113: No route to host) while connecting to upstream
633 0
|
运维 数据可视化 搜索推荐
零代码、低代码、全代码的区别
如果您留意过这两年IT行业的新词汇,一定会注意到零代码、低代码这几个新事物。此前,阿里云智能总裁、达摩院院长张建锋在会上表示:未来的软件开发一定是碎片化的,2021年的潮流就是低代码开发,低代码开发将是2021年的行业关键词。从这句话中,我们不难发现,随着低代码、无代码在2021开年的火爆程度,俨然有逐渐成为新风口的趋势。对此,为了帮助大家更快速的了解低代码、无代码、全代码,我特地为大家整理了他们之间的区别,供大家参考学习,希望对大家有所帮助!
4184 1
零代码、低代码、全代码的区别
|
SQL 存储 数据库连接
如何使用 FreeSql 无缝接替 EF Core ?
在使用 `EF Core` 作为默认的 `ORM` 工具操作数据库时,项目中我们或许只能接触到 `DbContext` 对象,没法直接获取 `db` 数据库连接信息,假如有小伙伴想接入 `FreeSQL` 继续使用熟悉的模式,那该怎么办呢?此时我们可以这样操作,为了不影响原有项目结构的操作,又想接入 `FreeSQL` 的小伙伴们,通过上面的方式我们就可以使用 `FreeSQL` 无缝替换 `EF Core`。
515 1
如何使用 FreeSql 无缝接替 EF Core ?