RK3288 Bare-metal Experiment
目錄
- 1 序言
- 2 裸機開發環境的搭建
- 3 X3288裸機實例
- 3.1 X3288裸機實例1-LED流水燈實驗
- 3.2 X3288裸機實例2-蜂鳴器實驗
- 3.3 X3288裸機實例3-adc模數轉換實驗
- 3.4 X3288裸機實例4-analog-clock模擬時鐘實驗
- 3.5 X3288裸機實例5-backlight背光測試實驗源碼原理圖
- 3.6 X3288裸機實例6-color顏色測試實驗
- 3.7 X3288裸機實例7-irrmote紅外遙控測試實驗
- 3.8 X3288裸機實例8-lcdscreen液晶屏測試實驗
- 3.9 X3288裸機實例9-morsecode摩斯電碼測試實驗
- 3.10 X3288裸機實例10-rc5t620電源管理晶片實驗
- 3.11 X3288裸機實例11-reboot重啟測試實驗
- 3.12 X3288裸機實例12-rtc實時時鐘實驗
- 3.13 X3288裸機實例13-rtttl諾基亞鈴聲播放器實驗
- 3.14 X3288裸機實例14-syr82x同步降壓開關穩壓器實驗
- 3.15 X3288裸機實例15-taichi太極八卦圖實驗
- 3.16 X3288裸機實例16-touchscreen觸摸實驗
- 3.17 X3288裸機實例17-watchdog看門狗實驗
序言
在早期的x210,x4412,x4418,x6818開發平台上,我們陸續推出了近30個豐富有趣的裸機實例,包括各種多媒體動畫,趣味遊戲等,深受廣大嵌入式愛好者喜愛。在x3288開發平台上,應用戶所託,我們在全新的四核平台上,攻克各種難關,繼續推出近20個裸機實例,供大家研究學習。很多廠商推出的裸機程序過於簡單,在x3288平台上,我們由簡到煩,從簡單的點燈,到點亮LCD,在LCD上繪圖,繪動畫等,複雜的程序多達幾十萬行,有興趣的讀者可以仔細琢磨裏面的機理,勢必對嵌入式的理解,對嵌入式興趣的培養,以及對編程水平的提高,都有很大的作用,也期望我們推出的裸機開發實驗,真正能對您有所幫助。
聲明:本文檔全部內容為九鼎創展(深圳市九鼎創展科技有限公司)原創作品,非經九鼎創展同意(書面形式),任何單位及個人不得擅自摘錄本手冊部分或全部,違者我們將追究其法律責任。
裸機開發環境的搭建
開發裸機有很多種方法,之前在S3C2410,S3C2440平台上,比較常用的是ADS1.2或是MDK。但是這些工具主要針對ARM9平台,對於後續的cortex-A8,cortex-A9平台,他們是心有餘而力不足。在linux下開發,需要安裝linux操作系統,需要熟悉makefile,交叉編譯工具鏈等。正因為如此,我們自主搭建了強大的eclipse開發平台,製作了兩套eclipse開發環境,同時支持linux64位, windows64位操作系統。有了這二套eclipse開發環境,無論您使用ubuntu64位,或是win7,window10等等,都可以開發裸機。同時,燒寫程序也不再局限於linux系統,無論您使用何種操作系統,都能方便的將映像文件寫到SD卡。下面就開始我們裸機開發的神奇之旅吧!
安裝eclipse
第一步:確認自己的PC機開發環境。開發板邏輯教程tools中有如下兩個eclipse包:
eclipse-mars-for-arm-windows-x86_64.7z
eclipse-mars-for-arm-gtk-linux-x86_64.7z
從命名方式,我們能夠很清楚的差別,我們需要的開發包。這些包全部是綠色軟件,無需安裝,解壓即可。(建議大家使用linux做開發,這個軟件包已經做過一些路徑和腳本的配置。)由於筆者採用win10 64位操作系統,因此選用第一個包,讀者根據自己的PC機環境選擇對應安裝包,後續不再重複說明。
第二步:解壓eclipse安裝包。(解壓中可能會報錯,推薦使用7zip或者360壓縮)
如果出現這樣的報錯,請忽略他,也可以全部選是,這個的原因是因為window下沒有linux下面的軟連結造成的,不影響軟件的使用。
第三步:啟動eclipse
在解壓的安裝目錄下,有eclipse.bat和eclipse.exe兩個文件,雙擊eclipse.bat即可啟動(記得每次重新打開的時候都是打開這個.bat文件)。由於使用eclipse需要一些環境變量的聲明,我們專程做了個腳本eclipse.bat,雙擊即可聲明環境變量,同時啟動eclipse。這樣,就不用再去手動設置環境變量了。當然用戶也可以手動設置好環境變量,然後通過雙擊eclipse.exe來運行eclipse,這裏就不贅述了。
啟動後界面如下:第一次啟動eclipse時,會提示我們選擇工作空間路徑
這裏我們直接選擇源碼包所在的目錄為工作空間:
點擊OK。進入下面這個界面就會發現全部工程已經導入
雙擊打開某個工程,比如adc。記住一定要雙擊之後才會出現後面的編譯選項
右鍵adc會彈出如下畫面
點擊Build Project ,就會看到如下界面。
記住console 控制台上面 make all 表示編譯開始。注意右下角的18%,可以在這麼觀察編譯的進度。在window下編譯會比較慢,請耐心等候。
編譯過程中的某個界面:
編譯完成後:
注意控制台的打印信息,同時adc文件夾下多出來一個output目錄。這樣編譯工作就完成了。
燒寫鏡像:
接下來就開始來燒寫鏡像了。建議大家先使用我們九鼎提供的鏡像看看實驗效果後,再自己燒錄鏡像。
注意:我們提供的開發板一般都已經燒進去了程序,而3288默認會從emmc優先啟動,所以你插上剛剛製作好的tf卡會出現沒有反應的現象。這時:必須先破壞mmc的啟動才行。
破環的命令行是:
正常開機後,進入串命令行模式下:
第一步切換到root
su
第二步命令:下面這個為1條命令。
busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 count=8192 seek=1 conv=sync
完成上面的過程後,插入升級卡,重啟開發板,應該就可以正常升級了。升級完成後的界面應該是:
下面讀者可以自己來編譯源碼,然後燒錄了。
編譯完成後,在工程目錄下會生成output目錄:
圖中x-ledpak.bin即是我們最終需要的映像文件。注意千萬別使用x-led.bin,該文件沒有和second boot打包,不能直接使用。
這裏帶大家看下led.map文件:
推薦大家用notepad++打開這個文件。打開之後是這樣
Led.map查看那個函數在哪裏,這裏說明了那些函數連結到了內存中。
.text 表示代碼段
.bss未初始化數據段
.data 已經初始化數據段
.comment注釋段
下載源碼到SD卡
針對x3288開發板,裸機開發我們幾乎都是將裸機程序直接燒寫到TF卡運行。在WindowsXP或是WIN7下,可以使用我們自主編寫的燒寫工具x3288_Fusing_Tool.exe燒寫,該軟件可無縫兼容x210、x4412開發板。
注意,下載到TF卡時,首先我們需要給TF卡分區。從光盤中找到PartitionManager.exe工具並打開,界面如下:
上圖中H盤即為我們插入的TF卡分區。我們需要使用這個工具給TF卡預留一些空間,用於存放bootloader或裸機程序。首先我們右鍵點擊最下面圖標的可移動磁盤(H:),點擊刪除分區,如下圖:
軟件會彈出確認界面:
勾上下次不再詢問,點擊是,即刪除了原來的分區。這時,TF卡就只剩一個分區了。再次右鍵點擊該分區,點擊創建分區:
在請指定分區前面的自由空間大小一欄中填入我們需要預留的空間,我們這裏填100M,留給bootloader或裸機已經足夠用了。在請為新分區選擇文件系統中選擇FAT32,點擊是,然後再到主界面快捷菜單欄點擊應用即可。成功分區後提示如下:
至此,分區成功。用戶也可以在ubuntu下使用gparted工具分區。
雙擊x3288_Fusing_Tool.exe,將不小於2GB的TF卡通過讀卡器插到PC機(注意市面上很多山寨的讀卡器,推薦大家用正品行貨,如飈王的讀卡器,使用山寨讀卡器不保證能正常將映像燒寫到TF卡),這時燒寫軟件會自動識別出TF卡,如下圖:

點擊Browse,找到我們剛生成的x3288-led.bin文件,點擊Add,映像會添加到下面的路徑中,這樣下次如果不更改路徑,就不用再指定路徑了。

點擊START,開始燒寫。燒寫完成後,會有如下提示:

點擊確定即可。
在linux下,方法類似。筆者使用的是ubuntu64位14.04系統,安裝好對應版本的eclipse後,導入原始碼,在linux平台下編譯,不需要修改tools中的文件,編譯好之後會產生4個文件。
Ubuntu下製作啟動卡:
第一步:準備一張不小於2GB的TF卡,並插入裝有ubuntu操作系統的PC機上;
第二步:刪除TF卡的所有分區;在linux的終端窗口,使用fdisk/dev/sdb命令刪除原來所有分區,sdb為系統為TF卡分配的設備節點。注意,具體由節點名稱而定,有可能是sdc,sde等。使用如下指定查詢設備節點:
cat/proc/partitions
實例如下:
輸入d,表示刪除分區,輸入w 表示保存已經修改的分區信息。至此,原/dev/sdb1
被刪除。撥掉TF 卡,再插入PC 機上。
注意:必須撥掉後再插入,否則仍然會提示存在/dev/sdb1 節點,會造成出錯。第三步:使用gparted 工具給TF 卡預留256M 空間,用於存放uboot 映像。使用如下命令打開TF 卡分區表:
選擇分區->新建,預留256M 空間給uboot,剩下的分區使用fat32 格式,如下圖所示:
點擊添加,選擇菜單中的應用全部操作,完成TF 卡的分區。
第四步:將TF 卡剩餘的空間格式化為fat32 格式sudo mkfs.vfat /dev/sdb1
第五步:進入映像生成目錄,即output目錄,執行如下指令燒寫uboot 到TF 卡:
cd output
sudo /home/lixu/eclipse/X3288-NO-OS/x-beep/tools/linux/s5p3288-sdmmc.sh /dev/sdb x-beeppak.bin
注意這裏是筆者的路徑,你們的路徑參照這個填寫。
注意,這裏/dev/sdb 為TF 卡的節點,該節點為linux 系統自動分配,也有可能為sdc,sde等,用戶可查詢節點名稱後再執行上面的燒寫腳步。
設置開發板啟動順序
x3288開發板默認首先從EMMC通道啟動,如果開發板已經燒寫了映像,則必須破壞掉默認的EMMC啟動,下面將會有具體的實現方法。
通過TF卡運行裸機程序
將燒有裸機程序的TF卡插到x3288開發板右側的TF卡槽,給開發板上電,無需按任何按鍵,八盞LED燈已經在來回閃爍了(注意我們的3288硬件上面沒有提供這樣的led,我們是通過軟件實現的)。
X3288裸機實例
X3288裸機實例1-LED流水燈實驗
X3288硬件不包含led,我們通過軟件實現的。我們直接進去下一個實驗。
原理圖
源碼
實驗現象
黃色的燈不停的閃爍。按下reconver按鈕,進入命令行模式,可以查看一下設備的打印信息等等。
X3288裸機實例2-蜂鳴器實驗
原理圖

上述電路通過一個NPN的三級管控制蜂鳴器的停止與蜂鳴。
GPIO狀態 |
蜂鳴器狀態 |
GPIO7_A3_D = 0 |
停止 |
GPIO7_A3_D = 1 |
蜂鳴 |
- 源碼
這裏的三個文件,其中buzzer.c的框架,我們的開發板上面使用的是buzzer-gpio.c驅動,沒有使用buzzer-pwm.c驅動。
下面來給大家講解這個驅動。注意這次3288開發板提供的裸機實驗代碼量巨大,接近20個實驗的代碼結構都是一致的,所以我們只講解一個驅動的原始碼,帶領大家怎麼分析,裏面具體算法怎麼實現的等等內容我們不會做詳細的探討。由於代碼量巨大,我們從大的結構先開始,第一條線:start.S ->main.c 這一個流程在上面已經給大家描述過了。
第二條線:這個是重點關於設備是如何創建的,也是裸機教程的重點,流程:
初始化全局變量,註冊machine設備,註冊各種核心組件,註冊各種驅動,探測具體machine以便加載同名的json設備樹,依據設備樹,創建設備。
第三條線:就是具體的調用過程。
這裏需要重點說明的是:第一種:驅動在arch/arm32/mach-x3288/driver裏面存在,第二種:在driver裏面存在,其中第二裏面的驅動是3288特有的驅動,也就是只支持3288這一個晶片的驅動,而第二種裏面的驅動是一些共用的驅動,不僅支持3288,也支持比如4418,6818等。而在本教程中裸機使用所用到的驅動在x3288.json中來看選擇的是哪一個。
比如我們要看蜂鳴器用的是哪一個驅動,首先看
http://x.9tripod.com/wiki/zh/index.php/File:Beep-soure1.png
看到這麼目錄下有3個文件,到底用的是哪一個呢?打開x3288.json,用搜索功能搜buzzer,
如圖
可以看到使用的是buzzer-gpio.c這個驅動,記住@後面是地址,現在不用去管他。打開buzzer-gpio.c文件,看到.name = buzzer_gpio就知道的確是調用的這個驅動。
可以明顯看出驅動的名字就是這個
因此全部的設備數都是由x3288.json來控制的。注意x3288.json中前814行都是關於時鐘的設備數,後面是關於各個驅動的設備數。
實驗現象
將TF卡插到x3288開發板的SD卡槽,上電開機,可以聽到每隔約500ms,蜂鳴器會鳴叫一次。
X3288裸機實例3-adc模數轉換實驗
原理圖

默認開發板上存在reset,recover,power鍵,在每一個實驗中,起的作用不同,讀者自己嘗試下應該就明白了。一般作用分別為重啟,切換到命令行模式,電源鍵等,個別會又不同。
源碼
由x3288.json來判斷知道這個是adc驅動的目錄,從這裏可以很清晰的看到adc是如何創建和調用的。
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,上電開機,可以看到顯示屏有如下現象:
發現adc採樣值和電壓一直在變化。
X3288裸機實例4-analog-clock模擬時鐘實驗
原理圖
略
源碼
時鐘驅動十分複雜,驅動涉及很多,這裏不做詳細描述,讀者可以自行研究,遇到問題可以發到論壇。
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,上電開機:
現象:從12點開始,時鐘的秒針開始轉動。
X3288裸機實例5-backlight背光測試實驗源碼原理圖
源碼
原理圖
實驗現象
將TF卡插到x3288開發板的TF卡槽,上電開機,
紅色條目上面的圓圈自動的左右滑動,可以看到螢幕亮度不斷變化。
X3288裸機實例6-color顏色測試實驗
源碼路徑:
略
實驗現象
將TF卡插到x3288開發板的TF卡槽,上電開機:
紅黃綠上面的圓圈在不斷的跳動,同時右邊的方形裏面的顏色在不停的變換。
X3288裸機實例7-irrmote紅外遙控測試實驗
源碼
原理圖
實驗現象
將TF卡插到x3288開發板的TF卡槽,上電開機
按任意按鍵,上面會出現不同的數字。
X3288裸機實例8-lcdscreen液晶屏測試實驗
源碼
略
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,
上電開機,顯示屏會出現如下信息:
點擊螢幕,顏色會不斷的變化,從紅、綠、藍、紅綠藍、白、黑這樣的順序出現。
X3288裸機實例9-morsecode摩斯電碼測試實驗
源碼
略
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,上電開機
點擊開始測試,會出現蜂鳴聲,有規律的響,這個就是在發送摩斯密碼。
X3288裸機實例10-rc5t620電源管理晶片實驗
源碼
原理圖
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,開機。
出現一系列的的參數比如:DC1:3.30000V 當初:2.00000V等。
X3288裸機實例11-reboot重啟測試實驗
源碼
略
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,上電開機
點擊重啟,畫面變暗,上半部分為黑色,,下半部分變為灰色。
X3288裸機實例12-rtc實時時鐘實驗
源碼
略
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,上電開機
顯示的時間或許會和下圖的時間不一樣,但是可以看到時間以秒為單位在不斷變化。
X3288裸機實例13-rtttl諾基亞鈴聲播放器實驗
源碼
略
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,上電開機
接喇叭請注意看下圖:
接上喇叭後,點擊開始測試,會有音樂自動開始播放。
X3288裸機實例14-syr82x同步降壓開關穩壓器實驗
源碼
略
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,上電開機
會出現如下的圖片,顯示了2個參數。
X3288裸機實例15-taichi太極八卦圖實驗
源碼
略
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,開機。
看到太極八卦圖在不同的旋轉。
X3288裸機實例16-touchscreen觸摸實驗
源碼
略
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,上電開機
看到色白色的畫面,直接在上面畫線,可以測試觸摸屏。
X3288裸機實例17-watchdog看門狗實驗
源碼
略
實驗現象
將TF卡插到x3288開發板的右側TF卡槽,上電開機
首先會響一聲,上面的時間會由10s開始倒數,等變成0秒就開始重啟,點擊餵狗可以刷新時間為10秒。