1 开发阶段系统部署分析 示意图1:

2 开发阶段系统部署分析 示意图2:

3 开发板的启动当时:

4 开发阶段部署的文件准备
1. tf-a-stm32mp157a-fsmp1a-trusted.stm32
--> TF-A源码编译生成的镜像文件,TF-A(Trusted Fireware-ARM:ARM可信任的固件) --> 已经给大家提前烧录到TF卡或EMMC芯片中。
2. u-boot-stm32mp157a-fsmp1a-trusted.stm32
--> u-boot源码编译生成的镜像文件,
--> u-boot的镜像文件默认也以及给大家提前烧录到TF卡或EMMC芯片中。
注:关于tf-a和u-boot的源码的配置和编译,以及如何烧录镜像文件到TF卡或者EMMC中,后续课程讲解。
3. uImage
--> linux内核源码编译得到的镜像文件 --> 需要使用tftp服务将其下载到内存中
4. stm32mp157a-fsmp1a.dtb
--> linux内核源码对应的设备树文件,设备树文件给linux内核使用 --> 需要使用tftp服务将其下载到内存中
5. rootfs
--> 根文件系统文件 --> linux内核启动成功之后通过nfs的方式挂载根文件系统 --> 将根文件系统的文件移动到nfs共享文件夹中。/linux/nfs/rootfs
5 文件内容:

6 部署步骤
- tftp + nfs重启
sudo service tftpd-hpa restartsudo service rpcbind restartsudo service nfs-kernel-server restart


>>配置tftp服务器ip
setenv serverip 192.168.10.111 ; 服务器IP 地址
saveenv 保存
- 拷贝 uImage stm32mp157a-fsmp1a.dtb rootfs 到tftpboot中。

2.uboot端下载内核 - 手动挂载;;;
STM32MP> tftp 0xc2000000 uImage

3.uboot端下载设备树
STM32MP> tftp 0xc4000000 stm32mp157a-fsmp1a.dtb

4.设置bootargs自启动的参数
bootargs自动的参数是u-boot给内核传递参数,告诉内核使用哪种方式挂在跟文件系统,以及挂在跟文件系统所在服务器的IP地址及路径。
STM32MP> setenv bootargs root=/dev/nfs nfsroot=192.168.1.55:/home/linux/Desktop/2411/nfsboot/rootfs,tcp,v4 rw console=ttySTM0,115200 init=/linuxrc ip=192.168.1.115 STM32MP> saveenv
解析:
root=/dev/nfs ----> 使用网络文件系统
nfsroot=192.168.50.222:/home/linux/nfs/rootfs, ---> 网络文件系统所在服务器的IP地址及路径 ----> 注:需要修改为自己的IP地址及nfs网络文件系统的路径
tcp,v4 ----> 基于tcp服务, v4版本
rw ----> 对跟文件系统具有可读可写的权限
console=ttySTM0,115200 ---> 使用的串口及其波特率
init=/linuxrc ----> 系统启动挂载跟文件系统成功之后,运行的1号进行(init进程) ip=192.168.50.250 ---> 开发板的IP地址,需要修改为自己的开发板的IP地址 ----
//参考 setenv bootargs root=/dev/nfs nfsroot=192.168.20.226:/home/linux/Desktop/2505/nfsboot/rootnc,tcp,v4 rw console=ttySTM0,115200 init=/linuxrc ip=192.168.20.10
5.使用bootm命令启动linux内核 //这个命令启动内核 就是 没有关机 重启 内核在 内存中。
STM32MP> bootm 0xc2000000 - 0xc4000000
| | |----> linux内核设备树的地址
| |---> 不可以省略,前后要有空格
|---> linux内核的地址 启动启动成功之后的效果如下: [root@fsmp1a ]# 输入各种linux命令或者运行应用程序
linux系统启动成功,但是挂载跟文件系统不成功的可能原因?
1> 重启nfs服务之后,在重新启动系统测试 sudo service nfs-kernel-server restart
2> 检查bootargs中的参数配置是否正确,是否和nfs服务的配置文件的路径一致。

- 编写一个测试程序在 乌班图端进行编写在开发板端进行测试。
1. 在ubuntu中编写hello world的应用程序
2. 使用交叉编译器进行编译 arm-linux-gnueabihf-gcc hello.c -o hello
3. 拷贝hello可执行程序到开发板的网络跟文件系统中 cp hello ~/nfs/rootfs
4. 在开发板上运行hello程序进行测试
[root@fsmp1a ]# ./hello

>>注意-可以根据下位机的 开发板tftp服务器ip来配置上位机服务器固定ip - 或者配置开发板服务器ip: setenv serverip 192.168.10.111 ; 服务器IP 地址saveenv
![]()


>> 设置开发板自启动模式 ----》》》》设置这条语句以后 上电就开始 自动下载内核 设备树 加载文件系统。一切都是自动化的。
STM32MP> setenv bootcmd tftp 0xc2000000 uImage\; tftp 0xc4000000 stm32mp157a-fsmp1a.dtb\;bootm 0xc2000000 - 0xc4000000 STM32MP> saveenv
1728

被折叠的 条评论
为什么被折叠?



