目录
- Linux系统移植:官板 uboot 修改(上)
- 一、添加开发板配置文件
- 二、添加开发板头文件
- 三、添加开发板板级文件
- 3.1 修改 Makefile 文件
- 3.2 修改 imximage.cfg 文件
- 3.3 修改 Kconfig 文件
- 3.4 修改 MAINTAINERS 文件
- 四、修改 uboot 图形界面配置文件
- 五、编译修改后 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&#xff1a;环境变量偏移地址&#xff0c;这里的偏移地址是相对于存储器的首地址。如果环境变量保存在 EMMC 中的话&#xff0c;环境变量偏移地址为 12*64KB。如果环境变量保存在 SPI FLASH 中的话&#xff0c;偏移地址为 768*1024。如果环境变量保存在 NAND 中的话&#xff0c;偏移地址为 60<<20(60MB)&#xff0c;并且重新设置环境变量的大小为 128KB
-
USB相关宏&#xff1a;
-
网口相关宏&#xff1a;
使能 dhcp、ping 等命令
宏定义控制 dhcp、ping 等命令&#xff0c;IMX_FEC_BASE 为 ENET 接口的寄存器首地址&#xff0c;宏 CONFIG_FEC_MXC_PHYADDR 为网口 PHY 芯片的地址。宏 CONFIG_FEC_XCV_TYPE 为 PHY 芯片所使用的接口类型
-
其他配置宏&#xff1a;
CONFIG_VIDEO 宏用于开启 LCD
CONFIG_VIDEO_LOGO 使能 LOGO 显示
CONFIG_CMD_BMP 使能 BMP 图片显示指令&#xff0c;可以在 uboot 中显示图片
三、添加开发板板级文件
每个板子都有一个对应的文件夹来存放板级文件&#xff0c;比如开发板上外设驱动文件等&#xff0c;NXP 板级文件夹都存放在 board/freescale 目录下&#xff0c;我们复制 mx6ullevk&#xff0c;将其重命名为 mx6ull_alientek_emmc
将其中的 mx6ullevk.c 文件重命名为 mx6ull_alientek_emmc.c&#xff0c;然后对该目录下板级文件做进一步修改&#xff1a;
3.1 修改 Makefile 文件
修改文件名称为 mx6ull_alientek_emmc.o
obj-y :&#61; mx6ull_alientek_emmc.oextra-$(CONFIG_USE_PLUGIN) :&#61; plugin.bin
$(obj)/plugin.bin: $(obj)/plugin.o$(OBJCOPY) -O binary --gap-fill 0xff $< $&#64;
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 文件&#xff0c;修改关联文件名称&#xff0c;修改后如下
if if TARGET_MX6ULL_ALIENTEK_EMMCconfig SYS_BOARDdefault "mx6ull_alientek_emmc"config SYS_VENDORdefault "freescale"config SYS_SOCdefault "mx6"config SYS_CONFIG_NAMEdefault "mx6ull_alientek_emmc"endif
3.4 修改 MAINTAINERS 文件
修改 MAINTAINERS 文件的相关目录文件名称&#xff0c;修改后的内容如下
MX6ULLEVK BOARD
M: Peng Fan <peng.fan&#64;nxp.com>
S: Maintained
F: board/freescale/mx6ull_alientek_emmc/
F: include/configs/mx6ull_alientek_emmc.h
四、修改 uboot 图形界面配置文件
因为 uboot 是支持图形界面配置的&#xff0c;修改一下方便后面配置&#xff0c;修改 arch/arm/cpu/armv7/mx6/Kconfig&#xff0c;添加如下内容&#xff1a;
config TARGET_MX6ULL_ALIENTEK_EMMCbool "Support mx6ull_alientek_emmc"select MX6ULLselect DMselect DM_THERMAL
位置如下&#xff1a;
在最后一行的 endif 的前一行添加如下内容&#xff1a;
source "board/freescale/mx6ull_alientek_emmc/Kconfig"
添加后如下&#xff1a;
五、编译修改后 uboot
在 uboot 根目录下新建一个名为 boot_build.sh 的 shell 脚本&#xff0c;用于编译&#xff0c;脚本添加内容如下&#xff1a;
#!/bin/bash
make ARCH&#61;arm CROSS_COMPILE&#61;arm-linux-gnueabihf- distclean
make ARCH&#61;arm CROSS_COMPILE&#61;arm-linux-gnueabihf- mx6ull_alientek_emmc_defconfig
make V&#61;1 ARCH&#61;arm CROSS_COMPILE&#61;arm-linux-gnueabihf- -j16
给予 boot_build.sh 可执行权限&#xff0c;然后运行脚本来完成编译
chmod 777 boot_build.sh
./boot_build.sh
执行完成编译后如下&#xff1a;
下载 uboot.bin 到 SD 卡&#xff0c;插卡观察 我们修改后的 U-Boot&#xff1a;