测试新字符设备驱动代码

一.  简介

上一篇文章编写了新字符设备驱动框架的代码,并编写了 LED灯IO初始化工作,也编写了Led的开与关函数。文章地址如下:

向新字符设备驱动代码框架中添加Led功能函数-CSDN博客

本文对所完成的新字符设备驱动代码进行测试。通过测试程序(即应用程序)调用 驱动代码,从而驱动 LED灯的开与灭。

二.  测试新字符设备驱动代码

1.  准备测试程序

这里所使用的测试程序,即应用程序,是与 前面 2_led实验所使用是一样的。

所以,可以将 2_led工程中的测试程序拷贝过来,即拷贝 2_led工程下 led_app.c文件到 3_newchrled工程下:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ cp ../2_led/led_app.c ./

编译测试程序:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ arm-linux-gnueabihf-gcc led_app.c -o led_app

2.   编译驱动代码

编译 3_newchrled工程,即编译编写的新字符设备驱动框架代码:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ make
make -C /home/wangtian/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga M=/home/wangtian/zhengdian_Linux/Linux_Drivers/3_newchrled modules
make[1]: 进入目录“/home/wangtian/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga”CC [M]  /home/wangtian/zhengdian_Linux/Linux_Drivers/3_newchrled/newchrled.oBuilding modules, stage 2.MODPOST 1 modulesLD [M]  /home/wangtian/zhengdian_Linux/Linux_Drivers/3_newchrled/newchrled.ko
make[1]: 离开目录“/home/wangtian/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga”
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$

确认是否生成 驱动文件 newchrled.ko:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ ls -l
总用量 44280
-rw------- 1 wangtian wangtian 216416256 12月 29 18:29 core
-rwxrwxr-x 1 wangtian wangtian     10588 1月   1 18:08 led_app
-rw-rw-r-- 1 wangtian wangtian       868 1月   1 18:07 led_app.c
-rw-rw-r-- 1 wangtian wangtian       288 12月 28 16:54 Makefile
-rw-rw-r-- 1 wangtian wangtian        77 1月   1 18:10 modules.order
-rw-rw-r-- 1 wangtian wangtian         0 1月   1 01:21 Module.symvers
-rw-rw-r-- 1 wangtian wangtian      4463 1月   1 01:33 newchrled.c
-rw-rw-r-- 1 wangtian wangtian        66 12月 29 13:16 newchrled.code-workspace
-rw-rw-r-- 1 wangtian wangtian      6505 1月   1 18:10 newchrled.ko
-rw-rw-r-- 1 wangtian wangtian      1324 1月   1 01:33 newchrled.mod.c
-rw-rw-r-- 1 wangtian wangtian      2604 1月   1 01:33 newchrled.mod.o
-rw-rw-r-- 1 wangtian wangtian      4616 1月   1 18:10 newchrled.o
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$

可以看出生成了  设备驱动文件。下面可以对驱动代码进行测试了。

3.  加载驱动模块并测试

(1)  拷贝驱动与测试程序

将 驱动程序与测试程序拷贝到开发板根文件系统 /lib/modules/4.1.15/目录下。在 3_newchrled工程下。

注意:

(1)  这里开发板的根文件系统,是放在 ubuntu系统下的。开发板通过 NFS服务挂载的方式将 根文件系统挂载在开发板运行的。即根文件系统rootfs 没有放在 开发板的 nand-Flash上。

(2) 这里拷贝命令,需要加 管理员权限,即 sudo 权限。

拷贝 驱动程序到开发板:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ sudo cp newchrled.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f
[sudo] wangtian 的密码: 
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ 

拷贝 测试程序到开发板:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/3_newchrled$ sudo cp led_app /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f

开发板上电后,进入根文件系统下,进入 /lib/modules/4.1.15/目录下:

/ # cd /lib/modules/4.1.15/

(2) 加载驱动模块

执行 modprobe 命令加载驱动模块:

/lib/modules/4.1.15 # modprobe newchrled.ko 
modprobe: module newchrled.ko not found in modules.dep
/lib/modules/4.1.15 # 

提示说明,需要 modules.dep文件,前面文章提到过,这个问题的解决是:

