STM32MP157驱动开发环境搭建

news/2024/12/2 20:46:54/

 (此篇为笔者自我总结,相应软件和资料可以自行搜索,需要有基础)

(主要针对看了原子第一期视频,第二期视频没看,想直接上手驱动的人)


1 代码获取:

笔者所使用的开发板是正点原子STM32MP157,建议先跟着原子第一期视频把要准备的东西都搭建好,那个跟着走,很快的,都是安装。

然后再来看这篇博客。

在原子资料里面会有第二期移植好的相应代码,包括烧写的镜像等等。下载下来之后,就是以上目录了。

这里要注意的是stm32mp157多了一个TF-A(ARM Trusted Firmware)。

打开我们的虚拟机,这里我用的是ubuntu18.04,在虚拟机下面建好相应的文件夹。使用FileZilla将文件传送过去(自己配置一下)

主要就是tf-a,uboot,内核这三个文件。将对应的文件传送进来,然后依次解压就行了。

2 文件准备:

之后我们需要对这三个文件进行编译,具体可以参考原子stm32mp157驱动开发视频的准备篇,也可以直接看正点原子的教程。

对于驱动开发来说,我们需要的是内核和根目录的更新。所以可以直接编译内核,得到uImage和dtb设备树这两个文件就行。

对于内核编译,因为这次传送的文件是原子本身打包好的,所以我们不需要对Makefile中ARCH CROSS_COMPILE 这两个变量进行指定,如果是原来的源码,还需要对Makefile进行指定。

这里找到stm32mp157d_atk.sh脚本文件,然后输入以下命令进行运行。

./stm32mp157d_atk.sh

等待内核编译成功,在/arch/arm/boot中找到uImage,在/arch/arm/boot/dts中找到stm32mp157-atk.dtb文件。

这样我们就得到了两个文件:【uImage】,【stm32mp157-atk.dtb】。

以上是针对正点原子打包好的源码。如果是ST官方的,那么我们还需要打补丁,生成配置文件然后保存为我们自己的配置文件,修改Makefile,创建并编写脚本文件,并根据硬件问题修改设备树,具体可以看正点原子的教程。

根目录:

这里我们使用buildroot所生成的文件,同样也可以传送过去,不过这里的文件是ext4格式,所以需要用/mnt挂载一下。可以去搜一下如何提取ext4文件,相信会有很详细的教程!

这里比较特殊,可以放到后面去做,先看后面。

这样我们就得到了所有需要的文件了,以便后续的驱动开发!

3 烧写

找到原子文件里 08烧写镜像,通过stm32Cubeprogrammer这个软件去烧录我们的镜像,这里要注意的是文件的路径不要错,在烧写之前要检查一下,具体有教程!

当然,我们也可以用开发板的出场系统,这是完全没有问题的!这里我也建议直接用开发板的出场镜像,因为很方便,但是我觉得大家还是要体验一下烧录过程的,因为会出现的奇奇怪怪的错误的,解决完会有体验感,哈哈。

4 网络配置(重点!)

正常来说,我是推荐路由器引出两根线然后分别给接到开发板和电脑的。

但是因为人在学校,条件有限,不太可能这么做,相信你也有一样的烦恼!

那么....

我是一根网线,将开发板和电脑连接起来,然后相互可以ping通!同时电脑连wifi

之前搜了很多教程,都比较麻烦,这是我自己摸索出来。

首先,打开你的虚拟机,打开你的虚拟机设置。

 有两个网络适配器,如果没有,点击添加。

一个是NAT模式,用来连接我们电脑的网络,保证ubuntu可以上网。

一个是桥接模式,用来连我们的开发板。

然后点开左上方的编辑,进入虚拟网络配置,点击右下角的更改设置,将桥接模式下面的已连接至改成你开发板连到的那个以太网,如果不知道的话,那就把你的开发板重启一下,看哪个以太网变了就行。

看桥接到哪个网络。

 

 

同时要将防火墙关闭哦。

这些都完成了之后,打开我们的ubuntu。点开我们的网络设置。如果没有网络标志的话,不要慌,输入以下命令。

sudo nmcli networking on

就可以看到网络出来了。

点开网络设置,然后设置我们的桥接网络!

地址设置的时候别跟NAT在同一个网段就行,网关不用填。这个设置的ip就是之后开发板ping虚拟机的ip!

 然后点应用,对于NAT网络也就是en33不用管它,设置自动(DHCP)就行。

这样,我们的网络就设置好了。

然后点开终端,我们输入ifconfig查看ip地址。

可以看到有两个网络了。

然后将linux下的防火墙给它关了。

至此,网络基本就设置好了。

5 tftp、nfs挂载

我们用tftp来加载内核,nfs来挂载根目录。

