目錄
一. 嵌入式體系結構
二. 開發過程中的分工
三. 嵌入式軟件體系結構
四. 嵌入式Linux
一. 嵌入式體系結構
<嵌入式系統設計師教程>這本書的前三章脈絡很清晰, 按照嵌入式系統結構從下往上, 從底層的硬件, 電路, 到上層的系統, 應用, 逐層展開介紹. 書的后三章是在掌握好前面的基礎后, 對於應用開發, 軟件工程等宏觀上的指導. 我根據前三章的結構畫出了圖1.1的嵌入式系統結構圖, 系統分層結構一目了然. 第三層多出來的Linux和四大塊, 后面再介紹.
圖1.1
二. 開發過程中的分工
部門里每個產品的基本開發都需要硬件組, DSP&BSP組, 應用開發組的協作完成.
基礎知識這塊距離嵌入式開發越來越遙遠了, 各大IC廠商為嵌入式產品開發商提供了完善的芯片和手冊, 批量購買就行了哈哈.
硬件組的工作屬於第二層, 第二層里還有我沒有標識出的電源技術, "畫板子"技術. 涉及到硬件, 比如喇叭, 麥克風, 電源, 芯片選型, 系統總線接口設計, 網口, 藍牙, 畫PCB, 制作PCB...自然也涉及到成本, 硬件研發周期等問題.
DSP&BSP組的工作屬於第三層, 在不同平台, 也就是不同處理器架構的板子上移植BootLoader->操作系統->設備驅動->文件管理系統, 協助硬件調通板子上電能跑, 再交給應用層做開發.
應用開發組就是"站在巨人的肩膀上"敲代碼了. 向下要了解操作系統基本知識, 向上要把握客戶的迫切需求, 還要夜以繼日的提高開發技能. 也希望這一層是"入門不易, 前途無量"吧.
三. 嵌入式軟件體系結構
軟件體系結構在<嵌入式系統設計師教程> 里有圖示, 即圖3.1. 我覺着部門里BSP&DSP組的人是在跨層工作, 因為紅框里的這些移植都是由他們實現的.
圖3.1
3.1 設備驅動層
設備驅動層又叫板級支持包, 即Board Support Package, BSP. 包含了嵌入式系統中所有與硬件有關的代碼. BSP的基本思想是把嵌入式操作系統與具體的硬件平台隔離開來, 並向上層提供一個虛擬的硬件平台, 操作系統就運行在這組虛擬平台上. OS使用一組定義好的編程接口與BSP交互, 通過BSP訪問真正的硬件. BSP主要實現以下兩種功能:
1. 引導BootLoader
BootLoader是嵌入式系統上電后運行的第一段軟件代碼. 在一個基於ARM*內核的嵌入式系統中, 系統上電或復位一般都是從地址x00000000開始執行, 這個地址通常放置的就是BootLoader.
- 片級初始化, 包括微處理器核心寄存器和控制寄存器, 微處理器核心工作模式, 局部總線模式;
- 板級初始化, 正確設置各種寄存器內容如初始化定時器, 設置中斷控制寄存器, 初始化串口通信, 建立內存空間的地址映射;
- 加載內核, 將操作系統和應用程序從Flash存儲器復制到系統內存中, 跳轉到系統內核的第一條指令處.
2. 引導設備驅動
設備驅動就是一組庫函數, 對硬件進行初始化和管理, 向上層提供訪問接口. 設備驅動的基本功能:
- 硬件啟動: 在開機上電或系統重啟時, 對硬件初始化
- 硬件關閉: 將硬件設置為關機
- 讀: 從硬件中讀取數據
- 寫: 往硬件中寫入數據
3.2. 嵌入式中間件
在操作系統內核, 設備驅動程序, 應用軟件之外的所有系統軟件. 如Sun公司的嵌入式Java, Google的Android.
3.3. BootLoader之uBoot
系統上電后, 需要一段小程序來初始化, 包括: 關閉看門狗, 改變系統時鍾, 初始化存儲控制器, 將更多的代碼復制到內存中等等. 如果它能將操作系統內核從Flash/遠端網絡傳輸復制到內存, 就稱這段小程序為BootLoader.
比如BSP組提供的Bootloader, 在以上基本功能之外, 還提供給廣大應用開發人員增強的BootLoader功能, 包括通過串口, ftp傳輸, 下載, 燒錄文件, 將Flash上的壓縮文件解壓后再運行等等. 增強版的功能用戶並不需要, 它們都是為了方便廣大應用開發人員, 感動crying.
3.4 BootLoader的兩種工作模式
1. 啟動加載模式
上電后, BootLoader從板子的固態存儲設備上將OS加載到RAM, 整個過程無用戶介入, 產品發布時采用此模式.
2. 下載模式
開發人員可以使用各種命令, 通過串口或網絡連接等通信手段從主機下載文件, 比如內核映像, 文件系統映像等, 將它們放入內存運行或燒入Flash類固態存儲設備中.
從主機傳輸文件, 可以采用串口xmodem/ymodem/zmodem協議, 簡單而且慢; 還可以使用網絡通過ftp, nfs傳輸, 主機需要開啟ftp, nfs服務.
U-Boot是功能強大的BootLoader, 通常支持兩種工作模式, 而且允許用戶在兩種模式間切換. 比如, U-Boot啟動時處於正常的啟動加載模式, 但會延時若干秒, 等待終端用戶按下某鍵而將U-Boot切換到下載模式. ITE啟動時就是這樣, 開啟后立刻回車, 就會進入下載模式, 在這個模式下可以進行參數配置和ftp系統升級.
四. 嵌入式Linux
作為軟件體系結構的主流結構, 嵌入式Linux體系應用廣泛, 日后我也是靠它吃飯了. 關於嵌入式Linux最常聽到的四大塊就是: BootLoader, 內核, 驅動, 根文件系統. 其實也就是Linux內核+"嵌入式周邊"=嵌入式Linux的關系. 四大塊物理位置處於第二層中的不同存儲體系中:
- 內存: BootLoader
- (ROM)Flash: Linux內核
- 外存: 驅動程序
參考
[3] <嵌入式系統設計師教程> 清華大學出版社