串口作為一種非常簡單的通信方式,才是嵌入式系統調試的王道,通過設置串口輸出,我們可以將程序運行的情況直接通過串口線輸出到屏幕上,對於這種異常重要的功能,uboot原生就提供了支持,但為此我們需要做一些准備工作, 流程還是那套:
- 找運行邏輯,即插入代碼的位置。
- 根據運行邏輯編寫功能代碼。
- 找配置邏輯,即修改哪些文件使配置生效。
- 根據配置邏輯修改配置使功能代碼生效。
- 重新編譯燒寫uboot。
1. 找運行邏輯
通過(二)的分析, 我們了解到初始化串口的工作在BL2的"board/samsung/myboard/lowlevel_init.S"中進行, 所以我們的工作就是在這個文件中添加相應的代碼.
2. 編寫功能代碼
為了讓串口工作, 我們需要添加如下代碼
添加臨時棧
41 lowlevel_init:
42 ldr sp,=0x02060000 @use iRom stack in bl2
43 push {lr}
關閉看門狗
67 beq wakeup_reset
68
69 #if 1 /*for close watchdog */
70 /* PS-Hold high */
71 ldr r0, =0x1002330c
72 ldr r1, [r0]
73 orr r1, r1, #0x300
74 str r1, [r0]
75 ldr
76 r0, =0x11000c08
77 ldr r1, =0x0
78 str r1, [r0]
79 /* Clear MASK_WDT_RESET_REQUEST */
80 ldr r0, =0x1002040c
81 ldr r1, =0x00
82 str r1, [r0]
83 #endif
84 /*
串口初始化
352 str r1, [r0, #EXYNOS4_GPIO_A1_CON_OFFSET]
353 #if 1
354 ldr r0, =0x10030000
355 ldr r1, =0x666666
356 ldr r2, =CLK_SRC_PERIL0_OFFSET
357 str r1, [r0, r2]
358 ldr r1, =0x777777
359 ldr r2, =CLK_DIV_PERIL0_OFFSET
360 str r1, [r0, r2]
361 #endif
362 ldr r0, =EXYNOS4_UART_BASE
注釋掉 trustzone 初始化
104 /* for UART */
105 bl uart_asm_init
106 @bl tzpc_init
3. 找配置邏輯
這些匯編代碼也不需要特別的配置, 重新編譯即可生效
4. 修改配置
無
5. 重新編譯燒寫
進行了這些工作,我們就可以接上串口線看一下是否有串口輸出, 下面是我把網卡一起移植之后的結果, 當然, 這個界面是串口的功勞.