uboot.2015.07移植之驅動串列埠(4)
阿新 • • 發佈:2019-02-07
移植u-boot-2015.07之修改程式支援串列埠列印
1.修改start.S裡面的分頻係數
#define S3C2440_UPLL_48M ((56 << 12) | (2 << 4) | (2 << 0))
#define S3C2440_MPLL_400M ((0x5c << 12) | (1 << 4) | (1 << 0))
#define S3C2440_FHP_821 (0x05)
/* 初始化時鐘 */
mrc P15, 0, R0, C1, C0, 0 /* Read C1 register to R0 */
orr R0, R0, #0xC0000000 /* Set iA=1,nF=1,mode---Asynchronous */
orr R0, R0, #(1 << 12) /* Enable icache */
mcr P15, 0, R0, C1, C0, 0 /* Write to C1 register */
ldr r0, =0x4c000014 /* 設定分頻係數,FCLK:HCLK:PCLK = 8:2:1 */
ldr r1, =S3C2440_FHP_821 /* 400M:100M:50M */
str r1 , [r0]
2.設定時鐘
// ldr r0, =0x4c000000 /* Set lock time */
// ldr r1, =0xFFFFFFFF
// str r1, [r0]
ldr r0, =0x4c000004
ldr r1, =S3C2440_MPLL_400M /* 設定MPLL輸出時鐘400M */
str r1, [r0]
/* 延時,程式設計手冊裡面有明確指出要進行一段時間的延時 */
1:
ldr r0, =4000
sub r0, r0, #1
bne 1b
ldr r0, =0x4c000008 /* UPLL 48M */
ldr r1 , =S3C2440_UPLL_48M
str r1, [r0]
1:
ldr r0, =8000
sub r0, r0, #1
bne 1b
3.修改board_early_init_f函式
在 board.c 檔案裡面找到 board_early_init_f 函式,註釋掉MPLL的設定(切換到board.c裡面的函式的方法是修改smdk2440.h裡面,註釋掉#define CONFIG_SYS_GENERIC_BOARD。另外在make的時候會出現錯誤,修改u-boot.lds檔案,刪掉第一行的#define CONFIG_SYS_GENERIC_BOARD,重新make)
4.修改lowlevel_init裡面的SDRAM引數
SMRDATA:
.long 0x22011110
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00000700
.long 0x00018005
.long 0x00018005
.long 0x008C04F4
.long 0x000000B1
.long 0x00000030
.long 0x00000030
5.編譯
- 拷貝覆蓋檔案到虛擬機器裡面
- make smdk2440_defconfig
- make
make 結束後會出現一個警告all: $(ALL-y) ifneq ($(CONFIG_SYS_GENERIC_BOARD),y) @echo "===================== WARNING ======================" @echo "Please convert this board to generic board." @echo "Otherwise it will be removed by the end of 2014." @echo "See doc/README.generic-board for further information" @echo "====================================================" endif
這個警告說的是在2014版本的結束就會使用一個通用的板設定,這個與巨集定義 CONFIG_SYS_GENERIC_BOARD
有關,因為上面我們已經在S3C2440.h檔案裡面註釋掉了這個巨集定義,所以這裡就會出現警告,這個暫時不用去管它。
如果不註釋smdk2440.h裡面的#define CONFIG_SYS_GENERIC_BOARD,上述步驟執行完畢後直接make,不會出現錯誤以及警告,並且重啟開發板的時候直接就會執行到了命令列等待使用者輸入,而不是卡到flash的檢測上面,這點也是2015改進的一個地方吧
6.CONFIG_SYS_GENERIC_BOARD巨集定義作用
在2015版本中,這個巨集定義的使用使得 board.c 檔案不被編譯進 bootloader 裡面了,取而代之的是頂層目錄的 common 資料夾下面的 board_r.c 檔案。這個檔案裡面包含有以前在 board.c 檔案裡面的所有函式,並且對以前的函式進行了改進,確切來說是變得更加分散化了,也就更有利於擴充套件,但是在理解起來會比較有困難,不過從大體上來說這兩個檔案實現的功能都是類似的,完全可以按照同樣的思路去理解這兩個檔案。