u-boot-2016.09移植(1)-单板配置

时间:2021-09-22 06:35:32
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。。