//file name: ./arch/arm/cpu/arm920t/start.S
//修改配置配置时钟
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
//为
ldr r0, =0x4c000014
mov r1, #0x05; // FCLK:HCLK:PCLK=1:4:8
str r1, [r0]
/* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
mrc p15, 0, r1, c1, c0, 0 /* 读出控制寄存器 */
orr r1, r1, #0xc0000000 /* 设置为“asynchronous bus mode” */
mcr p15, 0, r1, c1, c0, 0 /* 写入控制寄存器 */
#define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01))
/* MPLLCON = S3C2440_MPLL_200MHZ */
ldr r0, =0x4c000004
ldr r1, =S3C2440_MPLL_400MHZ
str r1, [r0]
/* 启动ICACHE */
mrc p15, 0, r0, c1, c0, 0 @ read control reg
orr r0, r0, #(1<<12)
mcr p15, 0, r0, c1, c0, 0 @ write it back
arch/arm
目录下的Kconfig
# ./arch/arm/Kconfig文件添加内容
# 在该内容后
config TARGET_SMDK2410
bool "Support smdk2410"
select CPU_ARM920T
# 添加如下内容
config TARGET_SOPHO2440
bool "Support sopho2440"
select CPU_ARM920T
# 在该内容后
source "board/samsung/smdk2410/Kconfig"
# 添加如下内容
source "board/samsung/sopho2440/Kconfig"
./configs/
目录下添加sopho2440_defconfig
# 复制smdk2410的配置文件
$ cp -rf smdk2410_defconfig sopho2440_defconfig
# 修改
CONFIG_TARGET_SMDK2410=y
# 为
CONFIG_TARGET_SOPHO2440=y
./include/configs/
目录下添加文件sopho2440.h
# 复制smdk2410的配置文件
$ cp -rf smdk2410.h sopho2440.h
# 修改
#define CONFIG_S3C2410 /* specifically a SAMSUNG S3C2410 SoC */
#define CONFIG_SMDK2410 /* on a SAMSUNG SMDK2410 Board */
# 为
#define CONFIG_S3C2440
#define CONFIG_SOPHO2440
./scripts/config_whitelist.txt
文件中添加该板卡的信息CONFIG_ARCH_SOPHO2440
CONFIG_SOPHO2440
# 使用如下命令复制smdk2410板卡的相关内容
$ cp -rf ./board/samsung/smdk2410 ./board/samsung/sopho2440
Kconfig
# file name: ./board/samsung/sopho2440/Kconfig
# 用下边内容替换源文件内容
if TARGET_SOPHO2440
config SYS_BOARD
default "sopho2440"
config SYS_VENDOR
default "samsung"
config SYS_SOC
default "s3c24x0"
config SYS_CONFIG_NAME
default "sopho2440"
endif
Makefile
# 删除
obj-y := smdk2410.o
# 在原位置添加
obj-y := sopho2440.o
lowlevel_init.S
# 删除源文件中的
.word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
.word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
.word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
.word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
.word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
.word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
.word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
.word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
.word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
.word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
.word 0x32
.word 0x30
.word 0x30
# 添加如下内容
.long 0x22011110 //BWSCON
.long 0x00000700 //BANKCON0
.long 0x00000700 //BANKCON1
.long 0x00000700 //BANKCON2
.long 0x00000700 //BANKCON3
.long 0x00000700 //BANKCON4
.long 0x00000700 //BANKCON5
.long 0x00018005 //BANKCON6
.long 0x00018005 //BANKCON7
.long 0x008C04F4 // REFRESH
.long 0x000000B1 //BANKSIZE
.long 0x00000030 //MRSRB6
.long 0x00000030 //MRSRB7
smdk2410.c
为sopho2440.c
/* 删除如下对时钟配置的内容 */
/* to reduce PLL lock time, adjust the LOCKTIME register */
writel(0xFFFFFF, &clk_power->locktime);
/* configure MPLL */
writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,
&clk_power->mpllcon);
/* some delay between MPLL and UPLL */
pll_delay(4000);
完成对u-boot源码的如上修改之后,就可以使用make sopho2440_defconfig
以及make CROSS_COMPILE=arm-linux-
命令编译u-boot了,将生成的u-boot.bin文件烧入Nor Flash就可以实现u-boot的启动。
注意:该博文在完成所有文件的修改之后记录,可能有部分遗漏内容,如果在操作的时候遇到问题无法编译成功,欢迎在评论区留言。