需要改动的地方:

arm/mach-imx/mx6/Kconfig 添加

config TARGET_MX6ULL_ALIENTEK
    bool "Support mx6ull_alientek"
    depends on MX6ULL
    select BOARD_LATE_INIT
    select DM
    select DM_THERMAL
    select IOMUX_LPSR
    imply CMD_DM

config TARGET_MX6ULL_ALIENTEK_MINI
    bool "Support mx6ull_alientek_mini"
    depends on MX6ULL
    select BOARD_LATE_INIT
    select DM
    select DM_THERMAL
    select IOMUX_LPSR
    imply CMD_DM

source "board/freescale/mx6ullalientek/Kconfig"
source "board/freescale/mx6ullalientekmini/Kconfig"

include/configs/mx6ullalientekmini.h参考include/configs/mx6ul_14x14_evk.h

/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright (C) 2016 Freescale Semiconductor, Inc.
 *
 * Configuration settings for the Freescale i.MX6UL 14x14 EVK board.
 */
#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H


#include <asm/arch/imx-regs.h>
#include <linux/sizes.h>
#include <linux/stringify.h>
#include "mx6_common.h"
#include <asm/mach-imx/gpio.h>

#define PHYS_SDRAM_SIZE    SZ_512M

#define CFG_MXC_UART_BASE        UART1_BASE

/* MMC Configs */
#ifdef CONFIG_FSL_USDHC
#define CFG_SYS_FSL_ESDHC_ADDR    USDHC2_BASE_ADDR
#define CFG_SYS_FSL_USDHC_NUM    2
#endif

#define CFG_EXTRA_ENV_SETTINGS \
    "eth0addr=00:01:12:34:56:70\0" \
    "eth1addr=00:01:12:34:56:71\0" \
    "script=boot.scr\0" \
    "image=zImage\0" \
    "console=ttymxc0\0" \
    "fdt_high=0xffffffff\0" \
    "initrd_high=0xffffffff\0" \
    "fdt_file=undefined\0" \
    "fdt_addr=0x83000000\0" \
    "boot_fdt=try\0" \
    "ip_dyn=yes\0" \
    "videomode=video=ctfb:x:480,y:272,depth:24,pclk:108695,le:8,ri:4,up:2,lo:4,hs:41,vs:10,sync:0,vmode:0\0" \
    "mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
    "mmcpart=1\0" \
    "mmcroot=/dev/mmcblk1p2 rootwait rw\0" \
    "mmcautodetect=yes\0" \
    "mmcargs=setenv bootargs console=${console},${baudrate} " \
        "root=${mmcroot}\0" \
    "loadbootscript=" \
        "fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \
    "bootscript=echo Running bootscript from mmc ...; " \
        "source\0" \
    "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
    "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
    "mmcboot=echo Booting from mmc ...; " \
        "run mmcargs; " \
        "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
            "if run loadfdt; then " \
                "bootz ${loadaddr} - ${fdt_addr}; " \
            "else " \
                "if test ${boot_fdt} = try; then " \
                    "bootz; " \
                "else " \
                    "echo WARN: Cannot load the DT; " \
                "fi; " \
            "fi; " \
        "else " \
            "bootz; " \
        "fi;\0" \
        "findfdt="\
            "if test $fdt_file = undefined; then " \
                "if test $board_name = ALIENTEK && test $board_rev = MINI; then " \
                    "setenv fdt_file imx6ull-alientek-mini.dtb; fi; " \
                "if test $fdt_file = undefined; then " \
                    "echo WARNING: Could not determine dtb to use; " \
                "fi; " \
            "fi;\0" \
    "netargs=setenv bootargs console=${console},${baudrate} " \
        "root=/dev/nfs " \
    "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
        "netboot=echo Booting from net ...; " \
        "run netargs; " \
        "if test ${ip_dyn} = yes; then " \
            "setenv get_cmd dhcp; " \
        "else " \
            "setenv get_cmd tftp; " \
        "fi; " \
        "${get_cmd} ${image}; " \
        "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
            "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
                "bootz ${loadaddr} - ${fdt_addr}; " \
            "else " \
                "if test ${boot_fdt} = try; then " \
                    "bootz; " \
                "else " \
                    "echo WARN: Cannot load the DT; " \
                "fi; " \
            "fi; " \
        "else " \
            "bootz; " \
        "fi;\0" \

/* Miscellaneous configurable options */

