Skip to content

U boot移植

环境与源码

U-boot源码获取

https://github.com/nxp-imx

环境搭建

创建项目

在顶层Makefile中给 ARCH 和CORSS_COMPILE 赋值

ARCH := arm
CROSS_COMPILE := arm-linux-gnueabihf-

image-20241006203459102

编译NXP

make distclean
make mx6ull_14x14_evk_emmc_defconfig
make -j12
make distclean

修改defconfig

cd configs
cp mx6ull_14x14_evk_emmc_defconfig mx6ull_acorn_emmc_defconfig
CONFIG_TARGET_MX6ULL_14X14_EVK=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-evk-emmc"
CONFIG_TARGET_MX6ULL_ACORN_EMMC=y
CONFIG_DEFAULT_DEVICE_TREE="imx6ull-acorn-emmc"

修改.h文件

cd include/configs
cp mx6ullevk.h mx6ull_acorn_emmc.h
#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H
#ifndef _MX6ULL_ACRON_EMMC_H_
#define _MX6ULL_ACRON_EMMC_H_

修改板级文件

cd board/freescale
cp -r mx6ullevk mx6ull_acorn_emmc
cd mx6ull_acorn_emmc
mv mx6ullevk.c mx6ull_acorn_emmc.c

imximage.cfg

PLUGIN  board/freescale/mx6ullevk/plugin.bin 0x00907000
PLUGIN  board/freescale/mx6ull_acorn_emmc/plugin.bin 0x00907000

Kconfig

if TARGET_MX6ULL_14X14_EVK || TARGET_MX6ULL_9X9_EVK

config SYS_BOARD
    default "mx6ullevk"

config SYS_VENDOR
    default "freescale"

config SYS_CONFIG_NAME
    default "mx6ullevk"

config IMX_CONFIG
    default "board/freescale/mx6ullevk/imximage.cfg"

config SYS_TEXT_BASE
    default 0x87800000
endif
if TARGET_MX6ULL_ACORN_EMMC

config SYS_BOARD
    default "mx6ull_acorn_emmc"

config SYS_VENDOR
    default "freescale"

config SYS_CONFIG_NAME
    default "mx6ull_acorn_emmc"

config IMX_CONFIG
    default "board/freescale/mx6ull_acorn_emmc/imximage.cfg"

config SYS_TEXT_BASE
    default 0x87800000
endif

MAINTAINERS

MX6ULLEVK BOARD
M:  Peng Fan <peng.fan@nxp.com>
S:  Maintained
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
MX6ULL_ACORN_EMMC BOARD
M:  Jianwen Pan <pan@acorn.college>
S:  Maintained
F:  board/freescale/mx6ull_acorn_emmc/
F:  include/configs/mx6ull_acorn_emmc.h
F:  configs/mx6ull_acorn_emmc_defconfig

Makefile

obj-y  := mx6ullevk.o
obj-y  := mx6ull_acorn_emmc.o

mx6ull_acorn_emmc.c

修改Kconfig

cd arch/arm/mach-imx/mx6
config TARGET_MX6ULL_ACORN_EMMC
    bool "Support mx6ull_acorn_emmc"
    depends on MX6ULL
    select BOARD_LATE_INIT
    select DM
    select DM_THERMAL
    select IMX_MODULE_FUSE
    select OF_SYSTEM_SETUP
    imply CMD_DM

image-20241006213700805

source "board/freescale/mx6ull_acorn_emmc/Kconfig"

image-20241006213850533

设备树

