在这里插入图片描述

因为一般的MCU的性能有限,能够应用的场景也比较局限,所以需要学习功能更强大的ARM芯片,基于linux系统进行功能开发,得到更加强大的嵌入式系统。我用于学习的硬件是正点原子推出的STM32MP157开发板,感兴趣的小伙伴也可以一起交流学习。

学习视频地址:【正点原子】STM32MP157开发板

系统启动流程

在这里插入图片描述
linux系统的启动是一个链式的过程,不同于MCU只需要加载一个bin文件就可以运行,linux系统需要保证系统的稳定性,所以要先加载一些必要的系统信息,并且对相关的设备进行初始化,再运行用户的核心代码。

TF-A,U-BOOT,Linux内核都有两种形式移植到开发板

  1. 下载ST提供的源码 -> 打补丁 -> 修改MakeFile -> 修改设备树等配置文件 -> 编译 -> 烧录
  2. 下载开发板商家提供的源码 -> 编译 -> 烧录

注: 打补丁的时候可能需要权限,可以使用su root进入root模式再执行指令。

TF-A

作用:隔离硬件,为硬件提供一个安全环境并且提供安全服务,将CPU的工作状态划分为安全世界和非安全世界。
使用:TF-A由自己的官方组织开发,ST将自己的芯片移植进其中,正点原子则是基于ST修改后的源码进行开发使用。

U-BOOT

环境变量操作

修改环境变量

setenv bootdelay 5
saveenv

新建环境变量

setenv author 'console=ttySTM0,115200 root=/dev/mmcblk2p2 rootwait rw '
saveenv

删除环境变量

setenv author
saveenv

查看环境变量

print xxx # xxx为变量名

内存操作

显示内存值

md[.b, .w, .l] address [# of objects]

修改内存值

# 地址不自增
nm [.b, .w, .l] address
# 地址自增
mm [.b, .w, .l] address

填充内存

mw [.b, .w, .l] address value [count]

数据拷贝

cp [.b, .w, .l] source target count

数据比较

cmp [.b, .w, .l] addr1 addr2 count

网络操作

验证网络是否可用

ping address

获取路由器IP

dhcp

网络文件传输

# nfs
nfs [loadAddress] [[hostIPaddr:]bootfilename]
# tftp
tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

UMS指令

用于将flash模拟成U盘,采用ext4格式。

ums <USB_controller> [<devtype>] <dev[:part]>

bootargs 环境变量

console=ttySTM0,115200 root=/dev/mmcblk2p3 rootwait rw

console:设置linux交互终端
toot:设置根文件系统的位置
rootfstype:指定根文件系统的类型,对于ext格式则无需指定

图形化界面

.config文件用于存储配置项,Kconfig文件是图形界面的描述文件。
作用:在.config 文件中生成以“CONFIG_”开头的变量。

make stm32mp15_atk_trusted_defconfig # 只需配置一次
make menuconfig

在这里插入图片描述

Linux内核

文件架构
在这里插入图片描述
在这里插入图片描述

根文件系统

根文件系统主要用于构建linux系统的文件架构,可以采用busybox和buildroot软件进行构建,后者也有用到前者的功能。所以主要采用buildroot进行构建文件系统。

  1. 参数配置(基于图形化界面)
make menuconfig
make xxx_defconfig
  1. 编译
make -j8

编译所得的output/images/rootfs.tar即为所需的文件,将其复制解压到目标目录即可。

在buildroot下修改busybox配置

make busybox-menuconfig
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