自己去搜以下tftp、nfs的配置教程,有很多。

首先,在linux里面新建文件夹。

将之前得到的uImage和dtb文件复制到tftpboot中,将builroot中的文件挂载到nfs中,然后在此基础上搜索tftp和nfs的教程,去进行配置。

启动我们之前烧写好的开发板,不停的按enter键进入uboot命令行。

输入以下代码,很重要!!

setenv ipaddr 192.168.10.50      //自己设置的开发板ip,要跟桥接网络的ip同一网段
setenv ethaddr b8:ae:1d:01:01:00 //开发板MAC地址,自己设置
setenv gatewayip 192.168.10.1    //网关地址,跟开发板同一网段就行
setenv netmask 255.255.255.0     //子网掩码,这个照着写就行
setenv serverip 192.168.10.100   //ubuntu前面设置桥接网络的ip地址
saveenv                          //保存

然后,设置好了之后,ping一下我们的ubuntu地址,如果出现了xxxxx is alive,就说明网通了,正常来说,肯定通了。

然后就可以设置bootcmd和bootargs了,这样重启之后就会从网络上加载内核和挂载根目录了!

至此,我们驱动开发环境就搭建完了!

6 总结

加油!!!

(有问题的话欢迎在评论区讨论,一起学习!!)

参考:


http://www.ppmy.cn/news/905128.html

相关文章

STM32MP157驱动开发——Linux 网络设备驱动

STM32MP157驱动开发——Linux 网络设备驱动 一、简介STM32MP1 GMAC 接口简介YT8511C 详解 二、驱动开发1.网络外设的设备树2.设备驱动 三、测试网速测试 参考文章:【正点原子】I.MX6U嵌入式Linux驱动开发——Linux 网络驱动 一、简介 网络驱动是 linux 驱动三巨头之…

STM32MP157驱动开发——Linux ADC驱动

STM32MP157驱动开发——Linux ADC驱动 0.前言一、ADC 简介1.ADC 简介2.STM32MP157 ADC简介 二、ADC 驱动源码解析1.设备树下的 ADC 节点2.ADC 驱动源码分析1)stm32_adc 结构体2)stm32_adc_probe 函数3)stm32_adc_iio_info 结构体 三、驱动开发…

STM32MP157驱动开发——蜂鸣器设备驱动

STM32MP157驱动开发——蜂鸣器设备驱动 0.相关知识一、驱动程序开发1.设备树修改2.启动程序编写3.测试程序编写 二、编译及运行测试 0.相关知识 蜂鸣器常用于计算机、打印机、报警器、电子玩具等电子产品中,常用的蜂鸣器有两种:有源蜂鸣器和无源蜂鸣器&a…

STM32MP157驱动开发——Linux IIO驱动(下)

STM32MP157驱动开发——Linux IIO驱动(下) 0.前言一、IIO 触发缓冲区1.IIO 触发器2.申请触发器3.释放触发器4.注册触发器5.注销触发器6. IIO 缓冲区7.向驱动程序添加触发缓冲功能8.驱动编写9.触发缓冲测试10.缓冲区读取 二、测试App三、测试结果 0.前言 …

STM32MP157驱动开发——USB设备驱动

STM32MP157驱动开发——USB设备驱动 一、简介1.电气属性2.USB OTG3.STM32MP1 USB 接口简介4.Type-C 电气属性 二、USB HOST 驱动开发1.USB HOST 驱动编写2.配置 PHY 控制器3.配置usbh_ehci 三、USB HOST 测试1.鼠标键盘驱动使能2.U盘驱动 四、USB OTG驱动开发1.USB OTG 控制器节…

STM32MP157驱动开发——Linux块设备驱动

STM32MP157驱动开发——Linux块设备驱动 一、简介二、驱动开发1.使用请求队列的方式2.测试①3.不使用请求队列的方式4.测试② 参考文章:【正点原子】I.MX6U嵌入式Linux驱动开发——Linux 块设备驱动 一、简介 之前学习的都是关于字符设备的驱动,包括 pl…

Shiro反序列化漏洞(CVE-2016-4437)+docker靶场+工具利用

一、Shiro反序列化漏洞-CVE-2016-4437原理 将java对象转换为字节序列(json/xml)的过程叫序列化,将字节序列(json/xml)恢复为java对象的过程称为反序列化。 Shiro框架提供了“记住我”的功能,用户登陆成功…

习题1.25

对吗?实践出真知,运行看看。代码如下。 (defn square [x] (* x x))(defn fast-expt[b n](println "call iter" n)(cond (= 1 n) b(= 2 n) (square b)(even? n) (square (fast-expt b (/ n 2))):else (* b (fast-expt b (- n 1)))))(defn expmod [base exp m](mod…