这里使用的是NXP官方2022.04发布的uboot,移植到正点原子阿尔法开发板(v2.1)
u-boot下载:[email protected]:nxp-imx/uboot-imx.git
移植是基于NXP的mx6ull_14x14_evk
进入NXP的u-boot目录
打开终端
make mx6ull_14x14_evk_defconfig
make -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.dtsi
cp include/configs/mx6ullevk.h include/configs/mx6ull_alientek.h
cd board/freescale/mx6ull_alientek/
mv mx6ullevk.c mx6ull_alientek.c
打开configs/mx6ull_alientek_defconfig,第10行和第14行
CONFIG_TARGET_MX6ULL_14X14_EVK=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-evk"
修改为:
CONFIG_TARGET_MX6ULL_ALIENTEK=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-alientek"
打开board/freescale/mx6ull_alientek/Kconfig
第一行改为刚才defconfig里一样的TARGET即可
if TARGET_MX6ULL_14X14_EVK || TARGET_MX6ULL_9X9_EVK
改为:
if TARGET_MX6ULL_ALIENTEK
第12行,修改路径
config IMX_CONFIG
default "board/freescale/mx6ullevk/imximage.cfg"
修改为:
config IMX_CONFIG
default "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
打开arch/arm/mach-imx/mx6/Kconfig,找到第615行的config TARGET_MX6ULL_14X14_EVK
config TARGET_MX6ULL_14X14_EVK
bool "Support mx6ull_14x14_evk"
depends on MX6ULL
select BOARD_LATE_INIT
select DM
select DM_THERMAL
select IMX_MODULE_FUSE
select OF_SYSTEM_SETUP
imply CMD_DM
复制一份,粘贴到它后面,然后修改如下:
config TARGET_MX6ULL_ALIENTEK
bool "Support mx6ull_alientek"
depends on MX6ULL
select BOARD_LATE_INIT
select DM
select DM_THERMAL
select IMX_MODULE_FUSE
select OF_SYSTEM_SETUP
imply 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官方板子做的,没什么太多特别的地方需要改,主要是网络驱动
把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"
这个就是移植的主阵地,最主要的还是网络驱动,正点原子使用的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一下电脑