1. 程式人生 > >基於創龍omapl138開發板如何將除錯口從串列埠2改到串列埠1

基於創龍omapl138開發板如何將除錯口從串列埠2改到串列埠1

課題組定製的開發板上有三個串列埠,平時除錯用的是串列埠二,通過USB TO UART2轉換後可以用usb線進行除錯,日常用的時候比較方便,但是近期因為要做實驗,實驗裝置在水下,基於目前的條件,要通過一條五十米的長纜來將宿主機與開發板相連進行除錯,usb線的傳輸距離最長15米左右,因而 考慮將除錯口改到串列埠一,通過RS485協議可以滿足遠距離通訊的需求。這個工作大概分為以下幾步:
一.首先修改u-boot

1 安裝原始碼和工具
先建立安裝目錄”/home/tl/omapl138/uboot”,在命令列執行:
Host# mkdir -p /home/tl/omapl138/uboot
(1) 解壓安裝 U-Boot 原始碼
將光碟中 Linux 資料夾下的 U-Boot 原始碼uboot-03.22.00.06.tar.bz2放到
共享目錄 shareVM 中,進入 Ubuntu 安裝目錄”/home/tl/omapl138/uboot”,如下圖,執行
以下命令:
Host# cd /home/tl/omapl138/uboot
Host# tar jxvf /mnt/hgfs/shareVM/uboot-03.22.00.06.tar.bz2 -C ./
(此處以uboot-03.22.00.06.tar.bz2 為例,)
2 編譯 U-Boot
2.1 清理 U-Boot
進入 U-Boot 原始碼頂層目錄,然後執行以下命令:
Host# make CROSS_COMPILE=arm-none-linux-gnueabi- distclean
這樣就清理了整個 U-Boot 編譯目錄,頂層目錄的 u-boot.bin 映象同時會被刪除
2.2 配置 U-Boot
執行以下命令配置 U-Boot:
Host# make CROSS_COMPILE=arm-none-linux-gnueabi- da850sdi_tl_config
2.3 編譯 U-Boot
執行以下命令編譯 U-Boot:
Host# make CROSS_COMPILE=arm-none-linux-gnueabi- u-boot.ais -j4
-j4 是一個編譯選項,告訴 CPU 用 4 個執行緒去編譯,速度會快一些。編譯完成後會在
U-Boot 原始碼的頂層目錄生成 u-boot.ais 檔案。
完成後如下圖:
這裡寫圖片描述


上面都是創龍教給我們的東西,下面就是我們如何修改的問題了

這是一條嚴肅的分割線

進入/omapl138/uboot/board/davinci/da8xxevm目錄,開啟da850sdi.c,先搜tty,將所有的ttyS2改成ttyS1,再搜uart,將所有的uart2改為uart1。好了,第一個檔案修改就完成了。
進入/omapl138/uboot/include/configs目錄,開啟da850sdi.h,先搜tty,將所有的ttyS2改成ttyS1,再搜uart,將所有的uart2改為uart1。好了,第二個檔案修改也就完成了。
下一步就是編譯了,這麼快就修改好了嗎?嗯,其實還差一點。。。。。
這裡一般都會報錯,因為你只是一廂情願的以為關於串列埠二的這些內容都定義了,那麼改成串列埠一也沒問題吧,其實不然,在編譯的時候這些問題會暴露出來,那麼接下來的工作,就是看缺什麼定義,在對應的檔案裡一一定義,可能還要檢視一下手冊,記憶中大部分缺失的東西應該定義在 /asm/arch/hardware.h這個檔案裡。編譯好了之後我們就可以看到能夠通過串列埠一引導的u-boot了,有兩種選擇,一種是通過CCS把它燒寫在nandflash裡,然後啟動可以看到效果,還有就是通過製作系統啟動卡,這個用過創龍板子的人都知道。但是這只是個開始,接下來我們還要載入核心。
二、修改核心解壓縮列印串列埠。
路徑和修改內容都可以從下面這幅圖中一覽無遺了。
這裡寫圖片描述


修改了之後怎麼辦?當然是重新編譯核心了,為了避免放創龍的手冊,下面就把編譯完成後的圖放一張。
這裡寫圖片描述
uboot.ais和uImage在手,做系統啟動卡不愁了。
三、修改檔案系統中使用的顯示終端串列埠
這個要在根檔案系統下找到/etc/inittab進行修改,這個也困擾了那麼一下,開發板沒有啟動起來,何來根檔案系統,後來想到不是做系統啟動卡了嗎,rootfs分割槽在Linux下是可見的,會不會在這個裡面,後面發現果然是,改的話,找到這個檔案,開啟,在30行左右的位置有這麼一句:

S:2345:respawn:/sbin/mingetty --autologin=root ttyS2

老套路:ttyS2改成ttyS1。
四、修改系統啟動卡的啟動指令碼。
如果你在前面做了啟動指令碼,很有可能發現還是啟動不了,即使用

setenv bootcmd 'run commonargs;run mmcboot;'
saveenv

也不行,那該怎麼做呢,進行如下修改:
(1) 先在 Ubuntu 中新建一個目錄例如 bootscr,將mkimage 檔案(創龍光碟或者網上都能找到)拷貝到此目錄。然後在此目錄新建一個 boot.cmd 檔案,將使用者的 U-Boot 啟動引數寫入此檔案
並儲存。
boot.cmd 內容如下:

setenv bootcmd 'mmc rescan 0;fatload mmc 0 0xc0700000 uImage;bootm c0700000'
setenv bootargs ${mem_args} eth=${ethaddr} 'console=ttyS1,115200n8 root=/dev/mmcblk0p2 rw rootfstype=ext3'
saveenv
boot

(2) 在 bootscr 目錄執行以下命令,即可在當前目錄下生成啟動指令碼。

Host# ./mkimage -A arm -O linux -T script -C none -a 0xc0600000 -e 0xc0600000 -n 
"bootscript" -d boot.cmd boot.scr 

用剛剛生成的boot.scr和boot.cmd替換掉啟動卡中root目錄下的對應檔案,恭喜你也解鎖用串列埠一除錯的技能了。