本人有點懶惰,直接在smdk2410的基礎上進行修改linux
(note :紅色字體表示修改內容,藍色字體表示增長內容)async
1. 頂層的makefile函數
在247行 添加以下兩條語句 :字體
ARCH :=arm
CROSS_COMPILE :=arm-linux-spa
2 修改始終頻率3d
打開 u-boot-2016.03/arch/arm/cpu/arm920t/start.Sblog
第77行 #if defined(CONFIG_S3C2410)接口
#if defined(CONFIG_S3C2440)
第78行 ldr r1, =0x3ff內存
ldr r1, =0x7ffci
第87行 mov r1, #3 //FCLK :HCLK : PCLK = 1:2:4
mov r1,#5 //FCLK :HCLK : PCLK = 1:4:8
打開 u-boot-2016.03/board/samsung/smdk2410/smdk2410.c
第25行到27行的內容改成 :
25:#define M_MDIV 92
26:#define M_PDIV 1
27:#define M_SDIV 1
本開發板的輸入晶振頻率爲12MHz,經過上面的修改,則MPLL頻率爲400MHz。
第37行到39行的內容改成:
54:#define U_M_MDIV 56
55:#define U_M_PDIV 2
56:#define U_M_SDIV 2
經過上面的修改,則UPLL頻率爲48MHz。即爲USB的時鐘
在board_early_init_f()函數中在給寄存器賦值以前增長以下內容
__asm__( "mrc p15, 0, r1, c1, c0, 0\n"
/* read ctrl register */
"orr r1, r1, #0xc0000000\n"
/* Asynchronous */
"mcr p15, 0, r1, c1, c0, 0\n"
/* write ctrl register */
:::"r1"
);
從S3C2440芯片書冊上有說明:
If HDIVN is not 0, the CPU bus mode has to be changed from the fast bus mode to the asynchronous
bus mode using following instructions(S3C2440 does not support synchronous bus mode).
MMU_SetAsyncBusMode
mrc p15,0,r0,c1,c0,0
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
3.修改內存SDRAM時序
打開 u-boot-2016.03/board/samsung/smdk2410/lowlevel_init.S
#define B1_BWSCON (DW16)
#define B2_BWSCON (DW16)
#define B3_BWSCON (DW16)
#define B4_BWSCON (DW32)
#define B5_BWSCON (DW16)
#define B6_BWSCON (DW32)
#define B7_BWSCON (DW32)
/* BANK0CON */
#define B0_Tacs 0x3
#define B0_Tcos 0x3
#define B0_Tacc 0x7
#define B0_Tcoh 0x3
#define B0_Tah 0x3
#define B0_Tacp 0x1
#define B0_PMC 0x0
/* BANK1CON */
#define B1_Tacs 0x1
#define B1_Tcos 0x1
#define B1_Tacc 0x6
#define B1_Tcoh 0x1
#define B1_Tah 0x1
#define B1_Tacp 0x0
#define B1_PMC 0x0
#define B2_Tacs 0x1
#define B2_Tcos 0x1
#define B2_Tacc 0x6
#define B2_Tcoh 0x1
#define B2_Tah 0x1
#define B2_Tacp 0x0
#define B2_PMC 0x0
#define B3_Tacs 0x1
#define B3_Tcos 0x1
#define B3_Tacc 0x6
#define B3_Tcoh 0x1
#define B3_Tah 0x1
#define B3_Tacp 0x0
#define B3_PMC 0x0
#define B4_Tacs 0x1
#define B4_Tcos 0x1
#define B4_Tacc 0x6
#define B4_Tcoh 0x1
#define B4_Tah 0x1
#define B4_Tacp 0x0
#define B4_PMC 0x0
#define B5_Tacs 0x1
#define B5_Tcos 0x1
#define B5_Tacc 0x6
#define B5_Tcoh 0x1
#define B5_Tah 0x1
#define B5_Tacp 0x0
#define B5_PMC 0x0
#define B6_MT 0x3
#define B6_Trcd 0x1
#define B6_SCAN 0x1
#define B7_MT 0x3
#define B7_Trcd 0x1
#define B7_SCAN 0x1
/* REFRESH parameter */
#define REFEN 0x1
#define TREFMD 0x0
#define Trp 0x1
#define Trc 0x1
#define Tchr 0x2
#define REFCNT 1268
4. 修改宏定義
打開 u-boot-2016.03/include/configs/smdk2410.h
第21行 #define CONFIG_S3C2410 /* specifically a SAMSUNG S3C2410 SoC*/
#define CONFIG_S3C2440 /* specifically a SAMSUNG S3C2440 SoC */
s3c2410 和s3c2440有些寄存器不一樣
在27行 增長以下內容
#undef CONFIG_SYS_PROMPT
#define CONFIG_SYS_PROMPT "jetli# " //這個在串口輸出 [jetli#] 內容
將定義的CONFIG_SYS_PROMPT釋放,而後再定義本身須要的。
第157行「#define CONFIG_FLASH_CFI_LEGACY」改成:
#define CONFIG_SYS_CFI_FLASH_CONFIG_REGS {0xFFFF}
由於在u-boot-2011.06中,使用的是CFI的NorFlash接口,因此不須要定義CONFIG_FLASH_CFI_LEGACY,而是要定義CONFIG_SYS_CFI_FLASH_CONFIG_REGS。
第162行「#define CONFIG_SYS_MAX_FLASH_SECT (19)」改成:
#define CONFIG_SYS_MAX_FLASH_SECT (35)
由於本開發板使用的NorFlash是EN29LV160AB,它有35個扇區。
第164行「#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x70000)」 改成
#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x0100000)
uboot-2016 make生成的u-boot.bin >512k>0x70000,環境變量地址爲0x70000時,若是保存環境變量,則會覆蓋了u-boot.bin。saveenv命令後重啓後死機
5.生成u-boot.bin
make distclean
make smdk2410_defconfig
make
燒寫u-boot.bin 到norflash 運行結果以下圖: