smdk210 uboot移植

uboot移植
一.概念:
BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS。
二.移植目的:写出自己的Uboot,支持烧写内核。
三..移植步骤:
1.预备Uboot源码,uboot为uboot-samsung-dev,
解压缩,tar xvjf android_uboot_smdkv210.tar.bz2

2.修改顶层Makefile
1)修改架构及编译器
ifeq($(ARCH),arm)
CROSS_COMPILE= arm-linux-
#CROSS_COMPILE =/usr/local/arm/4.4.1-eabi-cortex-a8/usr/bin/arm-linux-
#CROSS_COMPILE =/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
#CROSS_COMPILE =/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
endif
2).复制smdkv210single_config开始的三行,并修改为:
gxa210_config:unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x gxa210 samsung s5pc110
@echo"TEXT_BASE=0xc3e00000">$(obj)board/samsung/gxa210/config.mk

3.生成BSP

1).直接拷贝board/samsung/smdkc110为board/samsung/lz_quiet
2).进入board/samsung/lz_quiet/下。
   - lowlevel_init.S  中注释电源初始化PMIC
   - smdkc110.c       中改为lz_quiet.c
   - Makefile         中改为OBJS:= lz_quiet.o flash.o
   - u-boot.lds中改为board/samsung/lz_quiet/lowlevel_init.o
3).修改include/asm-arm/mach-types
   定义机器类型ID,注意这个ID要传到内核,必须与内核自定义的ID匹配,否则内核不能启动。在内核中添加下面代码:
   lz_quiet     MACH_GXA210    GXA210     2456
4.拷贝include/configs/smdkv210single.h 并取名为include/configs/lz_quiet.h
Include/configs/lz_quiet.h
5.修改机器类型ID
  #define MACH_TYPE 2456
  gd->bd->bi_boot_params = (PHYS_SDRAM_1+0x100);
6.自启动参数设置:
  #define CONFIG_BOOTCOMMAND
  "nand read 20008000 600000 500000;bootm 20008000"
7.定制bootargs参数
NFS引导参数设定
#define CONFIG_BOOTARGS    "console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.210:/home/gxa210/root_fs/fs_mini 
ip=192.168.1.226:192.168.1.210:192.168.1.210:255.255.255.0:eth0:off"
YAFFS2引导参数设定
#define CONFIG_BOOTARGS    "root=/dev/mtdblock4 init=/linuxrc console=ttySAC0"
8.修改UART
  #define CONFIG_SERIAL1          1 /* we use UART1 on SMDKC110 */ 
9.修改DM9000网卡配置:
  /* Hardware drivers */
  #define DM9000_16BIT_DATA
  #define CONFIG_DRIVER_DM90001
  #ifdef CONFIG_DRIVER_DM9000
  #define CONFIG_DM9000_BASE(0x88000000)
  #define DM9000_IO(CONFIG_DM9000_BASE)
  #if defined(DM9000_16BIT_DATA)
  #define DM9000_DATA(CONFIG_DM9000_BASE+8)
  #else
  #define DM9000_DATA(CONFIG_DM9000_BASE+1)
  #endif
  #endif
10.网络参数设置
  #define CONFIG_ETHADDR00:40:5c:26:0a:5b
  #define CONFIG_NETMASK        255.255.255.0
  #define CONFIG_IPADDR192.168.1.20
  #define CONFIG_SERVERIP192.168.1.141
  #define CONFIG_GATEWAYIP192.168.1.1
11.修改网络函数board/samsung/lz_quiet/lz_quiet.c
static void dm9000_pre_init(void){
unsigned int tmp;
#if defined(DM9000_16BIT_DATA)
 SROM_BW_REG &= ~(0XF << 4);
 SROM_BW_REG |= (1<< 4);
#else
 SROM_BW_REG &= ~(0XF << 20);
 SROM_BW_REG &= (0 << 19)|(0 << 18)|(0 << 16);
#endif
SROM_BC1_REG &= (0 << 28)|(0 << 24)|(5 << 16)|(1 << 12)|(4 << 8)|(6 << 4)|(0 << 0);
tmp = MP01CON_REG;
tmp &= ~(0xf<<4);
tmp |=(2<<4);
MP01CON_REG = tmp;
}
12.设置Nand Flash环境变量
  /* timeout values are in ticks */
  #define CFG_FLASH_ERASE_TOUT(5*CFG_HZ) 
  /* Timeout for Flash Erase */
  #define CFG_FLASH_WRITE_TOUT(5*CFG_HZ) 
  /* Timeout for Flash Write */

  #define CFG_ENV_IS_IN_NAND  1
  #define CFG_ENV_OFFSET      0x40000
  #define CFG_ENV_SIZE     0x10000
  /* Total Size of Environment Sector */
  #define CFG_MAX_NAND_DEVICE     1
  #define NAND_MAX_CHIPS          1
13.物理内存映射
  /* Physical Memory Map */
  #define CONFIG_NR_DRAM_BANKS1  
  /* we have 1   bank of DRAM */
  #define PHYS_SDRAM_10x20000000 
  /* SDRAM Bank #1 */
  #define PHYS_SDRAM_1_SIZE0x20000000 /* 512 MB */
//#define PHYS_SDRAM_2 (MEMORY_BASE_ADDRESS + SDRAM_BANK_SIZE) /*SDRAM Bank #2 */
//#define PHYS_SDRAM_2_SIZE      SDRAM_BANK_SIZE
14.修改分频系数
  #define APLL_MDIV       0x7d
  #define APLL_PDIV       0x3
  #define APLL_SDIV       0x1

四.移植步骤的意义
1.编译生成自己的uboot。
2.修改顶层Makefile
3.生成BSP
4.拷贝include/configs/smdkv210single.h 并取名为include/configs/lz_quiet.h
2.使串口可以显示uboot信息。
8.修改UART,修改/board/samsung/lz_quiet/lz_quiet.c里面的一些初始化函数。
3.支持tftp下载
9.修改DM9000网卡配置:
10.网络参数设置
11.修改网络函数board/samsung/lz_quiet/lz_quiet.c
4.支持kernel启动
5.修改机器类型ID
6.自启动参数设置:
7.定制bootargs参数
12.设置Nand Flash环境变量
13.物理内存映射

常用设置(非必须):
1.u-boot命令提示符设置
  #define CFG_PROMPT   “lz_quiet # "
  /* Monitor Command Prompt*/
2.u_boot等待时间
  #define CONFIG_BOOTDELAY 10
3.Cmd命令添加:
/*******************************************************
 * Command definition 
*******************************************************/
#define CONFIG_CMD_CACHE
#define CONFIG_CMD_USB
#define CONFIG_CMD_REGINFO
四.添加CMD命令
在common\command.c中添加.
int do_LZ_hello (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
unsigned int i = 0;
printf ("hello lz\n");
for(i = 0;i<argc;++i)
printf("argv[%d] = %s\n",argc,argv[i]);
return 0;
}
U_BOOT_CMD(
hello,3,1,do_LZ_hello,
"hello - is hello\n",
"aaaaaaaaaaaaaaaaaaaa\n"
"aaaaaaaaaaaaaaaaaaaa\n"
"aaaaaaaaaaaaaaaaaaaa\n"
);

本次使用的开发板是s5pv210。uboot为uboot-samsung-dev

你可能感兴趣的:(smdk210 uboot移植)