(二)正点原子I.MX6ULL u-boot移植

一、概述

        这里使用的是NXP官方2022.04发布的uboot,移植到正点原子阿尔法开发板(v2.1)

        u-boot下载:[email protected]:nxp-imx/uboot-imx.git

        移植是基于NXP的mx6ull_14x14_evk

二、编译NXP官方uboot

        进入NXP的u-boot目录

         先在Makefile里把CROSS_COMPILE改了        (二)正点原子I.MX6ULL u-boot移植_第1张图片

        打开终端

make mx6ull_14x14_evk_defconfig

make -j16

        (二)正点原子I.MX6ULL u-boot移植_第2张图片

三、添加开发板

        这一步基本上和正点原子里的教程是一样的,把板子文件给复制一下

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

1.修改mx6ull_alientek_defconfig

打开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"

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_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

3.修改Kconfig

        打开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官方板子做的,没什么太多特别的地方需要改,主要是网络驱动

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

(二)正点原子I.MX6ULL u-boot移植_第3张图片

        如果是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

(二)正点原子I.MX6ULL u-boot移植_第4张图片

        测试一下网络:先配置网络

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一下电脑

(二)正点原子I.MX6ULL u-boot移植_第5张图片

你可能感兴趣的:(IMX6ULL,驱动开发,linux,嵌入式硬件)