Linux系统移植:官板 uboot 修改(上)

Posted 嵌入式up笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统移植:官板 uboot 修改(上)相关的知识,希望对你有一定的参考价值。

目录

Linux系统移植:官板 uboot 修改(上)

基于官方 uboot 进行修改,适配原子开发板

一、添加开发板配置文件

在 configs 下拷贝 mx6ull_14x14_evk_emmc_defconfig 文件重命名为 mx6ull_alientek_emmc_defconfig

修改 mx6ull_alientek_emmc_defconfig 中的内容如下:

CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ull_alientek_emmc/imximage.cfg,MX6ULL_EVK_EMMC_REWORK"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_ALIENTEK_EMMC=y
CONFIG_CMD_GPIO=y

主要修改第一行的参数(配置文件路径)和第四行的变量名称

二、添加开发板头文件

复制 include/configs/mx6ullevk.h,重命名为 mx6ull_alientek_emmc.h 在该文件夹下做开发板头文件

修改一下头文件的宏:

如果要使能或者禁止 uboot 的某些功能(裁剪 uboot),在该文件里面做修改即可,该文件里面一些参数功能如下:

  • PHYS_SDRAM_SIZE:板子 DRAM 的大小

  • CONFIG_DISPLAY_CPUINFO:uboot 启动的时候可以输出 CPU 信息

  • CONFIG_SYS_MALLOC_LEN :malloc 内存池大小,这里设置为 16MB

  • CONFIG_BOARD_EARLY_INIT_F:定义该宏后,board_init_f 函数就会调用 board_early_init_f 函数

  • CONFIG_BOARD_LATE_INIT:定义后 board_init_r 函数就会调用 board_late_init 函数

  • CONFIG_MXC_UART_BASE:串口寄存器基地址,这样 uboot 可以操作串口的寄存器,初始化串口以及通过串口打印消息,IMX 串口地址如下:

  • CONFIG_SYS_FSL_ESDHC_ADDR:EMMC 所使用接口的寄存器基地址,也就是 USDHC2 的基地址

  • CONFIG_SYS_FSL_USDHC_NUM:表示 USDHC 数量

  • IIC 相关宏:

  • 如果使用 NAND 的话,可以对 NAND 的分区设置,设置宏如下:

    NAND 分区如下:

    这里可以修改代码调整的,我们没用到就不管了

  • CONFIG_MFG_ENV_SETTINGS:定义了一些环境变量,使用 MfgTool 烧写系统时候会用到这里面的环境变量

  • CONFIG_EXTRA_ENV_SETTINGS:也是设置一些环境变量

  • CONFIG_BOOTCOMMAND:此宏就是设置环境变量 bootcmd 的值

  • 下面一段设置命令 memtest 相关宏定义:使能命令 memtest,设置 memtest 测试的内存起始地址和内存大小

  • CONFIG_SYS_LOAD_ADDR:表示 linux kernel 在 DRAM 中的加载地址,也就是 linux kernel 在 DRAM 中的存储首地址,CONFIG_LOADADDR=0X80800000

  • CONFIG_SYS_HZ:系统时钟频率

  • CONFIG_STACKSIZE:栈大小

  • CONFIG_NR_DRAM_BANKS:DRAM BANK 的数量

  • PHYS_SDRAM:DRAM 控制器**(MMDC0)**所管辖的 DRAM 范围起始地址,也就是 0X80000000

  • CONFIG_SYS_SDRAM_BASE:DRAM 的起始地址

  • CONFIG_SYS_INIT_RAM_ADDR:内部 IRAM 的起始地址(也就是 OCRAM 的起始地址),为 0X00900000

  • CONFIG_SYS_INIT_RAM_SIZE:内部 IRAM 的大小

  • CONFIG_SYS_INIT_SP_OFFSET:初始 SP 偏移

  • CONFIG_SYS_INIT_SP_ADDR:初始 SP 地址

  • CONFIG_SYS_MMC_ENV_DEV:默认的 MMC 设备,这里默认为USDHC2,也就是 EMMC

  • CONFIG_SYS_MMC_ENV_PART:模式分区,默认为第 0 个分区

  • CONFIG_MMCROOT:设置进入 linux 系统的 根文件系统 所在的分区,这里设置为 “/dev/mmcblk1p2”,也就是 EMMC 设备的第 2 个分区。第 0 个分区保存 uboot,第 1 个分区保存 linux 镜像和设备树,第 2 个分区为 Linux 系统的根文件系统

  • CONFIG_ENV_SIZE:环境变量大小,默认为 8KB

  • CONFIG_ENV_OFFSET:环境变量偏移地址,这里的偏移地址是相对于存储器的首地址。如果环境变量保存在 EMMC 中的话,环境变量偏移地址为 12*64KB。如果环境变量保存在 SPI FLASH 中的话,偏移地址为 768*1024。如果环境变量保存在 NAND 中的话,偏移地址为 60<<20(60MB),并且重新设置环境变量的大小为 128KB

  • USB相关宏

  • 网口相关宏
    使能 dhcp、ping 等命令

    宏定义控制 dhcp、ping 等命令,IMX_FEC_BASE 为 ENET 接口的寄存器首地址,宏 CONFIG_FEC_MXC_PHYADDR 为网口 PHY 芯片的地址。宏 CONFIG_FEC_XCV_TYPE 为 PHY 芯片所使用的接口类型

  • 其他配置宏

    CONFIG_VIDEO 宏用于开启 LCD

    CONFIG_VIDEO_LOGO 使能 LOGO 显示

    CONFIG_CMD_BMP 使能 BMP 图片显示指令,可以在 uboot 中显示图片

