测试新字符设备驱动代码

一.  简介

上一篇文章编写了新字符设备驱动框架的代码,并编写了 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,一经查实,立即删除!

相关文章

12、高可用性

什么是高可用性 高可用性不是绝对的,只有相对更高的可用性。百分之百的可用性是不可能达到的。可用性的定义不仅仅包括服务正在运行的时间段,还包括应用是否能以足够好的性能处理请求。 导致宕机的原因 在运行环境的问题中,最普通的问题是…

7-1 sdut-Collection-sort--C~K的班级(II)--笔记篇

题目 经过不懈的努力,CXK终于当上了班主任。 现在他要统计班里学生的名单,但是CXK在教务系统中导出班级名单时出了问题,发现会有同学的信息重复,现在他想把重复的同学信息删掉,只保留一个, 但是工作量太大…

LeetCode 热题 100——283. 移动零

283. 移动零 提示 简单 2.3K 相关企业 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,…

使用anaconda创建notebook工程

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

伺服电机:电子齿轮比

电子齿轮比的概念 位置控制模式下,输入的位置指令是对负载位移进行设定,而电机的位置指令是编码器单位,是对电机的位移进行进行设定,电机位置指令与输入位置指令的比例就是电子尺齿轮比。 输入的位置指令,所对应的位…

JVM内存区域与常见问题

内存结构 这里先以JDK1.8 hotspot垃圾收集器为例,讲讲每块区域存储的数据以及可能会抛的异常。 堆 存放对象实例,会出现内存溢出或内存泄露等情况。 栈 一次方法调用会产生一个栈帧,如果出现递归死循环调用栈空间满了,会出现…

【全网首发】洛谷贪心题解集合

贪心 1.P2240 【深基12.例1】部分背包问题 【深基12.例1】部分背包问题 - 洛谷 思路 万不要被题目给误导了,这道题是贪心。 所有金币都可以分开,也就是说只要按照性价比最高的取一定得到的价值最大。 性价比就是这堆金币的价值除以重量。 只需要把…

85双指针解三数之和

问题描述:给你一个包含n个整数的数组nums,判断nums中是否勋在三个元素a,b,c使得abc0,请你找出所有和为0且不重复的三元组。 求解思路:如果使用for循环的方式,n3的时间复杂度,可以采用双指针的方式,先将整个…

企业级大数据架构设计

企业级大数据架构设计 企业级大数据架构设计 又名: 学习大数据概念, 写框架(第1天) 数据架构与设计:概述与设计考虑 引言数据架构概述设计考虑因素构建数据架构的步骤 大数据的核心架构内容:构建高效和…

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语创建…

前端crypto-js 库: MD5

文章目录 什么是crypto-js安装依赖MD5 什么是crypto-js github地址: https://github.com/brix/crypto-js cryptojs文档: https://cryptojs.gitbook.io/docs/#encoders CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。 CryptoJS是一个JavaScript加密算法库&a…

免费的CISSP备考学习网站

CISSP(Certified Information Systems Security Professional)是一项高级的信息安全认证,官方认证机构是(ISC)。虽然(ISC) 提供了官方培训资料,但是很多学习资料都是商业性质的,需要付费购买。尽管如此,仍然…

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

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

二分算法

目录 二分 数的三次方根 算法模板 二分 给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。 对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 00 开始计数)。 如果数组中不存在该元素,则返回 -1…

pycharm配置pyrcc5外部工具

pyrcc5这是 PyQt5 中用来将资源文件(.qrc)转换为 Python 文件的工具。类似地,如果你想在 PyCharm 中配置 pyrcc5 将 .qrc 文件转换为 .py 文件的外部工具,你可以遵循以下步骤: 打开 PyCharm 的设置: 选择 File > Se…

GO语言基础笔记(九):工程实践

单元测试(Unit Testing) 单元测试是指对软件中的最小可测试单元进行检查和验证。在Go语言中,可以使用内置的testing包来进行单元测试。进行单元测试时,您应该关注以下几个要点: 测试代码的独立性:确保每个…

P1163 银行贷款

P1163 银行贷款 P1163 银行贷款 题意 1.从银行贷款后,在一段时间内每月偿还固定的分期付款。这个问题要求计算出贷款者向银行支付的利率。假设利率按月累计。 2.三个用空格隔开的正整数。第一个整数表示贷款的原值n,第二个整数表示每月支付的分期付款金…

解决idea文件properties中文乱码问题

解决idea文件properties中文乱码问题_idea properties文件中文乱码-CSDN博客

[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分 …