S5PV210 构建最小linux系统(2)---->Uboot移植

时间:2022-04-04 16:29:29

S5PV210 构建最小linux系统(2)—->Uboot移植

1.u-boot官网下载最新版本u-boot

ftp下载地址:ftp://ftp.denx.de/pub/u-boot/
下载版本:u-boot-2017.11-rc4.tar.bz2

2.修改顶层Makefile文件

搜索 CROSS_COMPILE 
# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
修改为
# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
else
    CROSS_COMPILE ?= arm-none-eabi- #此处为交叉编译器工具,根据自己安装的交叉编译器就进行修改
endif

3.在menuconfig中添加S5PV210选项

3.1 修改./arch/arm目录下的Kconfig文件,在适当地方添加

config ARCH_S5PV210
    bool "Samsung S5PV210"
    select CPU_V7
    select DM
    select DM_SERIAL
source "arch/arm/mach-s5pv210/Kconfig"

3.2 修改./arch/arm目录下的Makefile文件,在适当地方添加

machine-$(CONFIG_ARCH_S5PV210)     += s5pv210

3.3 文件拷贝

3.3.1拷贝./arch/arm目录下mach-s5pc1xx,重命名为mach-s5pv210,删除cache.c

3.3.2拷贝./arch/arm/cpu/armv7/s5p-common中的文件到./arch/arm/mach-s5pv210,删除srom.c

3.4文件修改

3.4.1Makefile 文件修改如下

obj-y   += reset.o
obj-y   += clock.o
obj-y   += timer.o
obj-y   += pwm.o
obj-y   += cpu_info.o

3.4.2 Kconfig 文件修改如下

if ARCH_S5PV210

choice
    prompt "S5PV210 board select"
    optional

config TARGET_SMDKV210
    bool "Support smdkv210 board"
    select OF_CONTROL

endchoice

config SYS_SOC
    default "s5pv210"

source "board/samsung/smdkv210/Kconfig"

endif

3.4.3 clock.c 代码重写如下

static unsigned long get_sclk_apll(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_con *clk_con = (struct s5pv210_clk_con *)samsung_get_base_clk_con();
    int src0=0,con=0,m=0,p=0,s=0;
    src0=clk_src->clk_src0;
    if(src0&0x01)
    {
        con=clk_con->apll_con0;
        m=(con>>16)&0x3ff;
        p=(con>>8)&0x3f;
        s=con&0x07;
        return CONFIG_SYS_CLK_FREQ_V210/p/(1<<(s-1))*m;
    }   
    else
        return CONFIG_SYS_CLK_FREQ_V210;
}
static unsigned long get_sclk_mpll(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_con *clk_con = (struct s5pv210_clk_con *)samsung_get_base_clk_con();
    int src0=0,con=0,m=0,p=0,s=0;
    src0=clk_src->clk_src0;
    if(src0&0x10)
    {
        con=clk_con->mpll_con0;
        m=(con&0x3ff0000)>>16;
        p=(con&0x3f00)>>8;
        s=con&0x07;
        return CONFIG_SYS_CLK_FREQ_V210/p/(1<<s)*m;
    }   
    else
        return CONFIG_SYS_CLK_FREQ_V210;
}
static unsigned long get_sclk_epll(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_con *clk_con = (struct s5pv210_clk_con *)samsung_get_base_clk_con();
    int src0=0,con=0,m=0,p=0,s=0,k=0;
    src0=clk_src->clk_src0;
    if(src0&0x100)
    {
        con=clk_con->epll_con0;
        m=(con&0x3ff0000)>>16;
        p=(con&0x3f00)>>8;
        s=con&0x07;
        k=(clk_con->epll_con1)&0xffff;
        return CONFIG_SYS_CLK_FREQ_V210/p/(1<<s)*(m+k/65536);
    }   
    else
        return CONFIG_SYS_CLK_FREQ_V210;
}
static unsigned long get_sclk_vpll(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_con *clk_con = (struct s5pv210_clk_con *)samsung_get_base_clk_con();
    int src0=0,con=0,m=0,p=0,s=0,k=0;
    src0=clk_src->clk_src0;
    if(src0&0x1000)
    {
        con=clk_con->epll_con0;
        m=(con&0x3ff0000)>>16;
        p=(con&0x3f00)>>8;
        s=con&0x07;
        k=(clk_con->epll_con1)&0xffff;
        return CONFIG_SYS_CLK_FREQ_V210/p/(1<<s)*(m+k/65536);
    }   
    else
        return CONFIG_SYS_CLK_FREQ_V210;
}
static unsigned long get_sclk_usbphy0(void)
{
    return CONFIG_USB_CLK_FREQ_V210;
}
static unsigned long get_sclk_usbphy1(void)
{
    return CONFIG_USB_CLK_FREQ_V210;
}
static unsigned long get_sclk_hdmiphy(void)
{
    return CONFIG_USB_CLK_FREQ_V210;
}
static unsigned long get_sclk_hdmi27m(void)
{
    return CONFIG_USB_CLK_FREQ_V210;
}
static unsigned long get_sclk_a2m(void)
{
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    int div=0;
    div=((clk_div->clk_div0)&0x70)>>4;
    return get_sclk_apll()/(div+1);
}
static unsigned long get_sclk_hpm(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned long src6=0,clk=0,div_copy=0,div_hpm=0;
    src6=clk_src->clk_src6;
    if(src6&0x100)
        clk=get_sclk_mpll();
    else
        clk=get_sclk_apll();
    div_copy=((clk_div->clk_div6)>>16)&0x07;
    div_hpm=((clk_div->clk_div6)>>20)&0x07;

    return clk/(div_copy+1)/(div_hpm+1);
}
static unsigned long get_armclk(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned long src0=0,div_apll=0,clk=0;
    src0=clk_src->clk_src0;
    if(src0&0x100)
        clk=get_sclk_mpll();
    else
        clk=get_sclk_apll();
    div_apll=(clk_div->clk_div0)&0x07;
    return clk/(div_apll+1);
}
static unsigned long get_hclk_msys(void)
{
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned int div_hclkm=0;
    div_hclkm=((clk_div->clk_div0)>>8)&0x07;
    return get_armclk()/(div_hclkm+1);
}
static unsigned long get_pclk_msys(void)
{
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned int div_pclkm=0;
    div_pclkm=((clk_div->clk_div0)>>12)&0x07;
    return get_hclk_msys()/(div_pclkm+1);
}
static unsigned long get_hclk_imem(void)
{
    return get_hclk_msys()/2;
}
static unsigned long get_sclk_dmc0(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned long src6=0,div_dmc0=0,clk=0;
    src6=((clk_src->clk_src6)>>24)&0x03;
    if(src6==0)
        clk=get_sclk_a2m();
    else if(src6==1)
        clk=get_sclk_mpll();
    else if(src6==2)
        clk=get_sclk_epll();
    else if(src6==3)
        clk=get_sclk_vpll();
    else
        return 0;
    div_dmc0=((clk_div->clk_div6)>>28)&0x0f;
    return clk/(div_dmc0+1);
}
static unsigned long get_hclk_dsys(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned long src0=0,div_hclkd=0,clk=0;
    src0=clk_src->clk_src0;
    if(src0&0x100000)
        clk=get_sclk_a2m();
    else
        clk=get_sclk_mpll();
    div_hclkd=((clk_div->clk_div0)>>16)&0x0f;
    return clk/(div_hclkd+1);
}
static unsigned long get_pclk_dsys(void)
{
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned int div_pclkd=0;
    div_pclkd=((clk_div->clk_div0)>>20)&0x07;
    return get_hclk_dsys()/(div_pclkd+1);
}
static unsigned long get_hclk_psys(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned long src0=0,div_hclkp=0,clk=0;
    src0=clk_src->clk_src0;
    if(src0&0x1000000)
        clk=get_sclk_a2m();
    else
        clk=get_sclk_mpll();
    div_hclkp=((clk_div->clk_div0)>>24)&0x0f;
    return clk/(div_hclkp+1);
}
static unsigned long get_sclk_onenand(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned long src0=0,div_flash=0,clk=0;
    src0=clk_src->clk_src0;
    if(src0&0x10000000)
        clk=get_hclk_dsys();
    else
        clk=get_hclk_psys();
    div_flash=((clk_div->clk_div6)>>12)&0x07;
    return clk/(div_flash+1);
}
static unsigned long get_pclk_psys(void)
{
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned int div_hclkp=0;
    div_hclkp=((clk_div->clk_div0)>>28)&0x07;
    return get_hclk_psys()/(div_hclkp+1);
}
static unsigned long get_clk_dpm(void)
{
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned int div_dpm=0;
    div_dpm=((clk_div->clk_div7)>>8)&0x7f;
    return  get_pclk_psys()/(div_dpm+1);
}
static unsigned long get_clk_dvsem(void)
{
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned long div_dvsem=0;
    div_dvsem=(clk_div->clk_div7)&0x7f;
    return  get_pclk_psys()/(div_dvsem+1);
}
unsigned long get_arm_clk()
{
    return get_armclk();
}
unsigned long get_pwm_clk(void)
{
    struct s5pv210_clk_src *clk_src = (struct s5pv210_clk_src *)samsung_get_base_clk_src();
    struct s5pv210_clk_div *clk_div = (struct s5pv210_clk_div *)samsung_get_base_clk_div();
    unsigned long src5=0,div_pwm=0,clk=0;
    src5=((clk_src->clk_src5)>>12)&0x0f;
    switch(src5)
    {
        case 0: clk=CONFIG_SYS_CLK_FREQ_V210 ;break;
        case 1: clk=CONFIG_USB_CLK_FREQ_V210 ;break;
        case 2: clk=get_sclk_hdmi27m() ;break;
        case 3: clk=get_sclk_usbphy0() ;break;
        case 4: clk=get_sclk_usbphy1() ;break;
        case 5: clk=get_sclk_hdmiphy() ;break;
        case 6: clk=get_sclk_mpll() ;break;
        case 7: clk=get_sclk_epll() ;break;
        case 8: clk=get_sclk_vpll() ;break;
        default :   clk=0 ;break;
    }
    div_pwm=((clk_div->clk_div5)>>12)&0x0f;
    return clk/(div_pwm+1);
}
void dis_clk(void) 
{
    printf("SCLK_APLL: %d \r\n",get_sclk_apll());
    printf("SCLK_MPLL: %d \r\n",get_sclk_mpll());
    printf("SCLK_EPLL: %d \r\n",get_sclk_epll());
    printf("SCLK_VPLL: %d \r\n",get_sclk_vpll());
    printf("SCLK_A2M: %d \r\n",get_sclk_a2m());
    printf("ARMCLK: %d \r\n",get_armclk());
    printf("HCLK_MSYS: %d \r\n",get_hclk_msys());
    printf("PLCK_MSYS: %d \r\n",get_pclk_msys());
    printf("HCLK_IMEM: %d \r\n",get_hclk_imem());
    printf("SCLK_DMC0: %d \r\n",get_sclk_dmc0());
    printf("HCLK_DSYS: %d \r\n",get_hclk_dsys());
    printf("PCLK_DSYS: %d \r\n",get_pclk_dsys());
    printf("HCLK_PSYS: %d \r\n",get_hclk_psys());
    printf("PCLK_PSYS: %d \r\n",get_pclk_psys());
    printf("CLK_DPM: %d \r\n",get_clk_dpm());
    printf("CLK_DVSEM: %d \r\n",get_clk_dvsem());
}

3.4.4 ./arch/arm/mach-s5pv210/include/mach/cpu.h 重写为如下代码

#define S5P_CPU_NAME "S5PV210"
#define S5PV210_ADDR_BASE 0xE0000000

/* S5PV210 */
#define S5PV210_PRO_ID 0xE0000000 
#define S5PV210_GPIO_BASE 0xE0200000 
#define S5PV210_PWMTIMER_BASE 0xE2500000 
#define S5PV210_WATCHDOG_BASE 0xE2700000 
#define S5PV210_UART_BASE 0xE2900000 
#define S5PV210_MMC_BASE 0xEB000000 
#define S5PV210_SROMC_BASE 0xE8000000 
#define S5PV210_DMC0_BASE 0xF0000000 
#define S5PV210_DMC1_BASE 0xF1400000 
#define S5PV210_VIC0_BASE 0xF2000000 
#define S5PV210_VIC1_BASE 0xF2100000 
#define S5PV210_VIC2_BASE 0xF2200000 
#define SPPV210_VIC3_BASE 0xF2300000 
#define S5PV210_NAND_BASE 0xB0E00000

/*S5PV210 CLK*/
#define S5PV210_CLK_LOCK 0xE0100000
#define S5PV210_CLK_CON 0xE0100100
#define S5PV210_CLK_SRC 0xE0100200
#define S5PV210_CLK_SRC_MASK 0xE0100280
#define S5PV210_CLK_DIV 0xE0100300
#define S5PV210_CLK_GATE 0xE0100444


