cpu : s5pv210(armv7)
uboot :u-boot-2016.09
ubuntu :ubuntu 16.04
移植平台:tq210
因为smdkc100与我们要移植的s5pv210同为armv7,所以我们以smdkc100为模板来修改。
一、添加单板信息
u-boot-2016.09$ cp -arf board/samsung/smdkc100 board/samsung/tq210
进入tq210目录下将tq210/下的smdkc100.c重命名为tq210.c
u-boot-2016.09/board/samsung/tq210$ mv smdkc100.c tq210.c
修改Kconfig:
if TARGET_TQ210
config SYS_BOARD
default "tq210"
config SYS_VENDOR
default "samsung"
config SYS_SOC
default "s5pV210"
config SYS_CONFIG_NAME
default "tq210"
endif
修改Makefile:
obj-y := tq210.o
obj-$(CONFIG_SAMSUNG_ONENAND) += onenand.o
obj-y += lowlevel_init.o
修改MAINTAINERS:
TQ210 BOARD
S: Maintained
F: board/samsung/tq210/
F: include/configs/tq210.h
F: configs/tq210_defconfig
根据MAINTAINERS中的信息添加tq210的头文件tq210.h与设置tq210_defconfig
u-boot-2016.09$ cp include/configs/smdkc100.h include/configs/tq210.h
u-boot-2016.09$ cp configs/smdkc100_defconfig configs/tq210_defconfig
修改tq210_defconfig,tq210.h暂时不用修改。
CONFIG_ARM=y
CONFIG_ARCH_S5PV210=y
CONFIG_TARGET_TQ210=y
CONFIG_DEFAULT_DEVICE_TREE="s5pv210-tq210"
CONFIG_BOOTDELAY=3
CONFIG_HUSH_PARSER=y
CONFIG_SYS_PROMPT="TQ210# "
# CONFIG_CMD_IMLS is not set
# CONFIG_CMD_FLASH is not set
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_CACHE=y
CONFIG_CMD_FAT=y
修改根目录下Makefile,添加我们自己的交叉编译工具链:
CROSS_COMPILE ?= /usr/local/arm-cortex_a8-linux-gnueabi/bin/arm-cortex_a8-linux-gnueabi-
此时我们自己的设备信息添加完成,执行make tq210_defconfig, make发现编译不能通过,此时为我们自己的SOC不匹配,下面我们添加S5PV210到u-boot-2016中。
二、添加S5PV210信息
进入arch/arm目录下,找到S5PC1XX的信息,模仿修改为S5PV210:
u-boot-2016.09/arch/arm$ vim Kconfig
config ARCH_S5PV210
bool "Samsung S5PV210"
select CPU_V7
select DM
select DM_SERIAL
select DM_GPIO
source "arch/arm/mach-s5pv210/Kconfig"
修改arch/arm目录下的Makefile,将S5PV210编进uboot:
u-boot-2016.09/arch/arm$ vim Makefile
machine-$(CONFIG_ARCH_S5PV210) += s5pv210
复制mach-s5pc1xx为mach-s5pv210:
u-boot-2016.09/arch/arm$ cp -arf mach-s5pc1xx mach-s5pv210
修改mach-s5pv210下的Kconfig:
if ARCH_S5PV210
choice
prompt "S5PV210 board select"
optional
#config TARGET_S5P_GONI
# bool "S5P Goni board"
# select OF_CONTROL
config TARGET_TQ210
bool "Support tq210 board"
select OF_CONTROL
endchoice
config SYS_SOC
default "s5pv210"
#source "board/samsung/goni/Kconfig"
source "board/samsung/tq210/Kconfig"
endif
再次回到根目录下执行make tq210_defconfig, make发现编译还是不能通过。
三、添加S5PV210的寄存器信息
u-boot-2016.09/arch/arm/mach-s5pv210/include/mach$ vim cpu.h
#ifndef _S5PV210_CPU_H
#define _S5PV210_CPU_H
#define S5P_CPU_NAME "S5P"
#define S5PV210_ADDR_BASE 0xE0000000
根据datasheet Section 01第二节MEMORY MAP修改寄存器信息:
#define S5PV210_PRO_ID 0xE0000000
#define S5PV210_CLOCK_BASE 0xE0100000
#define S5PV210_GPIO_BASE 0xE0200000
#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 S5PV210_VIC3_BASE 0xF2300000
#define S5PV210_NAND_BASE 0xB0E00000
#define S5PV210_WATCHDOG_BASE 0xE2700000
#define S5PV210_MMC_BASE 0xEB000000
#define S5PV210_PWMTIMER_BASE 0xE2500000
#define S5PV210_UART_BASE 0xE2900000
这时回到board/samsung/tq210下,修改lowlevel_init.S, 将文件里的S5PC100 全部替换为S5PV210。
回到arch/arm/cpu/armv7/目录下,修改Makefile:
ifneq (,$(filter s5pv210 s5pc1xx exynos,$(SOC)))
obj-y += s5p-common/
endif
再次回到根目录下执行make tq210_defconfig, make发现编译还是不能通过,产生dts错误。找到dts的位置arch/arm/dts,添加s5pv210:
u-boot-2016.09/arch/arm/dts$ cp s5pc1xx-smdkc100.dts s5pv210-tq210.dts
修改Makefile,添加支持编译的语句:
u-boot-2016.09$ vim arch/arm/dts/Makefile
dtb-$(CONFIG_S5PV210) += s5pv210-tq210.dtb /* add by keyue */
因为需要执行我们添加的语句,需要CONFIG_S5PV210这个宏,所以我们将include/configs/tq210.h中的CONFIG_S5PC100修改为CONFIG_S5PV210。
其他暂时不用修改,再次编译,发现产生了u-boot.bin文件,表示我们编译成功。
到这里我们成功添加了S5PV210。。