创建空设备树imx6ull-acorn-emmc.dts
cd arch/arm/dts
touch imx6ull-acorn-emmc.dts
#include "imx6ull.dtsi"
修改Makefile
dtb-$(CONFIG_MX6ULL) += \
    imx6ull-14x14-ddr3-val.dtb \
    imx6ull-14x14-ddr3-val-epdc.dtb \
    imx6ull-14x14-ddr3-val-emmc.dtb \
    imx6ull-14x14-ddr3-val-gpmi-weim.dtb \
    imx6ull-14x14-ddr3-val-tsc.dtb \
    imx6ull-14x14-evk.dtb \
    imx6ull-acorn-emmc.dtb \
    imx6ull-14x14-evk-emmc.dtb \
    imx6ull-14x14-evk-gpmi-weim.dtb \
    imx6ull-9x9-evk.dtb \
    imx6ull-colibri.dtb \
    imx6ull-colibri-emmc.dtb \
    imx6ull-myir-mys-6ulx-eval.dtb \
    imx6ull-seeed-npi-imx6ull-dev-board.dtb \
    imx6ull-phytec-segin-ff-rdk-emmc.dtb \
    imx6ull-dart-6ul.dtb \
    imx6ull-somlabs-visionsom.dtb \
    imx6ulz-14x14-evk.dtb \
    imx6ulz-14x14-evk-emmc.dtb \
    imx6ulz-14x14-evk-gpmi-weim.dtb

编译

make distclean
make mx6ull_acorn_emmc_defconfig
make -j12

设备树

SD及emmc

LCD的GPIO

static iomux_v3_cfg_t const lcd_pads[] = {
    MX6_PAD_LCD_CLK__LCDIF_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_ENABLE__LCDIF_ENABLE | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_HSYNC__LCDIF_HSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_VSYNC__LCDIF_VSYNC | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA00__LCDIF_DATA00 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA01__LCDIF_DATA01 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA02__LCDIF_DATA02 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA03__LCDIF_DATA03 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA04__LCDIF_DATA04 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA05__LCDIF_DATA05 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA06__LCDIF_DATA06 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA07__LCDIF_DATA07 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA08__LCDIF_DATA08 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA09__LCDIF_DATA09 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA10__LCDIF_DATA10 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA11__LCDIF_DATA11 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA12__LCDIF_DATA12 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA13__LCDIF_DATA13 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA14__LCDIF_DATA14 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA15__LCDIF_DATA15 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA16__LCDIF_DATA16 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA17__LCDIF_DATA17 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA18__LCDIF_DATA18 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA19__LCDIF_DATA19 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA20__LCDIF_DATA20 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA21__LCDIF_DATA21 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA22__LCDIF_DATA22 | MUX_PAD_CTRL(LCD_PAD_CTRL),
    MX6_PAD_LCD_DATA23__LCDIF_DATA23 | MUX_PAD_CTRL(LCD_PAD_CTRL),

    /* Use GPIO for Brightness adjustment, duty cycle = period. */
    MX6_PAD_GPIO1_IO08__GPIO1_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
};
void do_enable_parallel_lcd(struct display_info_t const *dev)
{
    enable_lcdif_clock(dev->bus);

    imx_iomux_v3_setup_multiple_pads(lcd_pads, ARRAY_SIZE(lcd_pads));

    /* Set Brightness to high */
    gpio_direction_output(IMX_GPIO_NR(1, 8) , 1);
}
struct display_info_t const displays[] = {{
    .bus = MX6UL_LCDIF1_BASE_ADDR,
    .addr = 0,
    .pixfmt = 24,
    .detect = NULL,
    .enable = do_enable_parallel_lcd,
    .mode   = {
        .name           = "TFT7016",
        .xres           = 1024,
        .yres           = 600,
        .pixclock       = 19531,
        .left_margin    = 140,
        .right_margin   = 160,
        .upper_margin   = 20,
        .lower_margin   = 12,
        .hsync_len      = 20,
        .vsync_len      = 3,
        .sync           = 0,
        .vmode          = FB_VMODE_NONINTERLACED
    } 
} };
"panel=TFT7016\0" \
sudo apt-get update
sudo apt-get install imagemagick
convert logo.bmp -depth 8 output_logo.bmp
cd tools

Makefile

image-20241007174507696

cd drivers/video/

cfb_console

logo居中

 if(video_logo_xpos && video_logo_ypos)
 {
  video_logo_xpos= (VIDEO_VISIBLE_COLS - BMP_LOGO_WIDTH)>>1;
  video_logo_ypos= (VIDEO_VISIBLE_ROWS - BMP_LOGO_HEIGHT)>>1;
 }

image-20241007215210990

image-20241007215710243

mx6ull_acorn_emmc_defconfig

CONFIG_VIDEO_LOGO=y
CONFIG_VIDEO_BMP_LOGO=y