#ifndef __ASSEMBLY__
#include <asm/io.h>
/* CPU detection macros */
extern unsigned int s5p_cpu_id;
extern unsigned int s5p_cpu_rev;

static inline int s5p_get_cpu_rev(void)
{
    return s5p_cpu_rev;
}

static inline void s5p_set_cpu_id(void)
{
    s5p_cpu_id = readl(S5PV210_PRO_ID);
    s5p_cpu_rev = s5p_cpu_id & 0x000000FF;
    s5p_cpu_id = 0xC000 | ((s5p_cpu_id & 0x00FFF000) >> 12);
}

static inline char *s5p_get_cpu_name(void)
{
    return S5P_CPU_NAME;
}

#define IS_SAMSUNG_TYPE(type, id) \
static inline int cpu_is_##type(void) \
{                           \
    return 1;       \
}

#define SAMSUNG_BASE(device, base) \
static inline unsigned int samsung_get_base_##device(void) \
{                               \
        return S5PV210_##base; \
}
SAMSUNG_BASE(clk_lock, CLK_LOCK)
SAMSUNG_BASE(clk_con, CLK_CON)
SAMSUNG_BASE(clk_src, CLK_SRC)
SAMSUNG_BASE(clk_src_mask, CLK_SRC_MASK)
SAMSUNG_BASE(clk_div, CLK_DIV)
SAMSUNG_BASE(clk_gate, CLK_GATE)
SAMSUNG_BASE(gpio, GPIO_BASE)
SAMSUNG_BASE(pro_id, PRO_ID)
SAMSUNG_BASE(mmc, MMC_BASE)
SAMSUNG_BASE(sromc, SROMC_BASE)
SAMSUNG_BASE(timer, PWMTIMER_BASE)
SAMSUNG_BASE(uart, UART_BASE)
SAMSUNG_BASE(watchdog, WATCHDOG_BASE)
#endif

3.4.5 ./arch/arm/mach-s5pv210/include/mach/clock.h 重写为如下代码

