u-boot官网
使用官方的u-boot的前提是芯片厂商已经将芯片适配相关的代码开源到u-boot官方源码中(要不从头构建太麻烦了,对于现在学习都费劲的我实在是完不成)。
从芯片厂商处获得的u-boot一定是对相关芯片适配过的。
对于学习使用的开发板,开发板厂商一定会对相关板子进行适配(直接拿来就能用的那种)。
I.MX6U-MINI板子使用的参考配置文件为mx6ull_14x14_evk_emmc_defconfig
,其在configs
文件夹下,将mx6ull_14x14_evk_emmc_defconfig
拷贝一份,并将其命名为自己的配置文件。
cd configs
cp mx6ull_14x14_evk_emmc_defconfig mx6ull_hello_emmc_defconfig
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_hello_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK" //mx6ull_hello_emmc是等会自己需要创建的
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_HELLO_EMMC=y //CONFIG_TARGET_MX6ULL_HELLO_EMMC也是需要修改的
CONFIG_CMD_GPIO=y
在目录 include/configs
文件夹下添加对应的头文件
cp include/configs/mx6ullevk.h include/configs/mx6ull_hello_emmc.h
将mx6ull_hello.h
文件中的宏修改为自己的,将
#ifndef __MX6ULLEVK_CONFIG_H
#define __MX6ULLEVK_CONFIG_H
修改为:
#ifndef __MX6ULL_HELLO_EMMC_CONFIG_H
#define __MX6ULL_HELLO_EMMC_CONFIG_H
如果我们自己要想使能或者禁止 uboot 的某些功能,那就在 mx6ull_hello_emmc.h
里面做修改即可。
板级文件夹是存放板级文件,比如开发板上外设驱动文件等,也就是2.1.2中提到的mx6ull_hello_emmc
的文件夹,也是拷贝NXP的板级文件夹,并对其内容进行修改。
cd /board/freescale
cp mx6ullevk mx6ull_hello_emmc -r
将/board/freescale/mx6ull_hello_emmc
中的mx6ullevk.c
重命名为mx6ull_hello_emmc.c
。
mv mx6ullevk.c mx6ull_hello_emmc.c
修改mx6ull_hello_emmc
文件夹下的Makefile
文件,将Makefile
修改为
# (C) Copyright 2015 Freescale Semiconductor, Inc.
#
# SPDX-License-Identifier: GPL-2.0+
#
obj-y := mx6ull_hello_emmc.o
extra-$(CONFIG_USE_PLUGIN) := plugin.bin
$(obj)/plugin.bin: $(obj)/plugin.o
$(OBJCOPY) -O binary --gap-fill 0xff $< $@
只用改为**obj-y := mx6ull_hello_emmc.o
**,才会编译mx6ull_hello_emmc.c
文件。
修改mx6ull_hello_emmc
文件夹下的imximage.cfg
文件
将
PLUGIN board/freescale/mx6ullevk/plugin.bin 0x00907000
修改为
PLUGIN board/freescale/mx6ull_hello_emmc/plugin.bin 0x00907000
修改mx6ull_hello_emmc
文件夹下的Kconfig
文件
if TARGET_MX6ULL_HELLO_EMMC
config SYS_BOARD
default "mx6ull_hello_emmc"
config SYS_VENDOR
default "freescale"
config SYS_CONFIG_NAME
default "mx6ull_hello_emmc"
endif
修改mx6ull_hello_emmc
文件夹下的 MAINTAINERS
文件
MX6ULLEVK BOARD
M: Peng Fan
S: Maintained
F: board/freescale/mx6ull_dang_emmc/
F: include/configs/mx6ull_dang_emmc.h
F: configs/mx6ull_dang_emmc_defconfig
make mx6ull_hello_emmc_defconfig #使用mx6ull_hello_emmc_defconfig配置文件生成u-boot
make -j4
已经将ARCH 和 CROSS_COMPILE 的参数添加到顶层makefile中了。
./imxdownload u-boot.bin /dev/sdb #先查看fdisk查看是哪个设备
使用正点原子的下载文件将u-boot.bin
下载到 tf 卡中。
启动开发板后发现屏幕有问题,网络报错。
查看之后发现引脚相同,所以只需要调整LCD参数。
屏幕使用时是4.3寸的屏幕,找到其对应参数,将其填入之后,具体参数如下:
struct display_info_t const displays[] = {{
.bus = MX6UL_LCDIF1_BASE_ADDR,
.addr = 0,
.pixfmt = 24,
.detect = NULL,
.enable = do_enable_parallel_lcd,
.mode = {
.name = "TFT4384",
.xres = 800,
.yres = 480,
.pixclock = 32258,
.left_margin = 88,
.right_margin = 40,
.upper_margin = 32,
.lower_margin = 13,
.hsync_len = 48,
.vsync_len = 3,
.sync = 0,
.vmode = FB_VMODE_NONINTERLACED
} } };
之后进行编译下载,发现LCD屏幕正常点亮。
根据原理图查看开发板和参考板的硬件区别是什么,然后对其就行修改。
(懒了,以后补