配置U-Boot(以实验开发板为例)
1.进入U-Boot源码目录
[root@localhost jy-cbt]# cd ..
[root@localhost /]# cd jy-cbt
[root@localhost jy-cbt]# cd opencsbc-u-boot
[root@localhost opencsbc-u-boot]#
2.关注与平台有关的文件
(1) /opencsbc-u-boot/Makefile
(2) /opencsbc-u-boot/arch/arm/cpu/armv7/start.S
(3) /opencsbc-u-boot/board/samsung/tiny210/tiny210.c
(4) /opencsbc-u-boot/board/samsung/tiny210/Makefile
28 ifndef CONFIG_SPL_BUILD /*是在编译第2阶段代码*/
29 COBJS := tiny210.o /*添加编译当前目录下的tiny.c*/
30 endif
36 SOBJS := lowlevel_init.o mem_setup.o /*添加编译当前目录下的.c文件
(5) /opencsbc-u-boot/boards.cfg
35 #Target ARCH CPU Board name Vendor SoC Options
183 tiny210 arm armv7 tiny210 samsung s5pc1xx
183行定义了Board名字为tiny210,在编译U-Boot时输入的要与该名称一致。
(6) /include/configs.h
2 #define CONFIG_BOARDDIR board/samsung/tiny210 /*定义板级支持包文件路径*/
3 #include <config_cmd_defaults.h>
4 #include <config_defaults.h>
5 #include <configs/tiny210.h> /*定义板级头文件路径*/
6 #include <asm/config.h>
(7) /opencsbc-u-boot/board/samsung/tiny210/lowlevel_init.S
31 #include <s5pc110.h>
32 #include "tiny210_val.h"
(8)/opencsbc-u-boot /board/samsung/tiny210/tiny210.c
200 void dram_init_banksize(void)
{
gd->bd->bi_dram[0].start = PHYS_SDRAM_1; //仅定义一块SDRAM
gd->bd->bi_dram[0].size = get_ram_size((long *)PHYS_SDRAM_1,PHYS_SDRAM_1_SIZE);
206 //gd->bd->bi_dram[1].start = PHYS_SDRAM_2; //定义两块时需要开启
207 //gd->bd->bi_dram[1].size = get_ram_size((long *)PHYS_SDRAM_2,PHYS_SDRAM_2_SIZE);
}
3.定制tiny210.h文件内容
在定制U-Boot过程中,需要添加和修改tiny210.h内容。tiny210.h源文件存放路径:/opencsbc-u-boot/include/configs/tiny210.h。
(1)定义宏。
36 #define CONFIG_TINY210 1 /*定义ARM板名称为ting210*/
92 #define MACH_TYPE_TINY210 2456 /*机器码,要与操作系统中的定义一致*/
93 #define CONFIG_MACH_TYPE MACH_TYPE_SMDKV210
(2)修改目标机命令行提示符(个性化处理)。
134 #define CONFIG_SYS_PROMPT "[tiny210-JYX]# "
经过编译下载后,U-Boot在下载模式时控制台上提示符将被设置为[tiny210-JYX]#
(3)设置网络参数。
437 #define CONFIG_ETHADDR 22:40:5c:26:0a:5b
438 #define CONFIG_NETMASK 255.255.255.0
439 #define CONFIG_IPADDR 192.168.1.15 /*依据使用环境调整* /
440 #define CONFIG_SERVERIP 192.168.1.40
441 #define CONFIG_GATEWAYIP 192.168.1.1
(4)定义内核加载地址。
142 #define CONFIG_SYS_LOAD_ADDR (PHYS_SDRAM_1 + 0x1000000)
165 #define PHYS_SDRAM_1 MEMORY_BASE_ADDRESS
66 #define MEMORY_BASE_ADDRESS CONFIG_SYS_SDRAM_BASE
63 #define CONFIG_SYS_SDRAM_BASE 0x20000000
此处定义内核加载地址为0x21000000。在随后更新系统过程中,该地址也用于下载程序的SDRAM的首地址。
(5)定义NandFlash设备。
426 #define CONFIG_CMD_NAND /*定义NandFlash */
427 #if defined(CONFIG_CMD_NAND)
428 #define CONFIG_CMD_NAND_YAFFS /*定义文件格式为YAFFS */
429 #define CONFIG_CMD_MTDPARTS
430 #define CONFIG_SYS_MAX_NAND_DEVICE 1
431 #define CONFIG_SYS_NAND_BASE (0xB0E000000)
(6)定义启动设备参数。
176 #define CONFIG_ENV_IS_IN_MMC 1 /*此版本仅支持SD卡启动*/
177 #define CONFIG_SYS_MMC_ENV_DEV 0
178 #define CONFIG_ENV_SIZE 0x4000 /*16KB */
179 #define RESERVE_BLOCK_SIZE (512)
180 #define BL1_SIZE (8 << 10) /*8 K reserved for BL1*/
181#define CONFIG_ENV_OFFSET (RESERVE_BLOCK_SIZE + BL1_SIZE + ((16 + 512) * 1024))
182 #define CONFIG_DOS_PARTITION 1
(7)和硬件平台SDRM资源有关配置
143 #define CONFIG_SYS_LOAD_ADDR (PHYS_SDRAM_1 + 0x1000000) //加载程序首地址
163 #define CONFIG_NR_DRAM_BANKS 1 // 2 //有1块DRAM
164 #define SDRAM_BANK_SIZE 0x20000000 //DRAM容量为512MB
316 #define DMC0_MEMCONTROL 0x00202400 /* MemControl BL=4,1Chip DDR2 326 Type,dynamic self refresh force precharge dynamic power down off*/
317 #define DMC0_MEMCONFIG_0 0x20E00323 /* MemConfig0 256MB config, 8 banks,Mapping Method[12:15]0:linear 1:linterleaved, 2:Mixed */
318 #define DMC0_MEMCONFIG_1 0x00E00323 /* MemConfig1*/
功能释义:
316-318 声明SDRAM区使用四片128MB DDR2实现1个地址连续存储空间,容量为512MB。
(S5PV210_Usermanual_Rev1.0.pdf P624/P626/ P627)
316 DMC0_MEMCONTROL = 0x00202400 声明存储器类型为DDR2型。
317 DMC0_MEMCONFIG_0 = 0x20E00323 声明存储空间地址。
[31:24] = 0x20: 起始首地址为0x2000_0000。
[23:16] = 0xE0: 定义上限偏移地址为0x1fff_ffff,表示存储容量为512MB。
[15:12] = 0x0: 地址映射方法为线性
[11:8] = 0x3: 10位列地址
[7:4] = 0x2: 14位行地址
[3:0] = 0x3: 8块
318 DMC0_MEMCONFIG_0 = 0x00E00323 声明芯片基址是0x0000_0000,存储空间地址范围是0x0000_0000至 0x1fff_ffff。
(8)关键设置参数。
98 /* select serial console configuration 声明控制台使用串口1 */
99 #define CONFIG_SERIAL_MULTI 1
100 #define CONFIG_SERIAL0 1 /* use SERIAL 0 */
101 #define CONFIG_BAUDRATE 115200
102 #define S5PC210_DEFAULT_UART_OFFSET 0x020000
116 #include <config_cmd_default.h>
127 #define CONFIG_BOOTDELAY 3 /* 等待3秒开始引导内核代码*/