一、概述
这里使用的是NXP官方2022.04发布的uboot,移植到正点原子阿尔法开发板(v2.1)
u-boot下载:git@github.com:nxp-imx/uboot-imx.git
移植是基于NXP的mx6ull_14x14_evk
二、编译NXP官方uboot
进入NXP的u-boot目录
先在Makefile里把CROSS_COMPILE改了
打开终端
make mx6ull_14x14_evk_defconfigmake -j16
三、添加开发板
这一步基本上和正点原子里的教程是一样的,把板子文件给复制一下
make distclean
cp configs/mx6ull_14x14_evk_defconfig configs/mx6ull_alientek_defconfig
cp board/freescale/mx6ullevk/ board/freescale/mx6ull_alientek -rf
cp arch/arm/dts/imx6ull-14x14-evk.dts arch/arm/dts/imx6ull-alientek.dts
cp arch/arm/dts/imx6ul-14x14-evk.dtsi arch/arm/dts/imx6ull-alientek.dtsi
cp arch/arm/dts/imx6ul-14x14-evk-u-boot.dtsi arch/arm/dts/imx6ull-alientek-u-boot.dtsicp include/configs/mx6ullevk.h include/configs/mx6ull_alientek.h
cd board/freescale/mx6ull_alientek/
mv mx6ullevk.c mx6ull_alientek.c
1.修改mx6ull_alientek_defconfig
打开configs/mx6ull_alientek_defconfig,第10行和第14行
CONFIG_TARGET_MX6ULL_14X14_EVK=yCONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-evk"修改为:CONFIG_TARGET_MX6ULL_ALIENTEK=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-alientek"
2.修改 board文件夹文件
打开board/freescale/mx6ull_alientek/Kconfig
第一行改为刚才defconfig里一样的TARGET即可
if TARGET_MX6ULL_14X14_EVK || TARGET_MX6ULL_9X9_EVK改为:if TARGET_MX6ULL_ALIENTEK
第12行,修改路径
config IMX_CONFIGdefault "board/freescale/mx6ullevk/imximage.cfg"修改为:config IMX_CONFIGdefault "board/freescale/mx6ull_alientek/imximage.cfg"
打开MAINTAINERS
F: board/freescale/mx6ullevk/
F: include/configs/mx6ullevk.h
F: configs/mx6ull_14x14_evk_defconfig
F: configs/mx6ull_14x14_evk_plugin_defconfig
F: configs/mx6ulz_14x14_evk_defconfig修改为:F: board/freescale/mx6ull_alientek/
F: include/configs/mx6ull_alientek.h
F: configs/mx6ull_mx6ull_alientek_defconfig
打开Makefile
obj-y := mx6ullevk.o修改为:obj-y := mx6ull_alientek.o
imximage_lpddr2.cfg和imximage.cfg的 34行和33行那个路径,全都改成当前板子路径:board/freescale/mx6ull_alientek/plugin.bin
3.修改Kconfig
打开arch/arm/mach-imx/mx6/Kconfig,找到第615行的config TARGET_MX6ULL_14X14_EVK
config TARGET_MX6ULL_14X14_EVKbool "Support mx6ull_14x14_evk"depends on MX6ULLselect BOARD_LATE_INITselect DMselect DM_THERMALselect IMX_MODULE_FUSEselect OF_SYSTEM_SETUPimply CMD_DM
复制一份,粘贴到它后面,然后修改如下:
config TARGET_MX6ULL_ALIENTEKbool "Support mx6ull_alientek"depends on MX6ULLselect BOARD_LATE_INITselect DMselect DM_THERMALselect IMX_MODULE_FUSEselect OF_SYSTEM_SETUPimply CMD_DM
找到第873行:
source "board/freescale/mx6ullevk/Kconfig"
复制一份,然后改成alientek板子路径:
source "board/freescale/mx6ull_alientek/Kconfig"
打开include/configs/mx6ull_alientek.h
在第235行前加入:
#define CONFIG_PHY_SMSC
#define CONFIG_CMD_MII
做完以上这些,就将板子添加进去了,可以尝试编译一下:
make distclean
make mx6ull_alientek_defconfig
make -j16
打开mx6ull_alientek.c,找到checkboard函数,修改成阿尔法开发板:
int checkboard(void)
{puts("Board: MX6ULL ALIENTEK ALPHA\n");return 0;
}
四、修改设备树
所谓移植,其实就是改设备树,而且正点原子基本参照着NXP官方板子做的,没什么太多特别的地方需要改,主要是网络驱动
1.imx6ull-alientek.dts
把include引用改为我们复制好的,注意一下自己的是imx6ull还是imx6ul,官方这里两个都是imx6ul
#include "imx6ul-14x14-evk.dtsi"#include "imx6ul-14x14-evk-u-boot.dtsi"修改为#include "imx6ull-alientek.dtsi"#include "imx6ull-alientek-u-boot.dtsi"
2.imx6ull-alientek.dtsi
这个就是移植的主阵地,最主要的还是网络驱动,正点原子使用的LAN8720(V2.1及之前的版本)
找到fec2节点:ethphy0是fec0,地址改为0,ethph1是fec2,地址改为1,修改后如下:
&fec2 {pinctrl-names = "default";pinctrl-0 = <&pinctrl_enet2>;phy-mode = "rmii";phy-handle = <ðphy1>;status = "okay";mdio {#address-cells = <1>;#size-cells = <0>;ethphy0: ethernet-phy@0 {reg = <0>;micrel,led-mode = <1>;clocks = <&clks IMX6UL_CLK_ENET_REF>;clock-names = "rmii-ref";};ethphy1: ethernet-phy@1 {reg = <1>;micrel,led-mode = <1>;clocks = <&clks IMX6UL_CLK_ENET2_REF>;clock-names = "rmii-ref";};};
};
然后按照正点原子的教程,修改drivers/net/phy/phy.c
如果是emmc的板子,再修改一下usdhc2,不改也能用:
&usdhc2 {pinctrl-names = "default", "state_100mhz", "state_200mhz";pinctrl-0 = <&pinctrl_usdhc2_8bit>;pinctrl-1 = <&pinctrl_usdhc2_8bit_100mhz>;pinctrl-2 = <&pinctrl_usdhc2_8bit_200mhz>;bus-width = <8>;non-removable;no-1-8-v;broken-cd;keep-power-in-suspend;wakeup-source;status = "okay";
};
打开imx6ull-alientek.dts
修改一下model和compatible(不改也没事,只是打印输出一个信息而已)
/ {model = "I.MX6ULL Alientek ALPHA ";compatible = "fsl,imx6ull-alientek", "fsl,imx6ull";
};
至此,uboot的移植就结束了,设备树里不需要用到的东西删掉即可。
可以看到输出Model:I.MX6ULL Alientek ALPHA
Board:MX6ULL ALIENTEK ALPHA
测试一下网络:先配置网络
setenv ipaddr 192.168.1.3
setenv eth1addr 00:01:02:03:04:05
setenv netmaks 255.255.255.0
setenv serverip 192.168.1.2
saveenv
然后ping一下电脑