非安全版本uboot移植流程
1. 移植流程(重点)
1.1 移植步骤
1、进入家目录下FSMP1A目录uboot源码目录下
linux@ubuntu:~$ cd FSMP1A/u-boot-2021.07/
2、在uboot源码目录下,执行make distclean清除目标
linux@ubuntu:~/FSMP1A/u-boot-2021.07$ make distclean
3、在uboot源码目录下,执行非安全版本的默认配置文件
linux@ubuntu:~/FSMP1A/u-boot-2021.07$ make stm32mp15_basic_defconfig
成功现象:
#
# configuration written to .config
#
4、在uboot源码目录下,打开Makefile文件,配置交叉编译工具链,编译生成arm架构
266 ifeq ($(HOSTARCH),$(ARCH))
267 CROSS_COMPILE ?=
修改为:
266 ifeq (arm,arm)
267 CROSS_COMPILE ?= arm-linux-gnueabihf-
5、安装库:sudo apt-get install libncurses5-dev
6、在uboot源码目录下,执行make menuconfig,进入图形化界面信息
备注:不需要修改任何内容,只是查看是否可以进入图形化界面
7、FSMP1A开发板参考DK1公板进行移植的,DK1公板所有的硬件信息都在设备树中进行存放所以需要将DK1设备树的信息复制为FSMP1A信息
8、介绍设备树相关信息 ====> 驱动课程中重点进行讲解
源文件:*.dts ===========> 类似于C语言中*.c
头文件:*.dtsi ===========> 类似于C语言中*.h
编译工具:DTC ===========> 类似于C语言中gcc编译工具
编译命令:make dtbs ===========> 类似于C语言中 gcc *.c
镜像文件:*.dtb s ===========> 类似于C语言中 a.out
9、进入uboot源码设备树目录,将DK1公板设备树信息,复制为FSMP1A设备树内容
1)进入设备树目录:linux@ubuntu:~/FSMP1A/u-boot-2021.07$ cd arch/arm/dts/
2)将 DK1公板设备树信息,复制为FSMP1A设备树内容
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
3)修改设备树的源文件 linux@ubuntu:~/FSMP1A/u-boot-2021.07/arch/arm/dts$ vi stm32mp157a-fsmp1a.dts
12 #include "stm32mp15xx-dkx.dtsi"
13
14 / {
15 model = "STMicroelectronics STM32MP157A-DK1 Discovery Board";
16 compatible = "st,stm32mp157a-dk1", "st,stm32mp157";
修改为
12 #include "stm32mp15xx-fsmp1x.dtsi"
13
14 / {
15 model = "STMicroelectronics STM32MP157A-FSMP1A Discovery Board";
16 compatible = "hqyj,stm32mp157a-fsmp1a", "hqyj,stm32mp157";
4)添加FSMP1A平台的设备树被编译 linux@ubuntu:~/FSMP1A/u-boot-2021.07/arch/arm/dts$ vi Makefile
1061 dtb-$(CONFIG_STM32MP15x) += \
1062 stm32mp157a-dk1.dtb \
1063 stm32mp157a-fsmp1a.dtb \ #========> 备注:这一行内容为需要添加内容
10、在uboot源码目录下,编译uboot源码,生成uboot镜像文件
time make -j4 all
1.2 测试步骤
将TF卡进行相关配置后,通过TF卡方式将uboot源码下载到板子上
在串口工具打印信息上回发现错误
2. 解决问题
2.1 电源问题
分析错误原因
通过打印内容 ======> power init failed
可知电源初始化失败
所以应该对比FSMP1A和DK1开发板的电源电路图
总结
由于官方参考板DK1采用电源管理芯片做电源管理
而 FS-MP1A 采用分离电路作为电源管理
本例需要将DK1公板中原有电源管理芯片相关内容去掉
增加上FSMP1A固定电源相关内容
进行删除和添加后编译测试
2.2 内存问题
分析错误原因
通过错误信息打印可知DDR内存相关问题
所以应该对比FSMP1A内存电路图和DK1内存电路图
总结
通过对比可知,FSMP1A和DK1公板内存电路图完全一致
查看设备树是否编译
修改编译的设备树
2.3 EMMC问题
分析错误原因
目前的启动阶段为TF卡的启动方式
所以问题还是在TF卡,和EMMC无关
总结
通过以上分析可知,DK1公板:uSD_DETECT ===> PB7
FSMP1A开发板:SD1_CD ===> PH3
修改引脚编号
编译测试
2.4 ADC电流问题
分析错误原因
官方参考板DK1通过ADC检测开机电流,如果供电电流不足3A 则启动失败
FS-MP1A 没有设计这个功能,所以需要去掉adc这部分功能
否则就会出现adc电流启动失败
去掉ADC电流
编译测试
3. 移植EMMC设备
3.1 mmc相关命令
FSMP1A> mmc list =======> 显示设备列表
STM32 SD/MMC: 0 (SD)
FSMP1A> mmc dev 0 =======> 选择tf卡设备
switch to partitions #0, OK
mmc0 is current device
FSMP1A> mmc dev 1 =======> 选择EMMC设备
MMC Device 1 not found
no mmc device at slot
3.2 添加emmc设备步骤
1、在uboot源码目录下,进入设备树目录,打开设备树头文件:
linux@ubuntu:~/FSMP1A/u-boot-2021.07$ cd arch/arm/dts/
linux@ubuntu:~/FSMP1A/u-boot-2021.07/arch/arm/dts$ vi stm32mp15xx-fsmp1x.dtsi
&sdmmc2 {
pinctrl-names = "default", "opendrain", "sleep";
pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_a>;
pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_d47_pins_a>;
pinctrl-2 = <&sdmmc2_b4_sleep_pins_a &sdmmc2_d47_sleep_pins_a>;
non-removable;
no-sd;
no-sdio;
st,neg-edge;
bus-width = <8>;
vmmc-supply = <&v3v3>;
vqmmc-supply = <&vdd>;
mmc-ddr-3_3v;
status = "okay";
};
2、在uboot源码目录下,进入设备树目录,打开设备树头文件:
linux@ubuntu:~/FSMP1A/u-boot-2021.07/arch/arm/dts$ vi stm32mp157a-fsmp1a-u-boot.dtsi
10 / {
11 aliases {
12 i2c3 = &i2c4;
13 mmc0 = &sdmmc1;
14 mmc1 = &sdmmc2; ===========> 这一行为需要添加的内容
15 usb0 = &usbotg_hs;
16 };
3、在uboot源码目录下,进入设备树目录,打开设备树头文件:
linux@ubuntu:~/FSMP1A/u-boot-2021.07/arch/arm/dts$ vi stm32mp157a-fsmp1a-u-boot.dtsi
165 &sdmmc1 {
166 u-boot,dm-spl;
167 };
168 ============这一行下面的内容为需要添加的内容============
169 &sdmmc2 {
170 u-boot,dm-spl;
171 };
4. 网卡打补丁
将群里下发的补丁文件,拷贝到ubuntu中的uboot源码目录下
在uboot源码目录下执行打补丁命令
在uboot源码目录下,将补丁文件配置到当前的源码目录下
设置uboot支持百兆全双工模式
编译测试
5. 备份(重点)
linux@ubuntu:~/FSMP1A/u-boot-2021.07$ cp .config
configs/stm32mp15_fsmp1a_basic_defconfig