閱讀26 返回首頁    go 技術社區[雲棲]


嵌入式開發修改u-boot與Linux調試串口總結

近期一個嵌入式開發項目,使用TI Cortex-A8的芯片AM3517作為主控開發。前期使用某公司的核心板搭建開發環境。在自己做底板布板的時候的時候塗個布線方便,改用UART1作為調試串口,而原來某公司給的開發包,已經TI的AM3517 PSP均以UART3作為調試串口。於是在底板焊接完成調試的時候就有了一天痛苦的經曆。

嵌入式開發.jpg

在原版的PSP中, 一共有五處使用到UART3作為打印和調試串口:

   (1)Xloader的打印串口

   (2)u-boot的打印串口

   (3)內核解壓時的信息打印串口

   (4)內核調試串口

   (5)文件係統中使用的顯示終端串口

以上第一處Xloader的打印信息量少且係統中不需要使用,不做修改。本文中講述後四種情況的修改。

1.1 修改u-boot打印串口

AM3517的串口符合TL16C550標準的,所以驅動也是使用16550的驅動,默認情況下,我們隻需要提供需要配置的串口的基地址和中斷號等資源給16550的驅動,寄存器的配置不需要我們去關心。且在瑞泰提供開發包中UART1,UART2,UART3引腳配置均配置為M0模式所以不用去修改引腳複用寄存器。僅需在修改u-boot代碼中include/configs/am3517_icetek.h的如下代碼段:

90 #define CONFIG_CONS_INDEX 3

91 #define CONFIG_SYS_NS16550_COM3 OMAP34XX_UART3

92 #define CONFIG_SERIAL3 1 /* UART3 on AM3517 ICETEK */

將上述代碼修改為:

90 #define CONFIG_CONS_INDEX 1

91 #define CONFIG_SYS_NS16550_COM1 OMAP34XX_UART1

92 #define CONFIG_SERIAL1 1 /* UART1 on AM3517 ICETEK */

重新編譯u-boot,得到u-boot.bin,燒寫至nandflash,重新啟動,Xloader啟動信息打印在UART3,u-boot啟動信息打印在UART1。

1.2修改內核解壓縮打印串口

內核解壓縮信息打印使用的串口,在Linux內核源碼程序中。進入linux源碼文件根目錄,找到 arch/arm/mach-omap2/include/mach/uncompress.h,打開之後發現裏麵隻有一行:

include

include

找到arch/arm/plat-omap/include/mach/uncompress.h,打開後發現以下代碼:

43 #ifdef CONFIG_OMAP_LL_DEBUG_UART3

44 uart = (volatile u8 *)(OMAP_UART3_BASE);

45 #elif defined(CONFIG_OMAP_LL_DEBUG_UART2)

46 uart = (volatile u8 *)(OMAP_UART2_BASE);

47 #elif defined(CONFIG_OMAP_LL_DEBUG_UART1)

48 uart = (volatile u8 *)(OMAP_UART1_BASE);

49 #elif defined(CONFIG_OMAP_LL_DEBUG_NONE)

50 return;

由以上可知內核解壓縮信息打印所使用的串口配置以來Linux內核調試串口的配置,與內核調試串口相同。

1.3修改內核調試串口

內核調試串口的配置在Linux誒和配置中選擇。在Linux源代碼根目錄下運行一下命令:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig

打開配置界麵後,找到一下選項:

System Type --->

TI OMAP Implementations  --->

    Low-level debug console UART (UART3)  --->

修改為:

    Low-level debug console UART (UART1) --->

這裏的 (UART1) 表示調試串口選擇UART1。

保存後退出配置界麵,運行以下命令重新編譯內核:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

將編譯後的內核燒寫至nandflash,設置u-boot啟動參數從nandflash啟動,啟動內核。在UART1打印出內核解壓以及內核啟動信息如下:

NAND read: device 0 offset 0x280000, size 0x500000

5242880 bytes read: OK

Booting kernel from Legacy Image at 80000000 ...

Image Name: Linux-2.6.32

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 2313024 Bytes = 2.2 MB

Load Address: 80008000

Entry Point: 80008000

Verifying Checksum ... OK

Loading Kernel Image ... OK

OK

Starting kernel ...

Uncompressing Linux................................................................................................................................................. done, booting the kernel.

Linux version 2.6.32 (root@world-desktop) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 Mon Apr 2 20:04:47 CST 2012

CPU: ARMv7 Processor [411fc087] revision 7 (ARMv7), cr=10c53c7f

CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache

Machine: OMAP3517/AM3517 EVM

......................................................

1.4修改文件係統中使用的顯示終端串口

係統中使用的終端顯示串口配置在/etc/inittab文件中。打開開發板根文件係統下的/etc/inittab文件,找到一下信息:

31 S:2345:respawn:/sbin/getty 115200 ttyS2

將其修改為:

31 S:2345:respawn:/sbin/getty 115200 ttyS0

完成全部修改任務。

2.感觸

(1)Linux開源特性,使得我們可以很好地對其進行源碼級的修改,使其適合於我們的設計要求。

(2)在進行係統設計時一定要先做好仔細前期準備。尤其在做硬件設計時,一定要充分考慮使用中要用到的資源,不然就會造成後期軟件設計者更多的麻煩。

(3)在做係統設計時一定要充分利用現有資源,在現有基礎上進行設計開發。

本文由朗銳智科編輯整理(www.lrist.com),如有侵權請聯係本站。

最後更新:2017-08-24 14:32:21

  上一篇:go  如何有效的Google(穀歌)優化提升網站關鍵詞排名?
  下一篇:go  摩拜物聯網技術破解共享單車停車亂象