struct s5pv210_clk_lock {
    unsigned int    apll_lock;
    unsigned int    none1;
    unsigned int    mpll_lock;
    unsigned int    none2;
    unsigned int    epll_lock;
    unsigned int    none3;
    unsigned int    none4;
    unsigned int    none5;
    unsigned int    vpll_lock;
};
struct s5pv210_clk_con {
    unsigned int    apll_con0;
    unsigned int    apll_con1;
    unsigned int    mpll_con0;
    unsigned int    none1;
    unsigned int    epll_con0;
    unsigned int    epll_con1;
    unsigned int    none2;
    unsigned int    none3;
    unsigned int    vpll_con;
};
struct s5pv210_clk_src {
    unsigned int    clk_src0;
    unsigned int    clk_src1;
    unsigned int    clk_src2;
    unsigned int    clk_src3;
    unsigned int    clk_src4;
    unsigned int    clk_src5;
    unsigned int    clk_src6;
};
struct s5pv210_clk_src_mask {
    unsigned int    clk_src_mask0;
    unsigned int    clk_src_mask1;
};
struct s5pv210_clk_div {
    unsigned int    clk_div0;
    unsigned int    clk_div1;
    unsigned int    clk_div2;
    unsigned int    clk_div3;
    unsigned int    clk_div4;
    unsigned int    clk_div5;
    unsigned int    clk_div6;
    unsigned int    clk_div7;
};
struct s5pv210_clk_gate {
    unsigned int    clk_gate_clk;
    unsigned int    none1;
    unsigned int    none2;
    unsigned int    none3;
    unsigned int    none4;
    unsigned int    none5;
    unsigned int    none6;
    unsigned int    clk_gate_ip0;
    unsigned int    clk_gate_ip1;
    unsigned int    clk_gate_ip2;
    unsigned int    clk_gate_ip3;
    unsigned int    clk_gate_ip4;
    unsigned int    none7;
    unsigned int    none8;
    unsigned int    none9;
    unsigned int    clk_gate_block;
    unsigned int    clk_gate_ip5;
};

3.4.6 将./arch/arm/mach-s5pv210文件夹中所有出现s5pc100 s5pc110 ,全部替换为s5pv210对应的结构

3.5 创建板级支持

3.5.1拷贝./board/samsung/smdkc100中的文件到./board/samsung/smdkv210,删除onenand.c,

3.5.2修改Kconfig文件如下

if TARGET_SMDKV210

config SYS_BOARD
    default "smdkv210"

config SYS_VENDOR
    default "samsung"

config SYS_SOC
    default "s5pv210"

config SYS_CONFIG_NAME
    default "smdkv210"

endif

3.5.2修改Kconfig文件如下

if TARGET_SMDKV210

config SYS_BOARD
    default "smdkv210"

config SYS_VENDOR
    default "samsung"

config SYS_SOC
    default "s5pv210"

config SYS_CONFIG_NAME
    default "smdkv210"

endif

3.5.2修改Makefile文件如下

obj-y   := smdkv210.o
obj-y   += lowlevel_init.o

3.5.3 重命名s5pc100 -> s5pv210 并修改文件

int board_init(void)
{
    //smc9115_pre_init();

    gd->bd->bi_arch_number = MACH_TYPE_SMDKV210;
    gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;

    return 0;
}

3.5.4 修改lowlevel_init.S 文件如下

    .globl lowlevel_init
lowlevel_init:

    mov r9,lr
    /* r5 has always zero */
    mov r5, #0

    ldr r8, =S5PV210_GPIO_BASE

    /* Disable Watchdog */
    ldr r0, =S5PV210_WATCHDOG_BASE
    orr r0, r0, #0x0
    str r5, [r0]

    bl led_init
    /* for UART */
    bl uart_asm_init

    mov lr, r9
    mov pc, lr

/*
 * uart_asm_init: Initialize UARTs pins
 */
