文章目录
开发板组网
准备
- ubuntu安装tftp服务器和nfs服务器
- 设置windows防火墙
- 设置电脑为百兆全双工模式
- 控制面板->网络和internet ->网络连接->查找对应网 卡-> 属性->配置->高级->连接速度和双工模式 ->100Mbpd Full Dulpex
- PC和开发板进行网线连接
ubuntu网络配置
VMware->编辑->虚拟机网络适配器->更改设置->创键VMnet0 ->桥接至对应网卡
ubuntu->有线设置->添加网络->IPV4->手动->192.168.1.XXX:24->网关192.168.1.1->DNS8.8.8.8
开发板网络配置
串口工具-> uboot->配置对应环境变量
serverip 192.168.1.xxx # 服务器ip,对应ubuntuip
ipaddr 192.168.1.aaa # 开发板ip
netmask 255.255.255.0 # 开发板子网掩码
gatewayip 192.168.1.1 # 开发板网关
saveenv # 保存变量
测试组网连接
ping 192.168.1.XXX # 服务器ip(serverip)
tftp测试
# ubuntu
# 文件准备到tftp文件夹
cp asm-led.bin ~/tftpboot
# 开发板
tftp c0008000 asm-led.bin
uboot源码获取
uboot命名方式
u-boot-年-月-rc.tar.bz2
rc:表示测试版本,不稳定
硬件平台
基于MD1和MK2开发
硬件平台描述
CPU板: cortex-A7*2, cortex-M4
架构: arm-V7
厂商:ST
soc: STM32MP157aaa
board: FSMP1A
uboot源码移植准备工作
ubuntu内准备uboot源码
uboot源码分析
arch : 存放架构相关内容
board : 存放开发板相关文件
configs : 存放配置文件
Kbuild : 内核编译文件
include : 存放头文件
drivers : 存放驱动相关文件
net : 网络文件
README : 帮助文档
# 对应码编译指令
cd u-boot
make <board_name>_defconfig
确认board_name
# 方法一
# 查看配置文件
ls configs/stm32mp*
# 方法二
# 在uboot源码顶层目录下打开makefile文件
# 查找config:
%config: scripts_basic outputmakefile FORCE
$(Q)$(MAKE) $(build)=scripts/kcongif $@
make fsmp1a_defconfig
%config: scripts_basic outputmakefile FORCE
$(Q)$(MAKE) $(build)=scripts/kconfig $@
# $(Q) 为取消回显,将$(Q)取消后执行
make fsmp1a_defconfig
# 显示 make -f ./scripts/Makefile.build obj=scripts/kconfig fsmp1a_defconfig=make obj=scripts/config fsmp1a_defconfig
# 有信息知打开 scripts/kconfig 目录下的Makefile查找defconfix
%_defconfig: $(obj)/conf
$(Q)$<$(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
# 去掉$(Q) 返回uboot顶层执行
make fsmp1a_defconfig
# 显示
scripts/kconfig/conf --defconfig=arch/../configs/fsmp1a_defconfig kconfig
scripts/konfig/conf # 可执行文件
--defconfig=arch/../configs/fsmp1a_defconfig # 开发板目标文件
kconfig # uboot源码目录的配置文件
Makefile
make help 查看Makefile帮助信息
make clean # 移除大多数生成文件,但保留config(配置文件)
make mrproper # 移除大多数的生成文件,配置文件,备份文件
make distclean # mrproper和编辑备份和补丁文件
make menuconfig # 图形化配置
make all # 编译uboot源码‘
Linux启动流程
- 系统上电
- 芯片固化程序引导一级程序(FSBL)启动
- 一级程序完成后,引导二级程序(SSBL)启动
- 二级程序完成后,下载设备树文件和uImage镜像文件,内核启动
- 内核启动完成后,加载根文件系统
非安全启动流程
流程 | 做用 |
---|---|
BL0 | 芯片厂家出厂时,固化到芯片内 |
BL1 | FSBL(u-boot-spl.stm) |
BL2 | SSBL(u-boot.img) |
uboot源码配置和编译流程
# 前往uboot顶层目录
# 配置交叉编译工具链,打开Makefile,搜索CROSS_COMPILE
# 修改
ifeq ($(HOSTARCH,$ARCh))
CROSS_COMPILE ?=
# 为
ifeq (arm,arm)
CROSS_COMPILE ?=arm-linux-gnueabihf
# 设备树相关文件
.dts # 设备树的源文件
.dtsi # 设备树的头文件
dtc # 编译dts的工具
.dtb # 设备树的可执行文件
# 格式
/{
{
节点相关信息
};
};
# 设备树文件中有缩进格式要求,且不能使用=G自动对齐
# uboot中设备树文件存放在 arc/arm/dts
# 查看DK1公板相关设备树内容 ls stm32
stm32mp157a-dk1.dts
stm32mp157a-dk1-u-boot.dtsi
stm32mp15xx-dkx.dtsi
# 进入arch/arm/dts,将设备树文件复制一份为平台相关内容
cp stm32mp157a-dk1.dts stm32mp157a-fsmp1a.dts
cp stm32mp157a-dk1-u-boot.dtsi stm32mp157a-fsmp1a-u-boot.dtsi
cp stm32mp15xx-dkx.dtsi stm32mp15xx-fsmp1x.dtsi
# 修改stm32mp157a-fsmp1a.dts
#include "stm32mp15xx-dkx.dtsi"
/{
model = "STMicroelectronics STM32MP157A-DK1 Discovery Board";
compatible = "st,stm32mp157a-dk1","st,stm32mp157";
# 为
#include "stm32mp15xx-fsmp1x.dtsi"
/{
model = "STMicroelectronics STM32MP157A-FSMP1A Discovery Board";
compatible = "st,stm32mp157a-fsmp1a","st,stm32mp157";
# 打开Makefile文件,添加FSMP1A平台设备树内容
dtb1$(CONFIG_STM32MP15x) += \
stm32mp157a-dk1.dtb \
stm32mp157a-fsmp1a.dtb \ # <-添加内容
# 对uboot进行编译,在uboot源码顶层执行
time make -j4 all
# 成功现象
# 生成u-boot.img 和 u-boot-spl.stm32
# 在uboot源码顶层下基于图形化配置界面配置
make menuconfig
制作tf卡启动盘
TF卡接入ubuntu
查看TF卡分区
ls /dev/sd*
初始化TF卡分区
sudo parted -s /dev/sdb mklabel msdos
对TF卡进行分区
sudo sgdisk --resize-table=128 -a 1 -n 1:34:545 -c 1:fsbl1 -n 2:546:1057 -c 2:fsbl2 -n 3:1058:5153 -c 3:ssbl -n 4:5153:136225 -c 4:bootfs -n 5:136226 -c 5:rootfs -A 4:set:2 -p /dev/sdb -g
sgdisk # 分区命令
--resize-table=128 -a 1 # 指定分区对齐方式
-n # 创建新分区标志
1:34:545 # 创建分区,起始块号32,终止信号545块号
# 一块:512字节
-c 1:fsbl1 # 设置分区名字
-A 4:set:2 # 设置分区表属性
-p /dev/sdb -g # 打印显示分区表,查看是否有successful判断是否分区成功
烧写
dd if=u-boot-spl.stm32 of=/dev/sdb1 conv=fdatasync
dd if=u-boot-spl.stm32 of=/dev/sdb2 conv=fdatasync
dd if=u-boot of=/dev/sdb3 conv=fdatasync
dd # 少些命令
if # 输入文件标志
of # 输出路径
conv=fdatasync # 指定以物理方式写入
测试uboot镜像文件
- 安全弹出TF卡
- 将TF卡插回开发板
- 设置开发板拨码开关为TF卡启动
安全启动流程
需要先移植非安全的启动流程