三、添加开发板板级文件

每个板子都有一个对应的文件夹来存放板级文件,比如开发板上外设驱动文件等,NXP 板级文件夹都存放在 board/freescale 目录下,我们复制 mx6ullevk,将其重命名为 mx6ull_alientek_emmc

将其中的 mx6ullevk.c 文件重命名为 mx6ull_alientek_emmc.c,然后对该目录下板级文件做进一步修改:

3.1 修改 Makefile 文件

修改文件名称为 mx6ull_alientek_emmc.o

obj-y  := mx6ull_alientek_emmc.o

extra-$(CONFIG_USE_PLUGIN) :=  plugin.bin
$(obj)/plugin.bin: $(obj)/plugin.o
	$(OBJCOPY) -O binary --gap-fill 0xff $< $@

3.2 修改 imximage.cfg 文件

将 imximage.cfg 中的下面

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

改成

PLUGIN board/freescale/mx6ull_alientek_emmc /plugin.bin 0x00907000

就是改文件路径

3.3 修改 Kconfig 文件

修改 Kconfig 文件,修改关联文件名称,修改后如下

if if TARGET_MX6ULL_ALIENTEK_EMMC

config SYS_BOARD
	default "mx6ull_alientek_emmc"

config SYS_VENDOR
	default "freescale"

config SYS_SOC
	default "mx6"

config SYS_CONFIG_NAME
	default "mx6ull_alientek_emmc"

endif

3.4 修改 MAINTAINERS 文件

修改 MAINTAINERS 文件的相关目录文件名称,修改后的内容如下

MX6ULLEVK BOARD
M:	Peng Fan <peng.fan@nxp.com>
S:	Maintained
F:	board/freescale/mx6ull_alientek_emmc/
F:	include/configs/mx6ull_alientek_emmc.h

四、修改 uboot 图形界面配置文件

因为 uboot 是支持图形界面配置的,修改一下方便后面配置,修改 arch/arm/cpu/armv7/mx6/Kconfig,添加如下内容:

config TARGET_MX6ULL_ALIENTEK_EMMC
	bool "Support mx6ull_alientek_emmc"
	select MX6ULL
	select DM
	select DM_THERMAL

位置如下:

在最后一行的 endif 的前一行添加如下内容:

source "board/freescale/mx6ull_alientek_emmc/Kconfig"

添加后如下:

五、编译修改后 uboot

在 uboot 根目录下新建一个名为 boot_build.sh 的 shell 脚本,用于编译,脚本添加内容如下:

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_alientek_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

给予 boot_build.sh 可执行权限,然后运行脚本来完成编译

chmod 777 boot_build.sh
./boot_build.sh

执行完成编译后如下:

下载 uboot.bin 到 SD 卡,插卡观察 我们修改后的 U-Boot:

以上是关于Linux系统移植:官板 uboot 修改(上)的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统移植:官板 uboot 修改(下)

Linux系统移植:官板 uboot 修改(下)

Linux系统移植:NXP 官板 uboot 移植

Linux系统移植:NXP 官板 uboot 移植

嵌入式linux核心课程 2.uboot和系统移植 2.1.uboot和系统移植第1部分-uboot学习前传

Linux系统移植:uboot 启动 Linux