Linux-Kernel

為嵌入式 Linux 平台建構核心映像

  • February 9, 2020

我有興趣為基於 Ingenic SoC 的平台編譯 linux 映像。供應商含糊地提供了有關如何為目標 SoC 編譯 linux 核心的說明。因此,根據供應商說明和線上搜尋,需要以下內容才能獲得該平台的嵌入式 linux 映像。

  1. 編譯工具鏈(mipsel for mips based architecture)
  2. 使用工具鏈使用給定的驅動程序/BSP 編譯 linux 核心
  3. 編譯根文件系統 - Busybox 建議(不知道為什麼)
  4. 為目標 SoC 編譯 uBoot
  5. 使用目標特定的分區表對 sd 等儲存進行分區
  6. 將整個圖像刷入sd

所以問題是,為什麼根文件系統與核心映像是分開的?busybox 在生成文件系統中起什麼作用?另外,如果 linux 映像是在沒有根文件系統的情況下編譯的,如何將兩者合併以在根文件系統的 /sys 目錄中擁有驅動程序?

建構嵌入式 linux 是一個非常廣泛但非常神秘的話題,不確定它是否適合 EE.SE 或 Unix/Linux.SE 站點。

可以在這裡找到一些解決您問題的書籍:

Linux From Scratch (LFS)

http://www.linuxfromscratch.org/

“源自流行的 Linux-From-Scratch-HOWTO,本書描述了從已經安裝的 Linux 發行版從頭開始創建自己的 Linux 系統的過程,使用只不過是所需的軟體來源。”

本書是 Linux 文件項目的一部分:

https ://www.tldp.org/guides.html

從您之前的問題(在 EE.SE 上)我可以看出您正在自學嵌入式系統,因此建議閱讀。Scratch 的 Linux 假設您在 PC 上為同一台 PC 建構 Linux 發行版;這與交叉編譯以針對 PC 以外的不同系統的問題是分開的。

其他推薦閱讀(也在上面的 TLDP 指南連結上):

  • Bash 初學者指南
  • Linux 簡介 - 動手指南
  • GNU/Linux 命令行工具總結
  • 高級 Bash 腳本指南
  • Linux 系統管理員指南
  • Linux 核心模組程式指南(如果你開始編寫設備驅動程序)
  • 自定義 Linux:移植指南 - 將 LinuxPPC 移植到自定義 SBC

還可以查看嵌入式 Linux Wiki,https://elinux.org/Main_Page

您可能會考慮從更普遍支持的嵌入式目標系統開始,例如 Raspberry Pi 或 Beaglebone,其中有很多現有的支持。如果您首先在您的 PC 上建構一個相當新的發行版,然後建構相當新的發行版以在嵌入式目標系統上執行,那麼項目成功的機會就會大得多。這本質上是相同的問題,但是更多的人可以幫助解決有關建構 Raspian(Debian Stretch)的具體問題,很少有人會嘗試專門猜測 Ingeninc SoC。例如,請參閱 RaspberryPi.SE 上的這個問題:https ://raspberrypi.stackexchange.com/questions/3196/building-kernel-image-img-including-ramdisk

為什麼根文件系統與核心映像分開?

Linux就是這樣設計的。核心映像是在核心空間中執行的可執行程式碼(在啟動時,並具有特殊權限),根文件系統是它的數據。將兩者結合起來是沒有意義的,除非為特定目標系統建構引導媒體。

busybox 在生成文件系統中起什麼作用?

沒有任何。Busybox 將幾個最常用的 Unix 實用程序合併到 shell 執行檔中。

傳統的 Unix 偏愛許多小的、獨立的實用程序;相比之下,Busybox 方法將幾個最常用的實用程序捆綁為 shell 內置程序。Busybox 是包含在目標系統的根文件系統中的一個不錯的選擇,因為它在一個相當小且方便的包中提供了許多有用的實用程序。

“Linux from Scratch”指南遵循傳統的非 Busybox 方法。我建議首先完成該過程,而不必擔心是否為您的目標系統包含 Busybox。

如果 linux 映像是在沒有根文件系統的情況下編譯的,如何將兩者合併以在根文件系統的 /sys 目錄中擁有驅動程序?

設備驅動程序或者作為核心映像的一部分建構,或者它們是單獨的可載入核心模組,在引導過程中可選載入。

雖然術語“文件”通常表示儲存在非易失性儲存設備(如硬碟或 USB 記憶棒)上的比特流,但“文件”也可以表示具有名稱或某種其他類型的任何臨時數據位串處理。/proc、/sys 和 /dev 中有一些特殊的、動態生成的文件,它們由核心生成,並安裝在根文件系統的空 /proc /sys 和 /dev 佔位符之上。

引用自:https://unix.stackexchange.com/questions/566514