uboot的全称是Universal Boot Loader,uboot是一个遵循GPL协议的开源软件,uboot是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB等高级功能。
uboot官方的uboot源码是给所有的半导体厂商准备的。ST公司会从uboot官方下载uboot源码,并将自家的芯片移植进去,做了一个自己定制的uboot源码。显然,uboot官方的uboot源码没有ST公司做的全面。
学习Linux第38步,就是编译“正点原子移植好的uboot”,了解uboot是怎么编译的。
1、查看ST公司的uboot源码包,
打开终端
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd linux回车”,切换“linux”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd atk-mp1/回车”,切换“atk-mp1”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/回车”,切换“stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd sources/回车”,切换“sources”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd arm-ostl-linux-gnueabi/回车”,切换“arm-ostl-linux-gnueabi”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
见下图:
“u-boot-stm32mp-2020.01-10”就是ST公司uboot源码包,它支持了STM32MP1家族全系列芯片。
正点原子移植好的 uboot,路径为: “01、程序源码\01、正点原子Linux出厂系统源码\u-boot-stm32mp-2020.01-g00f14581-v1.4.tar.bz2”。
2、创建正点原子的uboot目录“alientek_uboot”
打开终端
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd linux回车”,切换“linux”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd atk-mp1/回车”,切换“atk-mp1”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“madir uboot回车”,创建“uboot”目录
输入“ls回车”,列出“atk-mp1”目录下所有的文件和文件夹
输入“cd uboot回车”,切换“uboot”目录下
输入“ls回车”,列出“uboot”目录下所有的文件和文件夹
输入“madir alientek_uboot回车”,创建“alientek_uboot”目录
输入“ls回车”,列出“uboot”目录下所有的文件和文件夹
见下图:
3、拷贝正点原子公司的uboot源码包
1)、双击桌面图标“FileZilla Client”,见下图:
2)、点击“文件”,接着点击“站点管理器(S)”,见下图:
得到下图:
3)、点击“确定”
4)、将“u-boot-stm32mp-2020.01-g00f14581-v1.4.tar.bz2”拖到“alientek_uboot”目录下。见下图:
4、回到终端修改“Makefile”文件,并编译uboot
1)、输入“cd alientek_uboot回车”,切换“alientek_uboot”目录下
输入“ls回车”,列出“alientek_uboot”目录下所有的文件和文件夹
见下图:
2)、解压
输入“tar -vxf u-boot-stm32mp-2020.01-g00f14581-v1.4.tar.bz2回车” ,解压。
输入“ls -l回车”,列出“alientek_uboot”目录下所有的文件和文件夹
“u-boot-stm32mp-2020.01-g00f14581-v1.4.tar.bz2”是正点原子提供的uboot源码压缩包,其它文件和文件夹都是解压出来的uboot源码,见下图:
3)、输入“vim Makefile回车”,使用vim命令打开已有的“Makefile”文件,见下图:
4)、按“ESC键”,输入“/CROSS_COMPILE ?=”,查找“CROSS_COMPILE ?=”所在的位置,见下图:
5)、输入“回车键”,光标跳到“/CROSS_COMPILE ?=”,见下图:
6)、输入“A键”,光标跳到“/CROSS_COMPILE ?=”所在行的尾部,见下图:
7)、移动光标键,添加“ARCH = arm”;
添加“CROSS_COMPILE = arm-none-linux-gnueabihf-”;
见下图:
修改“Makefile”的原因:
如果不修改,我们需要输入很长的命令,才可以实现编译,如下面的命令:
make distclean
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- stm32mp157d_atk_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- DEVICE_TREE=stm32mp157d-atk all
修改后,就很简化了,就可以输入下面的命令来实现编译了:
make distclean回车 //清除
make stm32mp157d_atk_defconfig回车 //配置uboot
make V=1 DEVICE_TREE=stm32mp157d-atk all回车 //编译
8)、按“ESC键”+“:wq键”,保存退出,见下图:
9)、编译
输入“make distclean回车” //清除
输入“make stm32mp157d_atk_defconfig回车” //配置uboot
输入“make V=1 DEVICE_TREE=stm32mp157d-atk all回车” //编译
10)、输入“ls -l回车”,列出“alientek_uboot”目录下所有的文件和文件夹
5、修改“tf-a.tsv”
1)、双击桌面图标“FileZilla Client”
将“u-boot.stm32”复制到“C:\Program Files\STMicroelectronics\images”目录下。
见下图:
2)、用“Notepad++”软件打开“后缀为.tsv”的脚本文件,修改如下:
3)、点击文件,再点击全部保存。
5、烧录
1)、关闭虚拟机,防止开发板连接到虚拟机
2)、将开发板上拨码开关拨到“000”位置
3)、将USB导线连接电脑的USB3.0接口,另外一端连接开发板的USB OTG接口;
4)、将USB导线连接电脑的USB3.0接口,另外一端连接到开发板的USB TTL接口;
5)、双击“STM32CubeProgrammer”图标
6)、选择上图中的USB,然后点击“Connect”
7)、点击“刷新”,直到出现USB1,表示连接成功。
8)、点击“Open file”,找到“C:\Program Files\STMicroelectronics\images”目录下“tf-a.tsv”打开。
9)、点击“Browse”,打开“C:\Program Files\STMicroelectronics\images”目录。
10)、点击下图中的“选择文件夹”
11)、点击下图中的“Download”
12)、烧录结束后,点击“确定”,见下图:
13)、关闭电源,将拨码开关设置为“010”
14)、重新上电启动开发板。