描述
內容簡介
|
作者簡介
孫傑
►世界500強資深嵌入式軟體工程師,專註於BSP與嵌入式系統架構,熱衷技術探索與工程實踐 ►深耕嵌入式領域十餘年,成功主導多個覆雜嵌入式項目,涵蓋系統架構設計、BSP開發與產品落地 ►Yocto項目技術專家,致力於推動該技術在中國的技術實踐與生態發展 ►愛爾蘭國立大學碩士,具備豐富的海外嵌入式開發經驗,熟悉國際主流開發體系 ►個人微信jerrydev提供技術支持,營運的「嵌入式Jerry」技術平臺(B站、CSDN和公眾號)深受粉絲喜愛 |
目錄
▌第1 章 Yocto 專案
1.1 嵌入式Linux 系統 1.1.1 什麼是嵌入式系統 1.1.2 嵌入式Linux 系統簡介 1.1.3 嵌入式Linux 系統的應用領域 1.1.4 嵌入式Linux 系統的建構工具 1.1.5 常見的嵌入式Linux 系統發行版本 1.2 什麼是Yocto 專案 1.2.1 Yocto 專案的起源 1.2.2 為什麼選擇Yocto 專案 1.2.3 社區與資源 1.3 Yocto 專案概覽 1.3.1 版本管理 1.3.2 開發與生產工具 1.3.3 常用術語 1.4 特性與挑戰 1.4.1 特性與優勢 1.4.2 面臨的挑戰 1.4.3 經驗總結
▌第2 章 Linux 系統架構 2.1 GNU/Linux 2.1.1 GNU/Linux 概述 2.1.2 Linux 系統架構概述 2.2 Bootloader 2.2.1 Bootloader 啟動流程 2.2.2 常用的Bootloader 2.2.3 U-Boot 簡介 2.2.4 GRUB 簡介 2.3 核心空間 2.3.1 Linux 核心 2.3.2 控制硬體資源 2.3.3 服務使用者空間 2.4 使用者空間 2.4.1 root 檔案系統 2.4.2 標準C 函式庫 2.4.3 系統共用函式庫 2.4.4 init 處理程序 2.4.5 視窗管理系統
▌第3 章 Yocto 專案基礎架構 3.1 快速建構指南 3.1.1 架設建構主機環境 3.1.2 下載Poky 原始程式碼 3.1.3 初始化OpenEmbedded 建構環境 3.1.4 建構鏡像 3.1.5 QEMU 啟動鏡像 3.2 Yocto 專案架構 3.2.1 層模型 3.2.2 核心組件 3.2.3 建構主機 3.3 OpenEmbedded 建構系統 3.3.1 BitBake 建構引擎 3.3.2 OpenEmbedded-Core 3.3.3 建構系統工作流 3.4 OpenEmbedded 建構環境 3.4.1 建構環境配置指令稿 3.4.2 建構目錄結構 3.4.3 建構輸出結構
▌第4 章 中繼資料架構 4.1 中繼資料 4.1.1 中繼資料的概念 4.1.2 中繼資料檔案 4.1.3 中繼資料語法 4.2 配方 4.2.1 配方及追加配方範例 4.2.2 配方命名與版本控制 4.2.3 配方語法 4.2.4 建立配方 4.2.5 配方工作流 4.3 層 4.3.1 層的概念 4.3.2 層的結構與功能 4.3.3 層的分類 4.3.4 bitbake-layers 層管理工具
▌第5 章 BitBake 建構引擎 5.1 BitBake 的起源與發展 5.2 BitBake 的原始程式碼 5.2.1 BitBake 原始程式碼的獲取 5.2.2 BitBake 原始程式碼結構及核心模組 5.3 BitBake 命令 5.3.1 BitBake 的命令語法 5.3.2 執行預設任務 5.3.3 執行指定任務 5.3.4 強制執行任務 5.4 BitBake 偵錯與最佳化 5.4.1 清除共用狀態快取 5.4.2 查看任務列表 5.4.3 查看變數值 5.4.4 查看相依關係 5.4.5 查看偵錯資訊 5.5 BitBake 執行流程 5.5.1 基礎配置解析 5.5.2 配方解析與管理 5.5.3 任務相依與排程 5.5.4 任務執行與日誌記錄
▌第6 章 Poky 參考發行版本 6.1 Poky 6.1.1 發行版本與特性 6.1.2 原始程式碼介面與核心檔案 6.2 鏡像配方 6.2.1 鏡像配方詳解 6.2.2 鏡像配方語法 6.2.3 鏡像類別 6.2.4 套件組配方 6.3 機器設定檔 6.3.1 Poky 中的機器設定檔 6.3.2 機器特性與實現 6.3.3 選擇目標裝置 6.4 發行版本設定檔 6.4.1 指定發行版本設定檔 6.4.2 Poky 中的發行版本設定檔 6.4.3 發行版本特性與實現 6.5 QEMU 6.5.1 QEMU 簡介 6.5.2 設置QEMU 的執行環境 6.5.3 runqemu 指令稿
▌第7 章 訂製鏡像配方與核心配方 7.1 訂製鏡像配方 7.1.1 架設建構環境 7.1.2 建立自訂層 7.1.3 訂製鏡像配方的步驟 7.1.4 QEMU 測試鏡像 7.2 訂製應用程式 7.2.1 HelloWorld 應用程式 7.2.2 Yocto 專案中的HelloWorld 程式 7.2.3 使用QEMU 測試HelloWorld 程式 7.3 訂製核心配方 7.3.1 Yocto 專案的核心倉庫 7.3.2 核心中繼資料 7.3.3 核心配方 7.3.4 核心配置 7.3.5 訂製核心配方的步驟 7.4 訂製核心樹外模組 7.4.1 樹外模組的基本原理 7.4.2 樹外模組的安裝與載入 7.4.3 訂製customer.ko 樹外模組
▌第8 章 樹莓派啟動訂製鏡像 8.1 樹莓派簡介 8.1.1 樹莓派4B 8.1.2 樹莓派與Yocto 專案 8.2 建構和部署樹莓派鏡像 8.2.1 建構樹莓派測試鏡像 8.2.2 將鏡像部署到SD 卡 8.2.3 啟動樹莓派4B 8.3 meta-raspberrypi 層 8.3.1 meta-raspberrypi 層概述 8.3.2 層配置 8.3.3 硬體規格 8.3.4 核心配置 8.3.5 圖形系統組態 8.3.6 硬體測試鏡像配方 8.4 使用Wic 工具建立分區鏡像 8.4.1 Wic 工具介紹 8.4.2 Kickstart 檔案 8.4.3 Wic 外掛程式 8.4.4 Wic 工具的操作模式 8.4.5 樹莓派的鏡像分區 8.4.6 dd 和bmaptool 部署鏡像
▌第9 章 實戰訂製樹莓派BSP 層 9.1 建立與配置BSP 層 9.1.1 訂製BSP 層的方法 9.1.2 建立meta-raspberrypi-custom 層 9.1.3 訂製機器設定檔 9.2 訂製核心配方 9.2.1 核心配置 9.2.2 指定核心裝置樹檔案 9.2.3 增加核心更新 9.3 訂製硬體啟動配置配方 9.3.1 指定核心裝置樹檔案 9.3.2 控制LED 硬體行為 9.4 訂製測試鏡像配方 9.4.1 建立基礎測試鏡像配方 9.4.2 增加SSH 服務 9.4.3 X11 圖形顯示協定 9.4.4 啟用Systemd 系統管理器 9.5 訂製分區鏡像 9.5.1 訂製Kickstart 檔案 9.5.2 重構並驗證鏡像 9.5.3 meta-raspberrypi-custom 層的最終結構
▌第10 章 軟體開發套件 10.1 軟體開發套件概述 10.1.1 SDK 簡介 10.1.2 獲取和使用SDK 安裝套件 10.1.3 SDK 萬用元件 10.2 可擴充SDK 10.2.1 可擴充SDK 結構 10.2.2 訂製可擴充SDK 安裝套件 10.2.3 devtool 命令列工具 10.3 標準SDK 建構應用程式 10.3.1 訂製應用程式 10.3.2 建構應用程式 10.3.3 部署與測試 10.4 可擴充SDK 建構與部署 10.4.1 建立配方 10.4.2 建構與部署 10.4.3 測試與整合
▌第11 章 進階專案實戰 11.1 架設專案開發環境 11.1.1 硬體開發環境 11.1.2 軟體開發環境 11.2 初始化建構環境 11.2.1 建構環境配置指令稿 11.2.2 初始化建構環境 11.3 中繼資料結構 11.3.1 中繼資料層結構 11.3.2 鏡像配方 11.3.3 核心 11.3.4 Bootloader 11.4 訂製層與鏡像 11.4.1 建立meta-imx-custom 層 11.4.2 建立追加配方檔案 11.4.3 整合Chromium 瀏覽器 11.4.4 增加Systemd 服務 11.5 建構鏡像與部署驗證 11.5.1 建構目標鏡像 11.5.2 架設部署環境 11.5.3 啟動硬體與驗證
▌附錄A Yocto 專案社區與支援通路 郵寄清單 IRC 頻道 Matrix 頻道 |
序
§ 前言 §
本書基於筆者的實踐經驗,系統化講解Yocto 專案的核心知識,結合豐富的實戰範例,幫助讀者高效掌握Yocto 專案的建構方法,並深入理解其應用與實踐技巧。 ▌嵌入式Linux 系統的現狀與挑戰 隨著科技的快速發展,嵌入式Linux 系統已廣泛應用於智慧家居、工業控制、智慧汽車等領域,並在AIoT、邊緣計算、智慧醫療等方向發揮著關鍵作用。其開放原始碼、靈活、可訂製的特性,使其成為嵌入式裝置的主流作業系統;市場需求持續增長,使其在智慧裝置中的核心地位不斷加強。 然而,嵌入式Linux 系統的開發面臨諸多挑戰。硬體生態碎片化導致調配和維護成本高昂,訂製化需求要求針對啟動速度、功耗、即時性、安全性進行深度最佳化,開發流程複雜,涉及核心裁剪、驅動調配、交叉編譯、軟體堆疊整合,且版本管理混亂,週期冗長。此外,軟硬體協作最佳化難度大,不同平臺資源受限,最佳化策略難以通用,進一步提高了開發門檻,使嵌入式Linux 系統在智慧裝置中的核心地位面臨更高的技術挑戰。 ▌應運而生的Yocto 專案 面對嵌入式Linux 系統開發中硬體調配複雜、訂製化需求高、建構流程煩瑣等挑戰,Yocto 項目提供了一套靈活、可擴充、自動化的建構工具集。它採用模組化架構、分層建構系統和軟體堆疊管理機制,使開發者能夠高效訂製、最佳化和維護嵌入式Linux 系統,可提高開發效率並降低調配成本。 Yocto 專案匯聚了全球開發者的智慧,依託活躍的開放原始碼社區,不斷最佳化和迭代,支持多架構、多平臺的嵌入式Linux 系統建構與訂製。它持續提升跨平臺調配能力、完善長期維護機制、增強系統穩定性和可重複使用性。隨著技術演進,Yocto 項目不斷拓展應用場景,為日益複雜的嵌入式Linux 系統需求提供更加高效、可靠的解決方案。 ▌本書的定位與特點 Yocto 專案已成為訂製嵌入式Linux 系統的主流工具,但由於建構系統複雜、配置靈活、偵錯難度大,其「難學好用」的特性讓許多開發者望而卻步。本書在官方文件的基礎上,結合筆者多年的嵌入式開發經驗,提煉核心理論框架,使其易讀易懂。同時輔以大量實踐案例,幫助讀者系統化學習Yocto 專案,快速掌握Yocto 項目的基礎知識與實戰技巧。 本書以實踐為導向,從基礎到進階、從理論到實戰,循序漸進,全面剖析Yocto 專案的架構與高階應用。無論是初學者、進階開發者,還是專注於底層技術研究的專家,本書都將成為系統學習Yocto 專案的整合式指南,助您自信應對嵌入式Linux 系統的訂製與建構挑戰。 ▌Yocto 專案現狀與機遇 當前,Yocto 項目已在全世界得到廣泛認可和應用,但在中文地區的普及程度相對較低。晶片調配度不足、技術資料主要以英文為主、本地社區生態不成熟,使開發者在學習和應用Yocto 專案時面臨較高門檻。此外,儘管AI 技術發展迅速,但AI 裝置的軟體環境仍主要依賴廠商的專有SDK 和BSP,不同平臺的軟體介面和調配機制存在差異,增加了系統維護和版本管理的複雜度。 隨著晶片生態的持續最佳化,Yocto 專案的當地語系化處理程序正在加速推進。同時,AI 技術在邊緣計算、智慧裝置等領域中的應用需求增長,對嵌入式Linux 系統的訂製、建構效率和長期維護提出了更高要求。Yocto 專案憑藉靈活的建構機制和廣泛的硬體支援,正成為晶片和AI 應用的重要支撐,將為嵌入式Linux 系統的開發和維護提供高效、穩定、可擴充的解決方案。 ▌總結與展望 本書旨在促進Yocto 專案的應用,幫助嵌入式開發者系統掌握其核心技術。透過系統化講解與實踐結合,降低學習門檻,使Yocto 專案在晶片研發及更多嵌入式應用中發揮更大價值。 受限於撰寫週期和筆者的個人水準,書中難免存在疏漏與不足。如您在閱讀過程中發現問題或有任何建議,歡迎交流探討。相信在大家的共同努力下,Yocto專案將在晶片生態、AIoT 和邊緣計算等領域得到更廣泛的應用,進一步推動嵌入式Linux 系統生態的標準化與發展。 孫傑 jerrysundev@163.com |