一、uboot源码获取
1.1 uboot官网获取
ftp://ftp.denx.de/pub/u-boot/ 前提是是芯片厂家将uboot源码开源到uboot官网上
1.2 ST开发社区获取
https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32MP1_Developer_Package
1.3 ST官网
https://www.st.com/en/embedded-software/stm32mp1dev.html
1.4 开发板厂家
直接找对应的开发板厂家进行获取,一定有支持开发板的相关镜像文件
1.5 项目经理
一定有支持开发板的相关镜像文件
二、uboot源码命名方式
u-boot-年-月-rc.tar.bz2
带rc:表示测试版本
不rc:表示稳定版本
tar.bz2:压缩方式
三、了解硬件平台
1.本次课程学习的开发板使用:华清远见研发中心提供 2.使用开发板参考ST公司提供demo板,DK1和DK2开发板
四、硬件平台描述
1.硬件信息:
CPU板:cortex-A7 * 2 和 cortex-M4
架构:arm-V7架构
厂商:ST
SOC:STM32MP157aaa
board:FSMP1A
2.参考华清远见wiki百科网址进行移植
http://wiki.farsightdev.com/index.php?title=FS-MP1A
五、uboot源码移植准备工作
5.1 uboot源码拷贝到ubuntu中
1.在家目录下创建一个文件夹demo
2.将en.SOURCES-stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17_tar_v3.1.0.xz拷贝到demo目录下
3.对en.SOURCES-stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17_tar_v3.1.0.xz进行解压
tar -vxf en.SOURCES-stm32mp1-openstlinux-5.10-dunfell-mp1-21-11-17_tar_v3.1.0.xz
4.如下图可以查看到uboot源码目录
5.2 分析uboot源码
1.在家目录下创建一个文件夹FSMP1A
2.将u-boot-stm32mp-v2020.10-stm32mp-r2-r0拷贝到FSMP1A目录下
cp u-boot-stm32mp-v2020.10-stm32mp-r2-r0/ ~/FSMP1A/ -rf
3.进入到~/FSMP1A/u-boot-stm32mp-v2020.10-stm32mp-r2-r0目录
4.对u-boot-stm32mp-v2020.10-stm32mp-r2-r0.tar.gz目录进行解压
tar -vxf u-boot-stm32mp-v2020.10-stm32mp-r2-r0.tar.gz
5.进入uboot源码目录下,对uboot源码进行解析
1>平台相关
arch:存放平台相关架构内容
board:存放各个板子相关文件
2>平台无关
Makefile:工程管理文件
configs:配置相关文件
drivers:存放驱动相关内容
README:帮助文档
6.因为uboot源码使用Makefile进行编译的,所以需要查看make相关帮助命令信息 ----->make help
1>清除中间文件 -----> make distclean
Cleaning targets:
clean - Remove most generated files but keep the config
mrproper - Remove all generated files + config + various backup files
distclean - mrproper + remove editor backup and patch files
2>基于图形化界面配置 -----> make menuconfig
menuconfig - Update current config utilising a menu based program
3>编译uboot源码 -----> make all
all - Build all necessary images depending on configuration
7.分析README文件
195 For all supported boards there are ready-to-use default
196 configurations available; just type "make <board_name>_defconfig".
197
198 Example: For a TQM823L module type:
199
200 cd u-boot
201 make TQM823L_defconfig
8.总结
通过README文件分析可知,配置板子的默认(缺省)命令是:make <board_name>_defconfig
问题:如何确定本次移植FSMP1A开发板<board_name>是什么?
5.3 如何确定名字!!!
1.方法1:如何确定<board_name>名字
1>在uboot源码顶层目录下执行: make fsmp1a_defconfig
2>在源码目录下出现如下错误信息:
*** Can't find default configuration "arch/../configs/fsmp1a_defconfig"!
通过阅读可知:在arch/../configs/fsmp1a_defconfig不能找到默认的配置文件
3>进入uboot源码顶层目录下,进入configs目录,查看配置文件: ls stm32mp*
stm32mp15_basic_defconfig : 非安全默认配置文件
stm32mp15_trusted_defconfig :安全默认配置文件
2.方法2:因为uboot源码使用makefile进行管理编译,所以在makefile文件中可以找到make <board_name>_defconfig对应的目标信息:
1>在uboot源码顶层目录下,打开Makefile文件,搜索:config
564 %config: scripts_basic outputmakefile FORCE
565 $(Q)$(MAKE) $(build)=scripts/kconfig $@
2>在uboot源码顶层目录下,打开Makefile文件,搜索:config,使用echo将变量信息进行打印
564 %config: scripts_basic outputmakefile FORCE
565 @echo $(Q)
566 @echo $(MAKE)
567 @echo $(build)
568 @echo $@
569 $(Q)$(MAKE) $(build)=scripts/kconfig $@
3>在uboot源码顶层目录下执行: make fsmp1a_defconfig,会出现如下打印信息
@
make
-f ./scripts/Makefile.build obj
fsmp1a_defconfig
4>总结:通过以上命令打印可知$(Q)取消回显,所以将$(Q)去掉,在次执行 make fsmp1a_defconfig,查看打印信息
make -f ./scripts/Makefile.build obj=scripts/kconfig fsmp1a_defconfig = make obj=scripts/kconfig fsmp1a_defconfig
3.方式3:通过方法2分析可知,到指定scripts/kconfig目录下,打开Makefile文件,搜索目标:defconfig
1>在scripts/kconfig目录下,打开Makefile文件,搜索目标:defconfig
109 %_defconfig: $(obj)/conf
110 $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
2>在scripts/kconfig目录下,打开Makefile文件,搜索目标:defconfig,使用echo命令,对变量信息进行打印
109 %_defconfig: $(obj)/conf
110 @echo $(Q)
111 @echo $(silent)
112 @echo $(SRCARCH)
113 @echo $@
114 @echo $(Kconfig)
115 $(Q) $< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
3>在uboot源码顶层目录下执行: make fsmp1a_defconfig,会出现如下打印信息
@
..
fsmp1a_defconfig
Kconfig
4>总结:通过以上命令打印可知$(Q)取消回显,所以将$(Q)去掉,在次执行 make fsmp1a_defconfig,查看打印信息
scripts/kconfig/conf --defconfig=arch/../configs/fsmp1a_defconfig Kconfig
4.总结:make <board_name>_defconfig执行过程
scripts/kconfig/conf:通过file命令进行查看,可知是一个elf可执行文件
--defconfig=arch/../configs/fsmp1a_defconfig:板子目标文件
Kconfig:uboot源码目录下配置文件
通过以上分析可知:conf是一个可执行文件,--defconfig=arch/../configs/fsmp1a_defconfig和Kconfig作为参数传递给conf