看懂電路圖
看懂芯片手冊
有編寫,移植驅動的能力
懂內核的實現機制
懂C語言,C++, JAVA等
嵌入式 linux 學習路線
ARM
Bootloader
Linux內核
驅動程序
根文件系統
Android Framework
使用C/C++編寫的應用程序
Android APP
1. ARM
學習硬件知識的目的在于能看懂原理圖,看懂通信協議,看懂芯片手冊。這里推薦一些書:
《微機原理》,可以理解一個計算機的組成原理
《數字電路》,掌握一些邏輯運算,理解各種門電路的原理
《ARM體系結構與編程》,對ARM的運行原理解釋的很到位
我相信看完這些書對ARM和硬件知識的掌握足夠了,對于初學者只想淺嘗輒止的了解,我推薦之前的一個chat《一小時教你學會 ARM 架構》。
2. Bootloader
bootloader有很多種,vivi、u-boot等等,常用的是u-boot。 u-boot功能強大、源碼比較多,對于編程經驗不豐富、閱讀代碼經驗不豐富的人,一開始可能會覺得難以掌握。但是,u-boot的主要功能就是:啟動內核。它涉及:讀取內核到內存、設置啟動參數、啟動內核。按照這個主線,我們嘗試自己從零編寫一個bootloader,這個程序相對簡單,可以讓我們快速理解u-boot主要功能的實現。相關內容有:
u-boot分析之編譯體驗
u-boot分析之Makefile結構分析
u-boot分析之源碼第1階段
u-boot分析之源碼第2階段
u-boot分析之u-boot命令實現
u-boot分析_uboot啟動內核
3. Linux內核
內核在工作中的作用可以說是潛移默化的,雖然看起來沒有直接性的工作項目,但是走向架構師的必經之路。
Linux總線,設備,驅動模型的探究
Linux設備樹的深入理解
Linux的啟動流程
Linux設備和驅動的相遇
動手定制一個開發板
推薦《linux內核設計與實現》。
4. 驅動程序
驅動程序=Linux驅動程序軟件框架+ARM開發板硬件操作
有了ARM的知識和閱讀數據手冊電路圖的能力,再加上Linux內核的運行原理,基本上寫驅動就是API調用的體力活了。這里推薦宋寶華老師的《linux設備驅動開發詳解》。后續關于驅動的內容暫定如下:
LCD驅動程序
觸摸屏驅動程序
USB驅動程序
NAND FLASH驅動程序
NOR FLASH驅動程序
網卡驅動程序
聲卡驅動程序
5. 根文件系統
在開發應用程序時,也需要搭建文件系統,把各種庫、配置文件放進去; 在發布產品時,你還需要修改配置文件,使得產品可以自動運行程序; 甚至你想實現插上U盤后自動啟動某個程序,這也要要修改配置文件; 這一切,都需要你理解根文件系統的構成,理解內核啟動后是根據什么配置文件來啟動哪些應用程序。根文件系統相對比較簡單,可以根據以下路線學習:
Linux根文件系統目錄結構
移植Busybox
init進程介紹及用戶程序啟動過程
使用glibc庫
制作/使用文件系統映象文件
嵌入式應用開發
C語言編程基礎
嵌入式開發基礎(Linux、Shell命令、VI編輯器、GCC、Makefile、交叉開發環境構建)
嵌入式Linux系統編程(shell編程、文件編程、串口編程、進程編程、線程編程、網絡編程)
嵌入式底層系統開發
ARM體系結構(Arm體系|指令、Thumb指令、匯編程序設計、裸機程序開發)
Linux內核移植(bootloader、內核配置、文件系統)
驅動程序開發(驅動模型架構、字符設備驅動、塊設備驅動、網絡驅動)
嵌入式圖形應用開發
C++語言編程基礎
QT編程開發(Qt開發基礎|布局與控件|繪圖|事件|網絡通訊|數據庫|移植)