Ch0 緒論- Embedded System學習紀錄

張凱翔
Jan 25, 2021

--

寫這篇文章主要想要紀錄一下自己學習embedded system的過程;並參考精通嵌入式 Linux程式設計這本書當作學習的書籍。其實網路上現在也下載得到此書英文版的PDF檔,谷歌Mastering Embedded Linux Programming應該就能找到。

精通嵌入式Linux程式設計

這本書可以主要分為幾個章節,如下所述:

  1. embedded system (嵌入式系統)基本介紹以及本書會用到的軟硬體:主要是會向系統設計者介紹 project 初期可能面臨的選擇。
  2. toolchain(工具鏈):將會注重於 cross complier 的議題,介紹 toolchain 裡各項元件。還有如何去下載 toolchain,以及如何將 toolchain給 build 出來。
  3. bootloader(啟動載入器):將會說明 bootloader 在 embedded system 所扮演的角色,並以 U-boot 以及 BareBoot作為範例。還會介紹device tree (硬體結構樹),這是一種 embedded system 用來描述硬體配置的檔案結構。
  4. 如何去 configure kernel 以及 build kernel:如何去替 embedded system 選擇 kernel,並且根據設備上的硬體進行配置。還會說明如何將 Linux 移植到新的硬體去。
  5. 建立root file system(根目錄檔案系統):配置一個root file system,藉此說明 embedded linux system 開發中用戶空間背後的概念。
  6. Buildroot 以及 Yocto 組建系統的使用:兩款嵌入式 linux 組建系統,濃縮前面四個章節中的工作,使過程自動化。
  7. embedded system 儲存空間的方式:管理flash memory(快閃記憶體)會遇到的問題探討,這些快閃記憶體包括了快閃記憶體晶片、嵌入式 MMC 或被稱為 eMMC的硬體套件,並根據不同技術類型,介紹適合的檔案系統。還會探討如何在已上線的情況下更新韌體的方式。
  8. 如何去安裝 driver:用一個簡單的 driver 範例,說明 kernel driver 是如何與硬體去做溝通。還會介紹使用者如何用呼叫 driver 的各種方法。
  9. 如何去啟動 embedded system:介紹使用者空間的第一支執行程式,也負責啟動系統的其他元件的程式:init。當中將介紹 init 程式的三種版本,從 BusyBox 版本的 init 再到systemd,每種版本都有對應不同合適embedded system情境。
  10. process 以及 threads:將以應用程式開發者角度切入,以此觀點來說明embedded system。將會介紹 process 以及 thread 之間的溝通方式,以及關於排程上的策略。
  11. memory 管理:將會介紹虛擬記憶體的原理,以及如何將位址空間配置為記憶體的對映。探討如何確認記憶體的使用量,以及偵測記憶體洩漏的問題。
  12. 以 GDB 除錯:如何使用 GDB 這個 GNU 的除錯器,以互動的形式對用戶空間與 kernel 空間的程式進行除錯。還會介紹 kernel的除錯器 kdb。
  13. 剖析以及追蹤:將會探討可用來量測系統效能的技巧,從整個對系統全面性的剖析開始,然後逐步縮小範圍鎖定到真正造成效能低下的特定瓶頸的問題。在這邊還會介紹Valgrind,並使用這項工具確認應用程式內的 thread 同步機制以及記憶體配置是否有異常。
  14. RTOS(即時作業系統)的開發:將會對 linux 上的 RTOS 開發提供詳盡的指引,包括對 kernel 的配置,以及如何進行 RTOS 版本的 kernel 修補,並且介紹工具,以便量測 RTOS 下的延遲問題。還會探討如何鎖定記憶體對映狀態,以便降低 page fault(分頁錯誤)發生的次數。

這本書主要是以QEMU虛擬機以及BeagleBone Black開發版做範例:

BeagleBone Black

我也會依據這本書所做的範例,操作一次並且記錄在Medium中,希望可以幫助也想從頭學 embedded system 的人。

--

--

張凱翔
張凱翔

Written by 張凱翔

Promote my knowledge by writing the medium

No responses yet