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进行配置