basic版本uboot移植
1.因为是在ubuntu下编译生成arm架构的文件,所以需要现在makefile中设置arm-linux-gnueabihf-的交叉编译工具链。然后make stm32mp15_basic_defconfig配置非安全模式的默认缺省文件。
然后打开图形化界面(make menuconfig),确定图形化见面可用,这里并不需要进行修改。
在arm/arm/dts中把DK1的三个文件改为与实验用板fsmp1a文件。
打开stm32mp157a-fsmp1a.dts修改其包含头文件为刚刚修改的fsmp1a头文件。
打开makefile ,添加stm32mp157a-fsmp1a.dtb。回到uboot顶层编译。
2.对TF卡分区
将TF开插入到读卡器中,并且被ubuntu识别,ls /dev/sd*可以查看现有分区。
删除TF卡所有分区 sudo parted -s /dev/sdb mklabel msdos,再查看ls /dev/sd*,保留/dev/sdb即可。
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:5154:136225 -c 4:bootfs
-n 5:136226 -c 5:rootfs
-A 4:set:2 -p /dev/sdb -g对TF卡进行分区(以上代码为同一条,分行写方便看)。
--resize-table=128 -a 1:对齐
-n:创建一个分区
1:第一个分区
34:第一个分区起始块号
545:第一个分区终止块号
-c 1:fsbl1:第一个分区名字
-A 4:set:2:设置分区表属性
-p /dev/sdb -g:打印分区表
最后进入顶层目录烧写sudo dd if=u-boot-spl.stm32 of=/dev/sdb1 conv=fdatasync
3.修改电源设置信息
由于编译文件中使用的还是DK1的电源信息而不是fsmp1a的信息,所以要进行修改。
在uboot源码顶层目录下,进入arch/arm/dts,打开DK1公板设备树相关文件 ,vi stm32mp15xx-fsmp1x.dtsi,搜索i2c4关键字。把这个标签的所有内容注释或删除。
在uboot源码顶层目录下,进入arch/arm/dts,打开DK1公板设备树相关文件 ,vi stm32mp15xx-fsmp1x.dtsi,搜索cpu0和cpu1关键字。把这个标签的所有内容注释或删除。
在uboot源码顶层目录下,进入arch/arm/dts,打开DK1公板设备树相关文件vi stm32mp157a-fsmp1a-u-boot.dtsi,搜索cpu0和cpu1关键字。把这个标签的所有内容注释或删除。
在uboot源码顶层目录下,执行make menuconfig,去掉电源管理相关内容Device Drivers ---> Power ---> [ ] Enable support for STMicroelectronics STPMIC1 PMIC
再删除原版信息后要加入fsmp1a的信息
在uboot源码顶层目录下,进入arch/arm/dts,打开DK1公板设备树相关文件 ,vi stm32mp15xx-fsmp1x.dtsi,搜索sound关键字。再sound末尾的两个};中间加入fsmp1a配置信息
- v3v3: regulator-3p3v {
- compatible = "regulator-fixed";
- regulator-name = "v3v3";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- regulator-always-on;
- regulator-boot-on;
- };
- v1v8_audio: regulator-v1v8-audio {
- compatible = "regulator-fixed";
- regulator-name = "v1v8_audio";
- regulator-min-microvolt = <1800000>;
- regulator-max-microvolt = <1800000>;
- regulator-always-on;
- regulator-boot-on;
- };
- v3v3_hdmi: regulator-v3v3-hdmi {
- compatible = "regulator-fixed";
- regulator-name = "v3v3_hdmi";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- regulator-always-on;
- regulator-boot-on;
- };
- v1v2_hdmi: regulator-v1v2-hdmi {
- compatible = "regulator-fixed";
- regulator-name = "v1v2_hdmi";
- regulator-min-microvolt = <1200000>;
- regulator-max-microvolt = <1200000>;
- regulator-always-on;
- regulator-boot-on;
- };
- vdd: regulator-vdd {
- compatible = "regulator-fixed";
- regulator-name = "vdd";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- regulator-always-on;
- regulator-boot-on;
- };
- vdd_usb: regulator-vdd-usb {
- compatible = "regulator-fixed";
- regulator-name = "vdd_usb";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- regulator-always-on;
- regulator-boot-on;
- };
接下来编译,烧写,运行。发现内存报错
4.uboot内存相关问题
再makefile中把arch-dtbs的参数用echo打印出来,为stm32mp157c-ev1
不是fsmp1a的文件,所以要进入图形化界面把原来的Device Tree Control ---> (stm32mp157c-ev1) Default Device Tree for DT control改为
Device Tree Control ---> (stm32mp157a-fsmp1a) Default Device Tree for DT control
然后回顶层目录编译,烧写,上电,发现关于emmc报错
5.ubootEMMC相关问题
由于DK1不支持emmc,所以采用更改TF卡的方式
在uboot源码顶层目录下,进入arch/arm/dts,打开DK1公板设备树相关文件 ,vi stm32mp15xx-fsmp1x.dtsi,搜索sdmmc1关键字
在原来的gpio部分改为移植板的TF卡的gpio接口,fsmp1a为gpioh 3,保存后回到顶层目录编译,烧写运行。
以上需要保持拨码开关处于SD卡(TF卡启动方式)。
最后虽然有些许报错,但是也可以进入交互模式了。