在第一次 modprobe命令加载驱动模块时,必须运行 depmod命令。执行 depmod命令:

/lib/modules/4.1.15 # depmod

重新运行 modprobe命令继续 加载驱动模块:

/lib/modules/4.1.15 # modprobe newchrled.ko

确定驱动模块是否加载成功:运行 lsmod命令或 "cat /proc/devices" 命令

这里运行 cat /proc/devices 命令查看设备,顺便看下分配的主设备号:

(3)  手动创建设备节点。

这里手动创建设备节点,上面可以看到,所分配的主设备号为 249。所以创建设备节点命令如下:

/lib/modules/4.1.15 # mknod /dev/newchrled c 249 0

查看创建的设备节点:

/lib/modules/4.1.15 # ls -l /dev/newchrled 
crw-r--r--    1 0        0         249,   0 Jan  1 00:21 /dev/newchrled

(4)  进行测试

打开 led 灯:

/lib/modules/4.1.15 # ./led_app /dev/newchrled 1
led_release
/lib/modules/4.1.15 # 

可以看到,这时开发板上的红灯:

可以看到,这时开发板上的红灯亮了。

关闭 led灯:

/lib/modules/4.1.15 # ./led_app /dev/newchrled 0
led_release
/lib/modules/4.1.15 # 

这时可以看开发板上的红色灯是否灭了:

可以看到,红色灯灭了。说明驱动程序没有问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用anaconda创建notebook工程

1.由于每个工程使用的环境都可能不一样,因此一个好的习惯就是不同的工程都创建属于自己的环境,在anaconda中默认的环境是base: //括号中名字,代表当前的环境 (base)dragonmachine: $ conda create --nameexample2.激活环境 // 环…

14.用户管理

目录 1、权限表 1、user表 1.用户列 2.权限列 3.安全列 4.资源控制列 2、db表和host 表 1.用户列 2.权限列 3. tables_priv 表和 columns _priv 表 4.procs_priv 表 2、账户管理 1. 登录和退出MySQL服务器 2、创建普通用户: 1.使用CREATE USER语创建…

基于Java SSM框架实现健康管理系统项目【项目源码】

基于java的SSM框架实现健康管理系统演示 JSP技术 JSP是一种跨平台的网页技术,最终实现网页的动态效果,与ASP技术类似,都是在HTML中混合一些程序的相关代码,运用语言引擎来执行代码,JSP能够实现与管理员的交互&#xf…

[react]脚手架create-react-app/vite与reac项目

[react]脚手架create-react-app/vite与reac项目 环境问题描述create-react-app 脚手架根据脚手架修改项目结构安装脚手架注入配置文件-config文件夹package.json文件变更删除 serviceWorker.js新增reportWebVitals.js文件更新index.js文件 脚手架creat-react-app 缺点 vite 脚手…

基于Springboot实现天天生鲜销售电商平台

SSM毕设分享 基于Springboot实现天天生鲜销售电商平台 1 项目简介 Hi,各位同学好,这里是郑师兄! 今天向大家分享一个毕业设计项目作品【】 师兄根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 …

中文字符占用字节即相关原理(实现中文(中英混合)字符串的反转)

如有不对欢迎指正。 目录 一.ASCLL字符和中文字符 1.使用无符号数表示的原因(对于中文字符): 2.但是并不是所有情况都是用无符号数(以下目前只是猜测,如有问题欢迎指正) : 1. 什么时候使用无符号数表示: 2. 不需要使用的情况: …

Access数据库C#读写验证

1、数据库简介 Access数据库是一个相当古老的文件型数据库,主打一个简单方便,没有复杂的安装过程,没有庞大的后端管理,整个数据库就是一个文件。可以像普通文件一样复制和修改,可以同时读写。 在小型系统中&#xff0c…

Xgboost分类模型的完整示例

往期精彩推荐 数据科学知识库机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归PySpark大数据处理详细教程 定义问题 UCI的蘑菇数据集的主要目的是为了分类任务,特别是区分蘑菇是可食用还是有毒。这个数据集包含了蘑菇的各种特征,如…

系统学习Python——装饰器:函数装饰器-[装饰器状态保持方案:外层作用域和非局部变量]

