(此篇为笔者自我总结,相应软件和资料可以自行搜索,需要有基础)
(主要针对看了原子第一期视频,第二期视频没看,想直接上手驱动的人)
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 总结
加油!!!
(有问题的话欢迎在评论区讨论,一起学习!!)
参考: