之前學習了Linux的應用層開發,下面要開始linux的底層開發,當然最開始我們不是學習bootloader,也不是內核移植,而是開始ARM的裸機開發,那麼我們老說ARM,那ARM是什麼?目前比較火的,美國封鎖我們的華爲,ARM公司又和華爲有什麼關係?
一.ARM基礎概念
詳細的內容可以看一下我之前整理的博客:
https://blog.csdn.net/lzs940320/article/details/90021068
下面只對一些關鍵的知識進行一個複習總結。
二.環境搭建及啓動文件編寫及調試
作爲單片機開發的自然對寄存器,中斷等更好理解,但是就像我們平時debug調試時一樣,只知道用哪個功能,點點按鈕,到了Linux中就是使用GDB,其實道理都是一樣的。但是我們平時會注意到,但是又不太重視的.s啓動文件,還有反彙編文件,機器指令等,學了linux後這些確是在調試中的利器,能夠幫助我們更深入的瞭解芯片,更快速的定位到問題。
接下來我們進行開發環境搭建,然後debug下看一下他們之間是如何配合的。‘
雖然我們ARM的開發都是在linux下開發,但是其實都是一樣的,爲了更清晰的理解,我們使用常用的集成開發環境keil添加上工具鏈來對我們的一些啓動文件和裸機程序進行調試。
後期還是繼續使用linux下進行。
詳細安裝步驟可以看下“ARM彙編環境搭建”文檔。
1. 安裝交叉編譯工具鏈
我們用的交叉編譯工具鏈是arm-2011.09-70-arm-none-linux-gnueabi.exe
在該可執行文件上右鍵->屬性 -> 兼容性 選擇兼容window 7
確定後以管理員身份運行即可,可能需要很長時間。
2. 安裝keil(MDK)
直接運行ARM環境\ARM-tools\mdk454_mcu123\MDK454
安裝路徑選擇默認,一路next,會花費很長時間。
3. 創建一個project
3.1 新建一個文件夾(keil_proc/test),用於存放工程。
3.2 新建一個工程,Project -> New..., 然後選擇型號,arm9(小端)
3.3 在工程裏面添加或者new一個文件(start.s),在工程管理區的Source Group右鍵, 選擇add group .. 選擇自己
新建的文件,或者是其他文件添加到工程裏面.
3.4. 可以通過Target -> Manage components去修改工程和groups的名字,或者批量添加文件
4. 關聯arm-none-linux-gnueabi工具鏈
Project -> Manage-> Components ... -> Folders/Extensions
5. 導入鏈接腳本
Project -> Options for Target ... -> Linker
設置Linker Scipt file爲工程目錄下的map.lds(需要先將ARM環境\ARM-tools\裏面的map.lds放到新建的工程裏面即
keil_proc/test裏面)
6. 寫代碼
.text
.global _start
_start:
movr1, #0xff
stop:
b stop
.end
編譯和調試