分类目录:《系统学习Python》总目录 我们在某些情况下可能想要共享全局状态。如果我们真的想要每个函数都有自己的计数器,要么像前面的文章那样使用类,要么使用Python3.X中的闭包函数(工厂函数)和nonlocal语句。由于这…

听GPT 讲Rust源代码--library/alloc

File: rust/library/alloc/benches/slice.rs 在Rust源代码中,rust/library/alloc/benches/slice.rs文件的作用是对&[T]类型(切片类型)进行性能基准测试。该文件包含了对切片类型的一系列操作的基准测试,例如切片迭代、切片排序…

0101包冲突导致安装docker失败-docker-云原生

文章目录 1 前言2 报错3 解决结语 1 前言 最近在学习k8s,前置条件就是要安装指定版本的docker,命令如下 yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.62 报错 file /usr/libexec/docker/cli-plugins/docker-buildx fr…

用 print 太慢了!强烈推荐这款Python Debug工具~

作为程序员,我们都深知调试(Debug)在编程过程中的重要性。 然而,使用传统的"print"语句进行调试可能效率较低,今天,笔者将推荐一款独具一格的Python调试工具——Reloadium。 Reloadium为IDE添加…

sparkstreamnig实时处理入门

1.2 SparkStreaming实时处理入门 1.2.1 工程创建 导入maven依赖 <dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming_2.12</artifactId><version>3.1.2</version> </dependency> <dependency…

C++初阶——基础知识(内联函数)

目录 1.内联函数 内联函数的示例代码 1.内联函数 是一种 C 中的函数定义方式&#xff0c;它告诉编译器在每个调用点上插入函数体的副本&#xff0c;而不是像普通函数那样在调用时跳转到函数体所在的地址执行。这样可以减少函数调用的开销&#xff0c;提高程序的执行效率。 …

从入门到精通,30天带你学会C++【第十天:猜数游戏】

目录 Everyday English 前言 实战1——猜数游戏 综合指标 游玩方法 代码实现 最终代码 试玩时间 必胜策略 具体演示 结尾 Everyday English All good things come to those who wait. 时间不负有心人 前言 今天是2024年的第一天&#xff0c;新一年&#xff0c;新…

计算机毕业设计——springboot养老院管理系统 养老院后台管理

1&#xff0c;绪论 1.1 背景调研 养老院是集医疗、护理、康复、膳食、社工等服务服务于一体的综合行养老院&#xff0c;经过我们前期的调查&#xff0c;院方大部分工作采用手工操作方式,会带来工作效率过低&#xff0c;运营成本过大的问题。 院方可用合理的较少投入取得更好…

声明式导航传参详情

1 动态路由传参 路由规则path ->/article/:aid 导航链接 <router-link to"/article/1">查看第一篇文章</router-link> 组件获取参数: this.$route.params.aid 如果想要所有的值&#xff0c;就用this. $route. params 注意&#xff1a;这两个必须匹配…

Spring Cloud Function SpEL注入漏洞(CVE-2022-22963)分析

一、概述 2022年3月24日&#xff0c;Pivotal修补了Spring Cloud Function中一个关键的服务器端代码注入漏洞&#xff08;Spring表达式语言注入&#xff09;&#xff0c;该漏洞有可能导致系统被攻击。Spring是一种流行的开源Java框架&#xff0c;该漏洞与另一个相关的远程代码执…

Dirichlet Process (徐亦达老师)狄利克雷过程

混合高斯模型的例子 混合高斯模型 混合高斯模型&#xff08;Mixture of Gaussians&#xff0c;简称GMM&#xff09;是一种概率模型&#xff0c;用于对复杂的数据分布进行建模。它是由多个高斯分布组合而成的混合模型&#xff0c;每个高斯分布&#xff08;称为组件&#xff09;…

知识库问答LangChain+LLM的二次开发:商用时的典型问题及其改进方案

前言 如之前的文章所述&#xff0c;我司下半年成立大模型项目团队之后&#xff0c;我虽兼管整个项目团队&#xff0c;但为让项目的推进效率更高&#xff0c;故分成了三大项目组 第一项目组由霍哥带头负责类似AIGC模特生成系统第二项目组由阿荀带头负责论文审稿GPT以及AI agen…