测试新字符设备驱动代码

news2024/11/29 5:31:03

一.  简介

上一篇文章编写了新字符设备驱动框架的代码,并编写了 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.o
  Building modules, stage 2.
  MODPOST 1 modules
  LD [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.coloradmin.cn/o/1348668.html

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

相关文章

[电磁学]大学物理陈秉乾老师课程笔记

主页有博主其他上万字的精品笔记,都在不断完善ing~ 第一讲 绪论,库仑定律 主要讲解了电磁学中的库伦定律和电场的相关概念,介绍了电荷和电磁相互作用的规律,并讲解了电场强度和电势的概念。 03:14 🎓 库伦定律:电势能与电荷的关…

学习华为企业无线网络,有这篇文章就够了。

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! •以有线电缆或光纤作为传输介质的有线局域网应用广泛,但有线传输介质的铺设成本高,位置固定,移动性差。随着人们对…

智安网络|实现安全与网络功能一体化:SASE的全新安全策略

随着企业信息化和数字化程度的不断提升,网络安全面临着前所未有的挑战。传统的网络安全模式已经无法满足日益复杂的安全需求。在这一背景下,安全访问服务边缘(SASE)崭露头角,并逐渐成为新一代网络安全架构的关键概念。…

丢失VCRUNTIME140_1.dll怎么办,多种dll问题解决方法分享

丢失VCRUNTIME140_1.dll是许多计算机用户经常遇到的问题之一。VCRUNTIME140_1.dll是一个动态链接库文件,它是Visual C Redistributable Package的一部分。Visual C Redistributable Package是微软为了支持运行使用Visual C编写的软件而提供的一个可再发行组件包。当…

SpringCloud-高级篇(十)

(1)单节点Redis问题 缓存大家都不陌生,在企业里面只要做缓存都会用到Redis,我们在使用的时候都是做的单节点部署,单节点部署是存在一些问题的,分布式缓存正是Redis的集群,正是为了解决单节点部署…

Linux调试工具—gdb

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:HEART BEAT—YOASOBI 2:20━━━━━━️💟──────── 5:35 🔄 ◀️ ⏸ ▶️ ☰ …

Django 学习教程- Django模板(Template)

系列 Django 学习教程-介绍与安装-CSDN博客 Django 学习教程- Hello world入门案例-CSDN博客 前言 在上一章节中我们使用django.http.HttpResponse() 来输出 "Hello World!"。该方式将数据与视图混合在一起,不符合 Django 的 MTV 思想。 本…

【Java进阶篇】JDK新版本中的新特性都有哪些

JDK新版本中的新特性都有哪些 ✔️经典解析✔️拓展知识仓✔️本地变量类型推断✔️Switch 表达式✔️Text Blocks✔️Records✔️封装类✔️instanceof 模式匹配✔️switch 模式匹配 ✅✔️虚拟线程 ✔️经典解析 JDK 8中推出了Lambda表达式、Stream、Optional、新的日期API等…

c++_08_操作符重载(操作符重定义) 友元

1 操作符标记 单目操作符&#xff1a; - -- * -> 等 双目操作符&#xff1a; - > < - << >> 等 三木操作符&#xff1a; ? : 2 操作符函数 2.0 前言 C编译器有能力把一个由操作…

Ubuntu之修改时区/时间

1、查看当前时间及时区状态 sudo timedatectl status # 显示当前时区为Asia/Shanghai 2、查看当前系统时间 sudo date 3、查看当前系统时间及时区 sudo date -R # 显示当前时间及对应时区&#xff0c;时区为“0800”北京时区 4、修改硬件时间 修改日期格式&#xff1a…

论虚继承的作用

虚继承 实验介绍 在上一小节中学习了多继承与多重继承,实际在开发的时候可能会遇到一种情况,既用到了多继承又用到了多重继承,这种继承方式通常又称为菱形继承。但这样一来就会产生新的问题,过多消耗空间。希望通过本小节学习能知道菱形继承以及产生的问题和解决方式。 …

buuctf-Misc 题目解答分解103-105

103.[GKCTF 2021]签到 追踪流发现类似flag 字符 f14g 下面有大量的是16进制字符 64306c455357644251306c6e51554e4a5a3046355355737764306c7154586c4a616b31355357704e65556c7154586c4a616b31355357704e65556c7154586c4a616b31355357704e65556c7154586c4a616b31355357704e655…

动态内存管理篇

为什么要动态内存分配&#xff1f; 之前&#xff0c;我们向内存申请空间&#xff0c;有两种方式&#xff0c;一种是定义变量&#xff0c;一种是建立数组&#xff1b;但是&#xff0c;这两种方式都有缺陷&#xff0c;创建的空间大小是固定的&#xff0c;在程序的运行过程中&…

操作系统(Operator System)

这里写目录标题 1. 什么是操作系统2. 主要功能3. 计算机的层状结构4. 什么叫做管理5. 总结6. 为什么要有操作系统7. 最后 1. 什么是操作系统 操作系统&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&#xff1a;OS&#xff09;是一组主管并控制计算机操作、运…

PostgreSQL PG的流复制搭建

注: 本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。【PostgreSQL】PG的流复制搭建 - 课程体系 - 云贝教育https://www.yunbee.net/Home/News/detail/article_id/510.html 一 、主备机…

HarmonyOS资源分类与访问

资源分类与访问 应用开发过程中&#xff0c;经常需要用到颜色、字体、间距、图片等资源&#xff0c;在不同的设备或配置中&#xff0c;这些资源的值可能不同。 应用资源&#xff1a;借助资源文件能力&#xff0c;开发者在应用中自定义资源&#xff0c;自行管理这些资源在不同…

仿网易云音乐网站PHP源码,可运营的原创音乐分享平台源码,在线音乐库系统

源码介绍 使用PHP和MYSQL开发的原创音乐分享平台源码&#xff0c;仿网易云音乐网站。用户可以在网站上注册并上传自己的音乐作品&#xff0c;系统内置广告系统&#xff0c;为网站创造收入来源。 安装教程 1.导入sql.sql 2.修改 includes\config.php 数据库信息和网址都改成…

【教3妹学编程-算法题】一年中的第几天

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开森。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;经过了一周多的寒潮&#xff0c;天气总算暖和些了。 2哥&#xff…

最新ChatGPT网站AI系统源码,附详细搭建教程/支持GPT4.0/AI绘画/GPT语言对话/DALL-E3文生图/自定义知识库

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

搭建 Mac系统Arduino + MindPlus开发环境

搭建 Mac系统Arduino MindPlus开发环境 1.概述 2024年1月1号&#xff0c;元旦大家的安排丰富多彩&#xff0c;在这一天中我的安排依旧坚持初心&#xff0c;牢记使命。学习是我的起点也是我的终点&#xff0c;只要活着就要用知识丰富自己的生活。 今天是一个有意义的日子&…