STM32MP157_PRO开发板的第一个驱动程序

news2025/2/13 12:46:11

文章目录

  • 目的:
  • 为什么编译驱动程序之前要先编译内核?
  • 编译内核
  • 编译设备树
  • 编译安装内核模块
    • 编译内核模块
    • 安装内核模块到 Ubuntu 的NFS目录下备用
  • 安装内核和模块到开发板上
  • 编译 led 驱动
  • 在开发板安装驱动模块
    • 下载驱动程序
    • 安装驱动模块

目的:

  • 在ubuntu环境下编译开发板的某个驱动,并挂载在开发板上运行

为什么编译驱动程序之前要先编译内核?

  • 驱动程序要用到内核文件:
    比如驱动程序中这样包含头文件:#include <asm/io.h>,其中的 asm 是一个链接文件,指向 asm-arm 或 asm-mips,这需要先配置、编译内核才会生成 asm 这个链接文件。【内核、设备树、驱动】
  • 编译驱动时用的内核、开发板上运行到内核,要一致:开发板上运行到内核是出厂时烧录的,你编译驱动时用的内核是你自己编译的,这两个内核不一致时会导致一些问题。所以我们编译驱动程序前,要把自己编译出来到内核放到板子上去,替代原来的内核。
  • 更换板子上的内核后,板子上的其他驱动也要更换:板子使用新编译出来的内核时,板子上原来的其他驱动也要更换为新编译出来的。所以在编译我们自己的第 1 个驱动程序之前,要先编译内核、安装内核模块、设备树,并且放到板子上去。

编译内核

  • 不 同 的 开 发 板 对 应 不 同 的 配 置 文 件 , 配 置 文 件 位 于 内 核 源 码arch/arm/configs/目录。kernel 的编译过程如下:
cd 100ask_stm32mp157_pro-sdk/Linux-5.4/
make 100ask_stm32mp157_pro_defconfig

编译内核

make uImage LOADADDR=0xC2000040 -j8

编译设备树

make dtbs

编译完成后,在 arch/arm/boot 目录下生成 uImage 内核文件, 在arch/arm/boot/dts 目录下生成设备树的二进制文件 stm32mp157c-100ask-512d-v1.dtb。把这 2 个文件复制到/home/book/nfs_rootfs 目录下

cp arch/arm/boot/uImage ~/nfs_rootfs/
cp arch/arm/boot/dts/stm32mp157c-100ask-512d-v1.dtb ~/nfs_rootfs/

编译安装内核模块

编译内核模块

进入内核源码目录后,就可以编译内核模块了:

cd /home/book/100ask_stm32mp157_pro-sdk/Linux-5.4
make ARCH=arm CROSS_COMPILE=arm-buildroot-linux-gnueabihf- modules -j8

会生成ko驱动文件

安装内核模块到 Ubuntu 的NFS目录下备用

后面会使用 tree 命令查看目录结构,如果提示没有该命令,需要执行以下命令安装 tree 命令:

sudo apt install tree
cd /home/book/100ask_stm32mp157_pro-sdk/Linux-5.4
make ARCH=arm INSTALL_MOD_PATH=/home/book/nfs_rootfs INSTALL_MOD_STRIP=1 modules_install

安装好驱动后的/home/book/nfs_rootfs/目录结构如图所示

在这里插入图片描述

安装内核和模块到开发板上

接下来要把这些文件复制到开发板上。假设 Ubuntu IP 为 192.168.5.11,在开发板上执行以下命令:

mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
mount /dev/mmcblk2p2 /boot #内核设备树放在/dev/mmcblk2p2分区,需要挂载在开发板的boot
cp /mnt/uImage /boot #拷贝内核到boot目录
cp /mnt/*.dtb /boot #拷贝设备树到boot目录
cp /mnt/lib/modules /lib -rfd #拷贝模块到lib目录,r是递归复制,f是保持链接属性 
sync #强制刷新到flash中
reboot

最后重启开发板,输入uname -a查看内核是否改变,发现使用新的 zImage、dtb、模块了。

编译 led 驱动

从 Windows 上通过 filezilla 把源码传到 Ubuntu的nfs共享文件夹中。

首先,进入上传文件夹的目录,修改 Makefile 文件“KERN_DIR”为自己的内核所在路径:

KERN_DIR = /home/book/100ask_stm32mp157_pro-sdk/Linux-5.4

在这里插入图片描述

在makefile目录的路径下执行“make ”命令就可以编译,编译完成后会生成 led_drv.ko 和ledtest 两个文件。
在这里插入图片描述

在开发板安装驱动模块

下载驱动程序

将驱动程序从nfs文件夹下拷贝出来

cp /mnt/led_drv.ko ./
cp /mnt/ledtest ./

安装驱动模块

在开发板串口终端上执行如下命令,即可安装相应的驱动模块。

insmod led_drv.ko

安装完成后可以执行 lsmod 命令来查看是否安装成功,如果有led drv则表示成功

lsmod

执行结果
在这里插入图片描述

执行测试程序

驱动模块安装成功后,就可以使用测试程序来控制 led 灯的状态,如图所示,操作 led 灯时可同时观察开发板串口旁的灯是否有亮灭的变化。

chmod +x ./ledtest
./ledtest /dev/myled on // 打开 led0 灯
./ledtest /dev/myled off // 关闭 led0 灯

开发板上的绿色 LED 就是/dev 下的 myled,默认是开启了呼吸功能的,需要使用下面的命令关掉此功能:

echo none > /sys/class/leds/heartbeat/trigger

关闭呼吸灯再用驱动程序控制

echo none > /sys/class/leds/heartbeat/trigger
./ledtest /dev/myled on // 打开 led0 灯
./ledtest /dev/myled off // 关闭 led0 灯

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

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

相关文章

Netty实战(十三)

WebSocket协议&#xff08;一&#xff09; 一、什么是WebSocket 协议二、简单的 WebSocket 程序示例2.1 程序逻辑2.2 添加 WebSocket 支持2.3 处理 HTTP 请求2.4 处理 WebSocket 帧 一、什么是WebSocket 协议 WebSocket 协议是完全重新设计的协议&#xff0c;旨在为 Web 上的双…

读书笔记-《ON JAVA 中文版》-摘要16[第十六章 代码校验]

文章目录 第十六章 代码校验1. 测试1.1 单元测试1.2 JUnit1.3 测试覆盖率的幻觉 2. 前置条件2.1 断言&#xff08;Assertions&#xff09;2.2 Java 断言语法2.3 Guava 断言2.4 使用断言进行契约式设计2.4.1 检查指令2.4.2 前置条件2.4.3 后置条件2.4.4 不变性2.4.5 放松 DbC 检…

Frida技术—逆向开发的屠龙刀

简介 Frida是一种基于JavaScript的动态分析工具&#xff0c;可以用于逆向开发、应用程序的安全测试、反欺诈技术等领域。Frida主要用于在已安装的应用程序上运行自己的JavaScript代码&#xff0c;从而进行动态分析、调试、修改等操作&#xff0c;能够绕过应用程序的安全措施&a…

路径规划算法:基于人工电场优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于人工电场优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于人工电场优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

【Leetcode60天带刷】day06哈希表——242.有效的字母异位词,349. 两个数组的交集,202题. 快乐数,1. 两数之和

题目&#xff1a;242.有效的字母异位词 Leetcode原题链接&#xff1a;242. 有效的字母异位词 思考历程与知识点&#xff1a; 如果一个字母一个字母的找&#xff0c;也就是暴力&#xff0c;用两个for的话时间复杂度是O(N^2)&#xff1b; 我们可以换个思路&#xff0c;a~z一共…

Telerik Report Server R2 2023

Telerik Report Server R2 2023 仪表报告项-使用仪表或类似表盘的显示提供数据的可视化表示。 报告项上的AccessibleRole属性-ARIA(可访问的富Internet应用程序)支持已显著改进。在Web上&#xff0c;当启用了辅助功能时&#xff0c;呈现的报表项包含预定义的辅助功能角色。这样…

(七)矢量数据的空间分析——叠置分析①

矢量数据的空间分析——叠置分析 叠置分析是将代表不同主题的各个数据层面进行叠置&#xff0c;产生一个新的数据层面&#xff0c;叠置结果综合了原来两个或多个层面要素所具有的属性。 叠置分析不仅生成了新的空间关系&#xff0c;而且还将输入的多个数据层的属性联系起来产…

随机的乐趣和游戏

1、猜数字游戏 #GuessingGame.py import random the_number random.randint(1, 10) print("计算机已经在1到10之间随机生成了一个数字&#xff0c;") guess int(input("请你猜猜是哪一个数字: ")) while guess ! the_number:if guess > the_number:p…

【MySQL】数据库基本知识小结

数据库的基本概念 数据库&#xff1a;DataBase 简称 DB&#xff0c;就是信息的集合或者说数据库是由数据库管理系统管理的数据的集合。数据库管理系统&#xff1a;DataBase Management System 简称 DBMS&#xff0c;是一种操纵和管理数据库的大型软件&#xff0c;通常用于建立…

数据结构 一绪论

第一章&#xff1a;绪论 1.1数据结构的基本概念 1.数据&#xff1a;数据是信息的载体&#xff0c;是描述客观事物属性的数、字符以及所有能输入到计算机中并被程序识别 和处理的符号的集合。 2.数据元素&#xff1a;数据元素是数据的基本单位&#xff0c;通常作为一个整体进行…

软件项目质量跟踪控制的3大方法

1、质量度量法 质量度量法包括尺度度量和二元度量两种方法&#xff0c;而尺度度量是定量度量&#xff0c;适用可直接度量的特性。如缺陷率 而二元度量是定性度量&#xff0c;适用间接度量的质量特性。如使用性&#xff0c;灵活性。 软件项目质量跟踪控制的3大方法&#xff1a;质…

ReentrantLock实现原理-公平锁

在ReentrantLock实现原理(1)一节中&#xff0c;我们了解了ReentrantLock非公平锁的获取流程&#xff0c;在本节中我们来看下ReentrantLock公平锁的创建以及锁管理流程 创建ReentrantLock公平锁 创建公平锁代码如下&#xff1a; ReentrantLock reentrantLock new ReentrantL…

elementui 自定义loading动画加载层

elementui 自定义loading动画加载层。main.js中添加 import { Loading } from element-ui /* 自定义加载层 */ Vue.prototype.openLoading function(wer) {const loading Loading.service({lock: true, // 是否锁屏text: , // 加载动画的文字// spinner: inner-circles-loade…

数据库期末复习(8)并发控制

笔记 数据库DBMS并发控制(1)_旅僧的博客-CSDN博客 数据库 并发控制(2)死锁和意向锁_旅僧的博客-CSDN博客 冲突可串行化和锁 怎么判断是否可以进行冲突可串行化:简便的方法是优先图 只有不同对象和同一对象都是读才不能发生非串行化调度。我真傻 两个节点其实也可以算是一…

粤海街道后海村城市更新单元旧改项目,规划建面约42.6万平

项目名称&#xff1a;粤海街道后海村城市更新单元 项目地址&#xff1a;南山区粤海街道&#xff0c;西临天后西路&#xff0c;东至后海大道&#xff0c;南近东滨路&#xff0c;北近创业路。 开发商&#xff1a;远洋集团 申报主体&#xff1a;深圳市蛇口后海实业股份公司 拆…

SEMICON China 2023| 加速科技将携全系新品重磅亮相,欢迎打卡加速科技展台

2023年6月29日-7月1日&#xff0c;全球规模最大、规格最高的半导体行业盛会—SEMICON China 2023将在上海新国际博览中心盛大举行。作为业内领先的半导体测试设备供应商&#xff0c;杭州加速科技将携全系重磅新品及全系列测试解决方案受邀参展。 展位信息&#xff1a;E5馆 5643…

pytest+allure+jenkins持续集成及生成测试报告

目录 前言 一、jenkins安装 二、插件安装 三、构建项目 四、查看运行结果 总结&#xff1a; 前言 前面&#xff0c;讲了“Pycharmpytestallure打造高逼格的测试报告”&#xff0c;但实际工作中&#xff0c;往往需要通过jenkins进行自动化测试用例的持续集成并自动生成测试…

KW 喜报 | KaiwuDB 斩获 2023 数博会“优秀科技成果”奖

5月26日&#xff0c;大数据领域的国家级盛会——2023 中国国际大数据产业博览会&#xff08;以下简称“2023 数博会”&#xff09;在贵阳盛大开幕。作为大会最重磅的环节之一&#xff0c;“2023 领先科技成果发布会”于数博发布中心场地举办&#xff0c;向全行业发布 70 余项兼…

数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇

历史文章&#xff08;文章累计460&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 【…

DDP分布式训练中遇到的一些问题

1&#xff1a;所有forward的输出必须参与到loss计算并回传 2&#xff1a;类似于layer_norm这样的操作是无需进行分布式通信的&#xff0c;也无法进行分布式通信&#xff0c;所以在DDP的时候必须把find_unused_parameters设置为True 3&#xff1a;当报错形式为如下时&#xff…