/* Physical Memory Map */
#define PHYS_SDRAM            MMDC0_ARB_BASE_ADDR

#define CFG_SYS_SDRAM_BASE        PHYS_SDRAM
#define CFG_SYS_INIT_RAM_ADDR    IRAM_BASE_ADDR
#define CFG_SYS_INIT_RAM_SIZE    IRAM_SIZE

/* environment organization */

#ifdef CONFIG_CMD_NET
#define CFG_FEC_ENET_DEV        1
#endif

#endif

board/freescale/mx6ullalientekmini 目录复制参考mx6ul_14x14_evk

// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright (C) 2016 Freescale Semiconductor, Inc.
 */

#include <init.h>
#include <asm/arch/clock.h>
#include <asm/arch/iomux.h>
#include <asm/arch/imx-regs.h>
#include <asm/arch/crm_regs.h>
#include <asm/arch/mx6-pins.h>
#include <asm/arch/sys_proto.h>
#include <asm/global_data.h>
#include <asm/gpio.h>
#include <asm/mach-imx/iomux-v3.h>
#include <asm/mach-imx/boot_mode.h>
#include <asm/io.h>
#include <common.h>
#include <env.h>
#include <fsl_esdhc_imx.h>
#include <linux/sizes.h>
#include <mmc.h>
#include <miiphy.h>

DECLARE_GLOBAL_DATA_PTR;

int dram_init(void)
{
    gd->ram_size = imx_ddr_size();

    return 0;
}

int board_mmc_get_env_dev(int devno)
{
    return devno;
}

int mmc_map_to_kernel_blk(int devno)
{
    return devno;
}

int board_early_init_f(void)
{
    return 0;
}

#ifdef CONFIG_FEC_MXC
static int setup_fec(int fec_id)
{
    struct iomuxc *const iomuxc_regs = (struct iomuxc *)IOMUXC_BASE_ADDR;
    int ret;

    if (fec_id == 0) {
        /*
         * Use 50MHz anatop loopback REF_CLK1 for ENET1,
         * clear gpr1[13], set gpr1[17].
         */
        clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC1_MASK,
                IOMUX_GPR1_FEC1_CLOCK_MUX1_SEL_MASK);
    } else {
        /*
         * Use 50MHz anatop loopback REF_CLK2 for ENET2,
         * clear gpr1[14], set gpr1[18].
         */
        clrsetbits_le32(&iomuxc_regs->gpr[1], IOMUX_GPR1_FEC2_MASK,
                IOMUX_GPR1_FEC2_CLOCK_MUX1_SEL_MASK);
    }

    ret = enable_fec_anatop_clock(fec_id, ENET_50MHZ);
    if (ret)
        return ret;

    enable_enet_clk(1);

    return 0;
}

int board_phy_config(struct phy_device *phydev)
{
    // phy_write(phydev, MDIO_DEVAD_NONE, 0x1f, 0x8190);

    if (phydev->drv->config)
        phydev->drv->config(phydev);

    return 0;
}
#endif

int board_init(void)
{
    /* Address of boot parameters */
    gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;

#ifdef    CONFIG_FEC_MXC
    setup_fec(CFG_FEC_ENET_DEV);
#endif

    return 0;
}

#ifdef CONFIG_CMD_BMODE
static const struct boot_mode board_boot_modes[] = {
    /* 4 bit bus width */
    {"sd1", MAKE_CFGVAL(0x42, 0x20, 0x00, 0x00)},
    {"sd2", MAKE_CFGVAL(0x40, 0x28, 0x00, 0x00)},
    {"qspi1", MAKE_CFGVAL(0x10, 0x00, 0x00, 0x00)},
    {NULL,     0},
};
#endif

int board_late_init(void)
{
#ifdef CONFIG_CMD_BMODE
    add_board_boot_modes(board_boot_modes);
#endif

#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
    env_set("board_name", "ALIENTEK");
    env_set("board_rev", "MINI");
#endif

    return 0;
}

int checkboard(void)
{
    puts("Board: MX6ULL ALIENTEK MINI\n");

    return 0;
}

configs/mx6ull_alientek_mini_defconfig 配置复制参考mx6ull_14x14_evk_defconfig

CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TEXT_BASE=0x87800000
CONFIG_SYS_MALLOC_LEN=0x1000000
CONFIG_NR_DRAM_BANKS=1
CONFIG_SF_DEFAULT_SPEED=40000000
CONFIG_ENV_SIZE=0x2000
CONFIG_ENV_OFFSET=0xC0000
CONFIG_MX6ULL=y
CONFIG_TARGET_MX6ULL_ALIENTEK_MINI=y
CONFIG_DM_GPIO=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-alientek-mini"
CONFIG_SYS_MEMTEST_START=0x80000000
CONFIG_SYS_MEMTEST_END=0x88000000
CONFIG_SUPPORT_RAW_INITRD=y
CONFIG_USE_BOOTCOMMAND=y
CONFIG_BOOTCOMMAND="run findfdt;mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run netboot; fi; fi; else run netboot; fi"
CONFIG_ARCH_MISC_INIT=y
CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_HUSH_PARSER=y
CONFIG_SYS_MAXARGS=32
CONFIG_SYS_PBSIZE=532
CONFIG_CMD_BOOTZ=y
CONFIG_CMD_MEMTEST=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_DHCP=y
CONFIG_CMD_PING=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_RNG=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_EXT4_WRITE=y
CONFIG_CMD_FAT=y
CONFIG_CMD_FS_GENERIC=y
CONFIG_OF_CONTROL=y
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_IS_IN_MMC=y
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_SYS_MMC_ENV_DEV=1
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
CONFIG_USE_ETHPRIME=y
CONFIG_ETHPRIME="eth1"
CONFIG_BOUNCE_BUFFER=y
CONFIG_FSL_DCP_RNG=y
CONFIG_DM_74X164=y
CONFIG_DM_I2C=y
CONFIG_SYS_I2C_MXC=y
CONFIG_FSL_USDHC=y
CONFIG_MTD=y
CONFIG_DM_SPI_FLASH=y
CONFIG_SPI_FLASH_STMICRO=y
CONFIG_PHYLIB=y
CONFIG_PHY_SMSC=y
CONFIG_DM_ETH_PHY=y
CONFIG_FEC_MXC=y
CONFIG_MII=y
CONFIG_PINCTRL=y
CONFIG_PINCTRL_IMX6=y
CONFIG_DM_REGULATOR=y
CONFIG_DM_REGULATOR_FIXED=y
CONFIG_DM_REGULATOR_GPIO=y
CONFIG_DM_RNG=y
CONFIG_DM_SERIAL=y
CONFIG_MXC_UART=y
CONFIG_SPI=y
CONFIG_DM_SPI=y
CONFIG_FSL_QSPI=y
CONFIG_SOFT_SPI=y
CONFIG_IMX_THERMAL=y

arch/arm/dts/imx6ull-alientek-mini.dts参考arch/arm/dts/imx6ull-14x14-evk.dts

// SPDX-License-Identifier: (GPL-2.0 OR MIT)
//
// Copyright (C) 2016 Freescale Semiconductor, Inc.

/dts-v1/;

#include "imx6ull.dtsi"
#include "imx6ul-14x14-evk.dtsi"

/ {
    model = "Freescale i.MX6 UltraLiteLite Alientek Mini Board";
    compatible = "fsl,imx6ull-alientek-mini", "fsl,imx6ull";
};

&clks {
    assigned-clocks = <&clks IMX6UL_CLK_PLL3_PFD2>;
    assigned-clock-rates = <320000000>;

    spi4 {
        status = "disabled";
    };
};

&fec1 {
    status = "disabled";
};

&fec2 {
    phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;
    phy-reset-duration = <25>;

    mdio {
        #address-cells = <1>;
        #size-cells = <0>;

        /delete-node/ ethphy0;

        ethphy1: ethernet-phy@1 {
            reg = <1>;
            smsc,led-mode = <1>;
            clocks = <&clks IMX6UL_CLK_ENET2_REF>;
            clock-names = "rmii-ref";
        };
    };
};

思路是去除spi4的冲突引脚(即禁用spi4),在网卡节点添加phy复位引脚,修改phy地址,修改led驱动为smsc

我的编译环境:

Ubuntu 20.04.6 LTS WSL

编译前需安装的包:

gcc-arm-linux-gnueabihf bison flex libssl-dev libncurses-dev

编译脚本:

#!/bin/bash

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

make mx6ull_alientek_mini_defconfig

# make menuconfig

make -j8

if [ -e /dev/sdb ];then
    sudo dd iflag=dsync oflag=dsync if=u-boot-dtb.imx of=/dev/sdb bs=512 seek=2
fi
最后修改:2023 年 10 月 29 日
如果觉得我的文章对你有用,请随意赞赏