嵌入式ARM在Linux下更改除錯串列埠
By Toradex秦海
1). 簡介
在基於嵌入式ARM開發產品的時候,有時候由於ARM處理器UART數量的限制,我們需要將系統預設的除錯串列埠列印資訊關閉或者轉移到其他串列埠上面去,本文即演示更改uboot和linux kernel 除錯串列埠的過程示例。
本文所演示的平臺來自於ToradexApalis iMX6ARM嵌入式平臺,這是一個基於NXP iMX6 ARM處理器,支援雙核/四核Cortex-A9。
2. 準備
a).Apalis iMX6 ARM核心版配合Ixora載板,分別連線預設除錯串列埠UART1和準備要轉移的除錯串列埠UART3到開發主機方便除錯,Apalis iMX6 UART序號說明請參考這裡。
b).Apalis iMX6系統使用官方預編譯Linux BSP V2.7版本,如何下載更新請參考這裡。
c). 如果只是想關閉預設串列埠的列印資訊,可以參考這裡的說明,本文就不贅述。
3). Uboot原始碼更改編譯
a). 為了將uboot console從UART1 轉換至 UART3,需要修改uboot原始碼。
b). 根據這裡的說明配置好編譯所需要的toolchain,並下載對應uboot原始碼到ubuntu開發主機。
c). 因為針對Apalis iMX6 uboot的原始碼V2.7和V2.8版本都是基於2016.11-toradex 分支,因此這裡為了將原始碼鎖定為V2.7版本需要通過下面命令指定tag並建立新的操作分支。
-------------------------------
$ cdu-boot-toradex
$ git checkout Colibri-iMX6_LXDE-Image_2.7b4-20171005
$ git checkout –b imx6_v2.7 Colibri-iMX6_LXDE-Image_2.7b4-20171005
-------------------------------
d). 修改原始碼,具體請參考下面兩個patch檔案
./ apalis_imx6.h –https://github.com/simonqin09/Apalis_iMX6_Console_Switch/blob/master/apalis_imx6.h.patch
./ apalis_imx6.c –https://github.com/simonqin09/Apalis_iMX6_Console_Switch/blob/master/apalis_imx6.c.patch
//apalis_imx6.h 標頭檔案中修改 Console 環境變數的預設值是為了後續配合linux kernel console的修改,其他修改都是為了uboot console的修改。
e). 重新編譯原始碼
-------------------------------
$ make apalis_imx6_defconfig
$ make -j3 2>&1 | tee build.log
-------------------------------
f). 將新編譯生成的uboot相關檔案SPL和u-boot.img替換之前更新Linux BSP image所製作的SD卡里面的相關檔案。
-------------------------------
$ cd /media/username/… (SD卡掛載路徑)
$ cd apalis_imx6
$ mv SPL SPL.bak
$ mv u-boot.imx-spl u-boot.imx-spl.bak
$ cp…/u-boot-toradex/SPL .
$ cp …/u-boot-toradex/u-boot.img u-boot.imx-spl
-------------------------------
4). 更新uboot以及修改Linux檔案系統
a). 在通過SD卡更新新的uboot之前,先進入Apalis iMX6 Linux 檔案系統進行如下配置修改。
-------------------------------
$ cd /etc/systemd/system/getty.target.wants
$ cp [email protected] [email protected]
$ systemctl disable [email protected]
$ reboot
-------------------------------
b). 重啟後通過預設除錯串列埠UART1進入uboot,連線SD卡到Apalis iMX6,執行下面命令進行uboot更新
-------------------------------
# runsetupdate
# runupdate_uboot
-------------------------------
c). 更新完成後,再次重啟,此時uboot console已經切換到新的UART3串列埠上面了,再次進入uboot,執行下面命令載入預設的環境變數。
-------------------------------
# env default –a
# saveenv
-------------------------------
d). 此時重啟後,uboot console和linux kernel console就都全部切換到新的UART3串列埠上面了,完成了本次示例。