uart_asm_init:
    mov r0, r8
    ldr r1, =0x22222222
    str r1, [r0, #0x0] @ GPA0_CON
    ldr r1, =0x00022222
    str r1, [r0, #0x20] @ GPA1_CON

    ldr r0,=S5PV210_UART_BASE
    ldr r1,=0x03
    str r1,[r0]

    ldr r1,=0x05
    str r1,[r0,#0x04]

    ldr r1,=0x01
    str r1,[r0,#0x08]

    ldr r1,=0x00
    str r1,[r0,#0x0C]

    ldr r1,=35
    str r1,[r0,#0x28]

    ldr r1,=0x01
    str r1,[r0,#0x2C]

    ldr r1,='U'
    str r1,[r0,#0x20]
    ldr r1,='a'
    str r1,[r0,#0x20]
    ldr r1,='r'
    str r1,[r0,#0x20]
    ldr r1,='t'
    str r1,[r0,#0x20]
    ldr r1,='_'
    str r1,[r0,#0x20]
    ldr r1,='o'
    str r1,[r0,#0x20]
    ldr r1,='k'
    str r1,[r0,#0x20]
    ldr r1,='\r'
    str r1,[r0,#0x20]
    ldr r1,='\n'
    str r1,[r0,#0x20]

    mov pc, lr

3.6 添加板级配置文件

3.6.1 在./include/config 目录下添加smdkv210.h

#define CONFIG_SAMSUNG 1 /* in a SAMSUNG core */
#define CONFIG_S5P 1 /* which is in a S5P Family */
#define CONFIG_S5PV210 1 /* which is in a S5PC100 */
#define CONFIG_SMDKV210 1 /* working with SMDKC100 */
#include <asm/arch/cpu.h> /* get chip and board defs */
#define CONFIG_ARCH_CPU_INIT
#define CONFIG_SYS_CLK_FREQ 24000000
#define CONFIG_SYS_SDRAM_BASE 0x20000000
#define CONFIG_SYS_TEXT_BASE 0x20000000
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_CMDLINE_TAG
#define CONFIG_INITRD_TAG
#define CONFIG_CMDLINE_EDITING
#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + (1 << 20))
#define CONFIG_SERIAL0 1 /* use SERIAL 0 on SMDKC100 */
#define CONFIG_PWM 1
#define CONFIG_ENV_OVERWRITE
#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS
#define CONFIG_BOOTCOMMAND "bootz 20100000 - 200c8000"
#define CONFIG_SYS_LONGHELP /* undef to save memory */
#define CONFIG_SYS_PBSIZE 384 /* Print Buffer Size */
#define CONFIG_SYS_MEMTEST_START 0x200c0000
#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x50)
#define CONFIG_SYS_LOAD_ADDR CONFIG_SYS_TEXT_BASE
#define CONFIG_NR_DRAM_BANKS 1
#define PHYS_SDRAM_1 CONFIG_SYS_SDRAM_BASE /* SDRAM Bank #1 */
#define PHYS_SDRAM_1_SIZE (512 << 20) /* 0x8000000, 128 MB Bank #1 */
#define CONFIG_SYS_MONITOR_BASE 0x00000000
#define CONFIG_SYS_MONITOR_LEN (256 << 10) /* 256 KiB */
#if !defined(CONFIG_NAND_SPL) && (CONFIG_SYS_TEXT_BASE >= 0xc0000000)
#define CONFIG_ENABLE_MMU
#endif
#ifdef CONFIG_ENABLE_MMU
#define CONFIG_SYS_MAPPED_RAM_BASE 0xc0000000
#else
#define CONFIG_SYS_MAPPED_RAM_BASE CONFIG_SYS_SDRAM_BASE
#endif
#define CONFIG_ENV_SIZE (128 << 10) /* 128KiB, 0x20000 */
#define CONFIG_ENV_ADDR (256 << 10) /* 256KiB, 0x40000 */
#define CONFIG_ENV_OFFSET (256 << 10) /* 256KiB, 0x40000 */
#define CONFIG_SYS_INIT_SP_ADDR 0x200C7000

3.6.2 在./scripts/config_whitelist.txt 中合适地方添加 CONFIG_S5PV210、CONFIG_SMDKV210

4.配置安装

menuconfig配置的时候先 make smdkc100_defconfig 使用smdkc100的默认配置
然后再进入memuconfig进行配置

5.完整S5PV210_U-BOOT下载地址:后面补上