[ 收藏 ] [ 简体中文 ]  
臺灣貨到付款、ATM、超商、信用卡PAYPAL付款,4-7個工作日送達,999元臺幣免運費   在線留言 商品價格為新臺幣 
首頁 電影 連續劇 音樂 圖書 女裝 男裝 童裝 內衣 百貨家居 包包 女鞋 男鞋 童鞋 計算機周邊

商品搜索

 类 别:
 关键字:
    

商品分类

  •  管理

     一般管理学
     市场/营销
     会计
     金融/投资
     经管音像
     电子商务
     创业企业与企业家
     生产与运作管理
     商务沟通
     战略管理
     商业史传
     MBA
     管理信息系统
     工具书
     外文原版/影印版
     管理类职称考试
     WTO
     英文原版书-管理
  •  投资理财

     证券/股票
     投资指南
     理财技巧
     女性理财
     期货
     基金
     黄金投资
     外汇
     彩票
     保险
     购房置业
     纳税
     英文原版书-投资理财
  •  经济

     经济学理论
     经济通俗读物
     中国经济
     国际经济
     各部门经济
     经济史
     财政税收
     区域经济
     统计 审计
     贸易政策
     保险
     经济数学
     各流派经济学说
     经济法
     工具书
     通货膨胀
     财税外贸保险类考试
     英文原版书-经济
  •  社会科学

     语言文字
     社会学
     文化人类学/人口学
     新闻传播出版
     社会科学总论
     图书馆学/档案学
     经典名家作品集
     教育
     英文原版书-社会科学
  •  哲学

     哲学知识读物
     中国古代哲学
     世界哲学
     哲学与人生
     周易
     哲学理论
     伦理学
     哲学史
     美学
     中国近现代哲学
     逻辑学
     儒家
     道家
     思维科学
     马克思主义哲学
     经典作品及研究
     科学哲学
     教育哲学
     语言哲学
     比较哲学
  •  宗教

  •  心理学

  •  古籍

     经部  史类  子部  集部  古籍管理  古籍工具书  四库全书  古籍善本影音本  中国藏书
  •  文化

     文化评述  文化随笔  文化理论  传统文化  世界各国文化  文化史  地域文化  神秘文化  文化研究  民俗文化  文化产业  民族文化  书的起源/书店  非物质文化遗产  文化事业  文化交流  比较文化学
  •  历史

     历史普及读物
     中国史
     世界史
     文物考古
     史家名著
     历史地理
     史料典籍
     历史随笔
     逸闻野史
     地方史志
     史学理论
     民族史
     专业史
     英文原版书-历史
     口述史
  •  传记

  •  文学

  •  艺术

     摄影
     绘画
     小人书/连环画
     书法/篆刻
     艺术设计
     影视/媒体艺术
     音乐
     艺术理论
     收藏/鉴赏
     建筑艺术
     工艺美术
     世界各国艺术概况
     民间艺术
     雕塑
     戏剧艺术/舞台艺术
     艺术舞蹈
     艺术类考试
     人体艺术
     英文原版书-艺术
  •  青春文学

  •  文学

     中国现当代随笔
     文集
     中国古诗词
     外国随笔
     文学理论
     纪实文学
     文学评论与鉴赏
     中国现当代诗歌
     外国诗歌
     名家作品
     民间文学
     戏剧
     中国古代随笔
     文学类考试
     英文原版书-文学
  •  法律

     小说
     世界名著
     作品集
     中国古典小说
     四大名著
     中国当代小说
     外国小说
     科幻小说
     侦探/悬疑/推理
     情感
     魔幻小说
     社会
     武侠
     惊悚/恐怖
     历史
     影视小说
     官场小说
     职场小说
     中国近现代小说
     财经
     军事
  •  童书

  •  成功/励志

  •  政治

  •  军事

  •  科普读物

  •  计算机/网络

     程序设计
     移动开发
     人工智能
     办公软件
     数据库
     操作系统/系统开发
     网络与数据通信
     CAD CAM CAE
     计算机理论
     行业软件及应用
     项目管理 IT人文
     计算机考试认证
     图形处理 图形图像多媒体
     信息安全
     硬件
     项目管理IT人文
     网络与数据通信
     软件工程
     家庭与办公室用书
  •  建筑

     执业资格考试用书  室内设计/装潢装修  标准/规范  建筑科学  建筑外观设计  建筑施工与监理  城乡规划/市政工程  园林景观/环境艺术  工程经济与管理  建筑史与建筑文化  建筑教材/教辅  英文原版书-建筑
  •  医学

     中医
     内科学
     其他临床医学
     外科学
     药学
     医技学
     妇产科学
     临床医学理论
     护理学
     基础医学
     预防医学/卫生学
     儿科学
     医学/药学考试
     医院管理
     其他医学读物
     医学工具书
  •  自然科学

     数学
     生物科学
     物理学
     天文学
     地球科学
     力学
     科技史
     化学
     总论
     自然科学类考试
     英文原版书-自然科学
  •  工业技术

     环境科学
     电子通信
     机械/仪表工业
     汽车与交通运输
     电工技术
     轻工业/手工业
     化学工业
     能源与动力工程
     航空/航天
     水利工程
     金属学与金属工艺
     一般工业技术
     原子能技术
     安全科学
     冶金工业
     矿业工程
     工具书/标准
     石油/天然气工业
     原版书
     武器工业
     英文原版书-工业技
  •  农业/林业

     园艺  植物保护  畜牧/狩猎/蚕/蜂  林业  动物医学  农作物  农学(农艺学)  水产/渔业  农业工程  农业基础科学  农林音像
  •  外语

  •  考试

  •  教材

  •  工具书

  •  中小学用书

  •  中小学教科书

  •  动漫/幽默

  •  烹饪/美食

  •  时尚/美妆

  •  旅游/地图

  •  家庭/家居

  •  亲子/家教

  •  两性关系

  •  育儿/早教

  •  保健/养生

  •  体育/运动

  •  手工/DIY

  •  休闲/爱好

  •  英文原版书

  •  港台图书

  •  研究生
     工学
     公共课
     经济管理
     理学
     农学
     文法类
     医学

  •  音乐
     音乐理论

     声乐  通俗音乐  音乐欣赏  钢琴  二胡  小提琴
  • 精通嵌入式Linux編程
    該商品所屬分類:計算機/網絡 -> 操作繫統/繫統開發
    【市場價】
    788-1142
    【優惠價】
    493-714
    【作者】 美弗蘭克·瓦斯奎茲 
    【所屬類別】 圖書  計算機/網絡  操作繫統/繫統開發  LINUX 
    【出版社】清華大學出版社 
    【ISBN】9787302635635
    【折扣說明】一次購物滿999元台幣免運費+贈品
    一次購物滿2000元台幣95折+免運費+贈品
    一次購物滿3000元台幣92折+免運費+贈品
    一次購物滿4000元台幣88折+免運費+贈品
    【本期贈品】①優質無紡布環保袋,做工棒!②品牌簽字筆 ③品牌手帕紙巾
    版本正版全新電子版PDF檔
    您已选择: 正版全新
    溫馨提示:如果有多種選項,請先選擇再點擊加入購物車。
    *. 電子圖書價格是0.69折,例如了得網價格是100元,電子書pdf的價格則是69元。
    *. 購買電子書不支持貨到付款,購買時選擇atm或者超商、PayPal付款。付款後1-24小時內通過郵件傳輸給您。
    *. 如果收到的電子書不滿意,可以聯絡我們退款。謝謝。
    內容介紹



    開本:16開
    紙張:膠版紙
    包裝:平裝-膠訂

    是否套裝:否
    國際標準書號ISBN:9787302635635
    作者:[美]弗蘭克·瓦斯奎茲

    出版社:清華大學出版社
    出版時間:2023年06月 

        
        
    "

    產品特色

    編輯推薦

    多年來,Linux一直是嵌入式計算的中流砥柱。然而,涵蓋該領域所有主題的書籍非常少,本書旨在填補這一空白。“嵌入式Linux”一詞的定義並不明確,它可以應用於從恆溫器到Wi-Fi路由器,再到工業的各種設備內的操作繫統。但是,它們都建立在相同的基本開源軟件之上。這些正是我們在本書中要描述的技術,本書的寫作基於我們作為工程師的經驗和為培訓課程開發的資料。

     
    內容簡介

    《精通嵌入式Linux編程》詳細闡述了與嵌入式Linux開發相關的基本解決方案,主要包括初識嵌入式Linux開發、關於工具鏈、引導加載程序詳解、配置和構建內核、構建根文件繫統、選擇構建繫統、使用Yocto進行開發、Yocto技術內幕、創建存儲策略、現場更新軟件、連接設備驅動程序、使用分線板進行原型設計、init程序、使用BusyBox runit啟動、管理電源、打包Python程序、了解進程和線程、管理內存、使用GDB進行調試、性能分析和跟蹤、實時編程等內容。此外,本書還提供了相應的示例、代碼,以幫助讀者進一步理解相關方案的實現過程。 本書適合作為高等院校計算機及相關專業的教材和教學參考書,也可作為相關開發人員的自學用書和參考手冊。

    作者簡介

    弗蘭克·瓦斯奎茲是一位專注於消費電子產品的獨立軟件顧問。他在設計和構建嵌入式Linux繫統方面擁有十多年的經驗。在此期間,他完成了許多設備的開發,包括機架式DSP音頻服務器、潛水員手持式聲納攝像機和消費者物聯網熱點。在成為嵌入式Linux開發工程師之前,Frank曾經是IBM的數據庫內核開發人員,他在該公司主要從事DB2方面的工作。他目前住在硅谷。

    目錄
    第1篇 嵌入式Linux的要素
    第1章 初識嵌入式Linux開發 3
    1.1 選擇Linux的原因 4
    1.2 不選擇Linux的原因 5
    1.3 找到合適的玩家 5
    1.4 穿越項目生命周期 7
    1.4.1 篇章內容概述 7
    1.4.2 嵌入式Linux的4個基本要素 7
    1.5 開源的意義 8
    1.5.1 開源和免費有區別 8
    1.5.2 開源許可機制 8
    1.6 為嵌入式Linux開發選擇硬件 10
    1.7 獲取本書所需硬件 11
    1.7.1 Raspberry Pi 4 11

    第1篇  嵌入式Linux的要素
    第1章  初識嵌入式Linux開發 3
    1.1  選擇Linux的原因 4
    1.2  不選擇Linux的原因 5
    1.3  找到合適的玩家 5
    1.4  穿越項目生命周期 7
    1.4.1  篇章內容概述 7
    1.4.2  嵌入式Linux的4個基本要素 7
    1.5  開源的意義 8
    1.5.1  開源和免費有區別 8
    1.5.2  開源許可機制 8
    1.6  為嵌入式Linux開發選擇硬件 10
    1.7  獲取本書所需硬件 11
    1.7.1  Raspberry Pi 4 11
    1.7.2  BeagleBone Black 12
    1.7.3  QEMU 13
    1.8  配置開發環境 15
    1.9  小結 15
    第2章  關於工具鏈 17
    2.1  技術要求 17
    2.2  工具鏈簡介 18
    2.2.1  工具鏈的類型 20
    2.2.2  CPU架構 21
    2.2.3  選擇C庫 22
    2.3  尋找工具鏈 24
    2.4  使用crosstool-NG構建工具鏈 26
    2.4.1  安裝crosstool-NG 26
    2.4.2  為BeagleBone Black構建工具鏈 27
    2.4.3  為QEMU構建工具鏈 28
    2.5  工具鏈剖析 29
    2.5.1  了解你的交叉編譯器 30
    2.5.2  sysroot、庫和頭文件 31
    2.5.3  工具鏈中的其他工具 32
    2.5.4  查看C庫的組件 33
    2.6  與庫鏈接—靜態和動態鏈接 34
    2.6.1  靜態庫 34
    2.6.2  共享庫 35
    2.6.3  了解共享庫版本號 36
    2.7  交叉編譯的技巧 37
    2.7.1  相對簡單的makefile 38
    2.7.2  Autotools 38
    2.7.3  編譯示例—SQLite 40
    2.7.4  包配置 42
    2.7.5  交叉編譯帶來的問題 43
    2.7.6  CMake 44
    2.8  小結 46
    2.9  延伸閱讀 46
    第3章  引導加載程序詳解 47
    3.1  技術要求 47
    3.2  引導加載程序的作用 48
    3.3  引導順序 48
    3.3.1  階段1—ROM代碼 49
    3.3.2  階段2—SPL 51
    3.3.3  階段3—TPL 52
    3.4  從引導加載程序轉移到內核中 53
    3.5  設備樹簡介 54
    3.5.1  有關設備樹的基礎知識 54
    3.5.2  reg屬性 55
    3.5.3  標簽和中斷 56
    3.5.4  設備樹包含文件 57
    3.5.5  編譯設備樹 59
    3.6  U-Boot 60
    3.6.1  構建U-Boot 60
    3.6.2  安裝U-Boot 62
    3.6.3  使用U-Boot 64
    3.6.4  環境變量 65
    3.6.5  引導鏡像格式 65
    3.6.6  加載鏡像 67
    3.6.7  引導Linux 69
    3.6.8  使用U-Boot腳本自動化引導過程 69
    3.6.9  將U-Boot移植到新板上 69
    3.6.10  與特定開發板相關的文件 71
    3.6.11  配置頭文件 73
    3.6.12  構建和測試 74
    3.6.13  Falcon模式 75
    3.7  小結 76
    第4章  配置和構建內核 77
    4.1  技術要求 77
    4.2  內核的作用 78
    4.3  選擇內核 80
    4.3.1  內核開發周期 80
    4.3.2  穩定和長期支持版本 81
    4.3.3  供應商支持 82
    4.3.4  許可機制 82
    4.4  構建內核 83
    4.4.1  獲取源 83
    4.4.2  了解內核配置—Kconfig 84
    4.4.3  使用LOCALVERSION識別內核 88
    4.4.4  使用內核模塊的時機 89
    4.5  編譯—Kbuild 90
    4.5.1  找出要構建的內核目標 90
    4.5.2  構建工件 91
    4.5.3  編譯設備樹 93
    4.5.4  編譯模塊 93
    4.5.5  清理內核源 94
    4.5.6  為Raspberry Pi 4構建64位內核 94
    4.5.7  為BeagleBone Black構建內核 96
    4.5.8  為QEMU構建內核 97
    4.6  引導內核 97
    4.6.1  引導Raspberry Pi 4 97
    4.6.2  引導BeagleBone Black 98
    4.6.3  引導QEMU 99
    4.6.4  內核恐慌 100
    4.6.5  早期用戶空間 100
    4.6.6  內核消息 101
    4.6.7  內核命令行 101
    4.7  將Linux移植到新板上 102
    4.7.1  新的設備樹 103
    4.7.2  設置開發板的兼容屬性 104
    4.8  小結 106
    4.9  延伸閱讀 107
    第5章  構建根文件繫統 109
    5.1  技術要求 110
    5.2  根文件繫統中應該包含的東西 110
    5.3  目錄布局 111
    5.3.1  暫存目錄 112
    5.3.2  POSIX文件訪問權限 113
    5.3.3  暫存目錄中的文件所有權權限 115
    5.4  根文件繫統的程序 115
    5.4.1  init程序 115
    5.4.2  shell 115
    5.4.3  實用程序 116
    5.4.4  關於BusyBox 116
    5.4.5  構建BusyBox 117
    5.4.6  ToyBox—BusyBox的替代品 118
    5.5  根文件繫統的庫 119
    5.5.1  選擇需要的庫 119
    5.5.2  通過剝離減小尺寸 120
    5.6  設備節點 121
    5.7  proc和sysfs文件繫統 122
    5.7.1  proc和sysfs文件繫統的功能 123
    5.7.2  掛載文件繫統 123
    5.7.3  內核模塊 124
    5.8  將根文件繫統傳輸到目標 124
    5.9  創建引導initramfs 125
    5.9.1  獨立的initramfs 126
    5.9.2  引導initramfs 126
    5.9.3  使用QEMU引導 126
    5.9.4  引導BeagleBone Black 127
    5.9.5  掛載proc 127
    5.9.6  將initramfs構建到內核鏡像中 128
    5.9.7  使用設備表構建initramfs 129
    5.9.8  舊的initrd格式 130
    5.10  init程序 130
    5.10.1  BusyBox的init程序 131
    5.10.2  啟動守護進程 132
    5.11  配置用戶賬戶 132
    5.11.1  配置賬戶 132
    5.11.2  將用戶賬戶添加到根文件繫統中 134
    5.12  管理設備節點的更好方法 134
    5.12.1  使用devtmpfs的示例 135
    5.12.2  使用mdev的示例 135
    5.12.3  靜態設備節點的優劣 136
    5.13  配置網絡 136
    5.13.1  BusyBox中的網絡配置 136
    5.13.2  glibc的網絡組件 137
    5.14  使用設備表創建文件繫統鏡像 138
    5.14.1  安裝和使用genext2fs工具 138
    5.14.2  引導BeagleBone Black 139
    5.15  使用NFS掛載根文件繫統 140
    5.15.1  使用QEMU進行測試 141
    5.15.2  使用BeagleBone Black進行測試 142
    5.15.3  文件權限問題 142
    5.16  使用TFTP加載內核 143
    5.17  小結 144
    5.18  延伸閱讀 144
    第6章  選擇構建繫統 145
    6.1  技術要求 145
    6.2  比較構建繫統 146
    6.3  分發二進制文件 148
    6.4  Buildroot簡介 148
    6.4.1  Buildroot的背景知識 149
    6.4.2  穩定版本和長期支持版本 149
    6.4.3  安裝Buildroot 149
    6.4.4  配置Buildroot 150
    6.4.5  運行 151
    6.4.6  以真實硬件為目標 153
    6.4.7  創建自定義BSP 154
    6.4.8  U-Boot配置 154
    6.4.9  Linux配置 155
    6.4.10  構建繫統鏡像 157
    6.4.11  添加自己的代碼 159
    6.4.12  覆蓋層 160
    6.4.13  添加包 160
    6.4.14  許可合規性 162
    6.5  Yocto Project簡介 162
    6.5.1  Yocto Project的背景知識 163
    6.5.2  穩定版本和支持 164
    6.5.3  安裝Yocto Project 165
    6.5.4  配置 165
    6.5.5  構建 166
    6.5.6  運行QEMU目標 167
    6.5.7 &nb層 167
    6.5.8  BitBake和配方 170
    6.5.9  通過local.conf自定義鏡像 172
    6.5.10  編寫鏡像配方 173
    6.5.11  創建SDK 174
    6.5.12  許可證審核 176
    6.6  小結 176
    6.7  延伸閱讀 177
    第7章  使用Yocto進行開發 179
    7.1  技術要求 179
    7.2  在現有BSP之上構建鏡像 180
    7.2.1  構建現有的BSP 180
    7.2.2  控制Wi-Fi 186
    7.2.3  控制藍牙 189
    7.2.4  添加自定義層 192
    7.3  使用devtool捕獲更改 195
    7.3.1  開發工作流程 195
    7.3.2  創建新配方 197
    7.3.3  修改由配方構建的源 198
    7.3.4  將配方升級到較新版本 200
    7.4  構建自己的發行版 203
    7.4.1  推出發行版的合適時機 203
    7.4.2  創建一個新的發行層 203
    7.4.3  配置發行版 204
    7.4.4  向發行版添加更多配方 205
    7.4.5  運行時包管理 205
    7.5  配置遠程包服務器 207
    7.5.1  配置包服務器 207
    7.5.2  配置目標客戶端 208
    7.6  小結 209
    7.7  延伸閱讀 209
    第8章  Yocto技術內幕 211
    8.1  技術要求 211
    8.2  Yocto架構和工作流程分解 212
    8.2.1 &nb數據 214
    8.2.2  構建任務 215
    8.2.3  鏡像生成 217
    8.3 &nbs數據分層 218
    8.4  構建失敗故障排除 220
    8.4.1  隔離錯誤 220
    8.4.2  檢查和轉儲環境值 221
    8.4.3  讀取任務日志 222
    8.4.4  添加更多日志記錄 222
    8.4.5  從devshell中運行命令 223
    8.4.6  查看包的依賴關繫 224
    8.5  了解BitBake語法和語義 225
    8.5.1  任務 225
    8.5.2  依賴項 226
    8.5.3  任務間依賴項 226
    8.5.4  構建時依賴項 226
    8.5.5  運行時依賴項 227
    8.5.6  變量 228
    8.5.7  賦值和擴展 228
    8.5.8  附加和前置 229
    8.5.9  覆蓋 229
    8.5.10  內聯Python 230
    8.5.11  函數 231
    8.5.12  shell 231
    8.5.13  Python 231
    8.5.14  純Python函數 232
    8.5.15  BitBake風格的Python函數 232
    8.5.16  匿名Python函數 233
    8.5.17  RDEPENDS 234
    8.6  小結 235
    8.7  延伸閱讀 235
    第2篇  繫統架構和設計決策
    第9章  創建存儲策略 239
    9.1  技術要求 239
    9.2  存儲選項 240
    9.2.1  NOR閃存 241
    9.2.2  NAND閃存 241
    9.2.3  托管閃存 243
    9.2.4  多媒體卡和安全數字卡 244
    9.2.5  eMMC 245
    9.2.6  其他類型的托管閃存 245
    9.3  從引導加載程序中訪問閃存 245
    9.3.1  U-Boot和NOR閃存 246
    9.3.2  U-Boot和NAND閃存 246
    9.3.3  U-Boot和MMC、SD和eMMC 246
    9.4  從Linux中訪問閃存 247
    9.4.1  內存技術設備子繫統 247
    9.4.2  MTD分區 248
    9.4.3  MTD設備驅動程序 251
    9.4.4  MTD字符設備 251
    9.4.5  MTD塊設備mtdblock 252
    9.4.6  將內核錯誤記錄到MTD上 253
    9.4.7  模擬NAND存儲器 253
    9.4.8  MMC塊驅動程序 253
    9.5  閃存文件繫統 254
    9.5.1  閃存轉換層的特點 254
    9.5.2  閃存轉換層的部署方式 255
    9.6  NOR和NAND閃存的文件繫統 255
    9.6.1  JFFS2 256
    9.6.2  摘要節點 257
    9.6.3  干淨標記 257
    9.6.4  創建JFFS2文件繫統 257
    9.6.5  YAFFS2 258
    9.6.6  創建YAFFS2文件繫統 259
    9.6.7  UBI和UBIFS 260
    9.6.8  UBI 260
    9.6.9  UBIFS 263
    9.7  托管閃存的文件繫統 264
    9.7.1  Flashbench 265
    9.7.2  丟棄和修剪 266
    9.7.3  Ext4 267
    9.7.4  F2FS 268
    9.7.5  FAT16/32 268
    9.8  隻讀壓縮文件繫統 269
    9.8.1  SquashFS 269
    9.8.2  在NAND閃存上使用SquashFS 269
    9.9  臨時文件繫統 270
    9.10  將根文件繫統設為隻讀 271
    9.11  文件繫統選擇 272
    9.12  小結 273
    9.13  延伸閱讀 273
    第10章  現場更新軟件 275
    10.1  技術要求 275
    10.2  啟動更新的方法 276
    10.3  更新的內容 276
    10.3.1  引導加載程序 277
    10.3.2  內核 277
    10.3.3  根文件繫統 278
    10.3.4  繫統應用程序 278
    10.3.5  與特定設備相關的數據 278
    10.3.6  需要更新的組件 279
    10.4  有關軟件更新的基礎知識 279
    10.4.1  使更新穩定可靠 279
    10.4.2  使更新不受故障影響 280
    10.4.3  確保更新安全 282
    10.5  更新機制的類型 283
    10.5.1  對稱鏡像更新 283
    10.5.2  非對稱鏡像更新 285
    10.5.3  原子文件更新 286
    10.6  OTA更新 288
    10.7  使用Mender進行本地更新 288
    10.7.1  構建Mender客戶端 289
    10.7.2  安裝更新 291
    10.8  使用Mender進行OTA更新 294
    10.8.1  設置更新服務器 294
    10.8.2  上傳工件 297
    10.8.3  部署更新 299
    10.9  使用balena進行本地更新 301
    10.9.1  創建一個賬戶 302
    10.9.2  創建應用程序 303
    10.9.3  添加設備 304
    10.9.4  啟用本地模式 306
    10.9.5  安裝CLI 307
    10.9.6  推送一個項目 309
    10.9.7  修改和更新項目 310
    10.10  小結 311
    第11章  連接設備驅動程序 313
    11.1  技術要求 313
    11.2  設備驅動程序的作用 314
    11.3  字符設備 315
    11.4  塊設備 317
    11.5  網絡設備 318
    11.6  在運行時查找驅動程序 320
    11.6.1  從sysfs中獲取信息 322
    11.6.2  設備 322
    11.6.3  驅動程序 323
    11.6.4  塊驅動程序 324
    11.7  尋找合適的設備驅動程序 325
    11.8  用戶空間中的設備驅動程序 325
    11.8.1  通用輸入/輸出接口 326
    11.8.2  處理來自GPIO的中斷 327
    11.8.3  LED 329
    11.8.4  I2C 330
    11.8.5  SPI 332
    11.9  編寫內核設備驅動程序 333
    11.9.1  設計字符設備驅動程序接口 333
    11.9.2  對於設備驅動程序的剖析 335
    11.9.3  編譯內核模塊 338
    11.9.4  加載內核模塊 339
    11.10  發現硬件配置 339
    11.10.1  設備樹 340
    11.10.2  平臺數據 340
    11.10.3  將硬件與設備驅動程序鏈接在一起 341
    11.11  小結 343
    11.12  延伸閱讀 344
    第12章  使用分線板進行原型設計 345
    12.1  技術要求 345
    12.2  將原理圖映射到設備樹的源中 346
    12.2.1  閱讀原理圖和數據表 347
    12.2.2  在BeagleBone Black上安裝Debian 352
    12.2.3  啟用spidev 353
    12.2.4  自定義設備樹 359
    12.3  使用分線板進行原型設計 367
    12.3.1  閉合SPI跳線 368
    12.3.2  安裝GNSS天線 370
    12.3.3  附加SPI接頭 370
    12.3.4  連接SPI跳線 371
    12.4  使用邏輯分析儀探測SPI信號 375
    12.4.1  連接邏輯分析儀 376
    12.4.2  配置Logic 8 377
    12.5  通過SPI接收NMEA消息 383
    12.6  小結 387
    12.7  延伸閱讀 387
    第13章  init程序 389
    13.1  技術要求 389
    13.2  內核引導後的操作 390
    13.3  init程序簡介 391
    13.4  BusyBox init 392
    13.4.1  BusyBox init解析 392
    13.4.2  Buildroot init腳本 393
    13.5  System V init 393
    13.5.1  inittab 395
    13.5.2  init.d腳本 397
    13.5.3  添加新的守護進程 398
    13.5.4  啟動和停止服務 399
    13.6  systemd 400
    13.6.1  使用Yocto Project和Buildroot構建systemd 400
    13.6.2  關於目標、服 401
    13.6.3 &nbs 401
    13.6.4  服務 402
    13.6.5  目標 402
    13.6.6  systemd引導繫統的方式 403
    13.6.7  添加自己的服務 404
    13.6.8  添加看門狗 405
    13.6.9  對嵌入式Linux的影響 406
    13.7  小結 406
    13.8  延伸閱讀 407
    第14章  使用BusyBox runit啟動 409
    14.1  技術要求 409
    14.2  獲取BusyBox runit 410
    14.3  創建服務目錄和文件 416
    14.3.1  服務目錄布局 417
    14.3.2  服務配置 418
    14.4  服務監督 425
    14.4.1  runsv腳本運行的服務 425
    14.4.2  控制服務 427
    14.5  服務依賴 429
    14.5.1  啟動依賴項 429
    14.5.2  自定義啟動依賴項 431
    14.5.3  簡單總結 431
    14.6  專用服務日志記錄 432
    14.6.1  專用日志記錄器的工作方式 432
    14.6.2  向服務中添加專用日志記錄 433
    14.6.3  日志輪轉 434
    14.7  發出服務信號 435
    14.8  小結 436
    14.9  延伸閱讀 437
    第15章  管理電源 439
    15.1  技術要求 439
    15.2  測量用電量 440
    15.3  調整時鐘頻率 443
    15.3.1  CPUFreq驅動程序 444
    15.3.2  使用CPUFreq 446
    15.4  選擇最佳空閑狀態 448
    15.4.1  CPUIdle驅動程序 449
    15.4.2  無滴答操作 452
    15.5  關閉外圍設備 452
    15.6  使繫統進入休眠狀態 454
    15.6.1  電源狀態 454
    15.6.2  喚醒事件 455
    15.6.3  從實時時鐘定時喚醒 456
    15.7  小結 458
    15.8  延伸閱讀 458
    第3篇  編寫嵌入式應用程序
    第16章  打包Python程序 461
    16.1  技術要求 461
    16.1.1  安裝venv 462
    16.1.2  安裝Docker 462
    16.2  追溯Python打包的起源 463
    16.2.1  distutils 463
    16.2.2  setuptools 463
    16.2.3  setup.py 464
    16.3  使用pip安裝Python包 466
    16.3.1  pip和pip3 466
    16.3.2  requirements.txt 469
    16.4  使用venv管理Python虛擬環境 471
    16.4.1  venv 472
    16.4.2  創建虛擬環境 473
    16.4.3  激活和驗證虛擬環境 473
    16.4.4  在虛擬環境中安裝測試庫 474
    16.5  使用conda安裝預編譯的二進制文件 475
    16.5.1  環境管理 475
    16.5.2  驗證根環境 476
    16.5.3  創建conda環境 477
    16.5.4  包管理 478
    16.5.5  導出虛擬環境 479
    16.6  使用Docker部署Python應用程序 480
    16.6.1  Dockerfile解析 481
    16.6.2  構建Docker鏡像 483
    16.6.3  運行Docker鏡像 484
    16.6.4  提取Docker鏡像 485
    16.6.5  發布Docker鏡像 485
    16.6.6  刪除Docker容器 486
    16.6.7  刪除Docker鏡像 487
    16.6.8  Docker應用總結 487
    16.7  小結 488
    16.8  延伸閱讀 488
    第17章  了解進程和線程 489
    17.1  技術要求 489
    17.2  進程和線程的抉擇 490
    17.3  進程 492
    17.3.1  創建新進程 492
    17.3.2  終止進程 493
    17.3.3  運行不同的程序 494
    17.3.4  守護進程 497
    17.3.5  進程間通信 497
    17.3.6  基於消息的IPC 498
    17.3.7  UNIX套接字 498
    17.3.8  FIFO和命名管道 499
    17.3.9  POSIX消息隊列 499
    17.3.10  基於消息的IPC總結 499
    17.3.11  基於共享內存的IPC 500
    17.3.12  POSIX共享內存 500
    17.4  線程 503
    17.4.1  創建一個新線程 503
    17.4.2  終止線程 505
    17.4.3  用線程編譯程序 505
    17.4.4  線程間通信 505
    17.4.5  互斥鎖 506
    17.4.6  不斷變化的條件 506
    17.4.7  進程和線程應用規則 508
    17.5  ZeroMQ 509
    17.5.1  獲取pyzmq 510
    17.5.2  進程之間的消息傳遞 510
    17.5.3  進程內的消息傳遞 512
    17.6  調度 514
    17.6.1  公平與確定性 514
    17.6.2  分時策略 515
    17.6.3  nice值 516
    17.6.4  實時策略 516
    17.6.5  選擇策略 517
    17.6.6  選擇實時優先級 518
    17.7  小結 518
    17.8  延伸閱讀 518
    第18章  管理內存 521
    18.1  技術要求 521
    18.2  虛擬內存基礎知識 522
    18.3  內核空間內存布局 523
    18.3.1  內核日志消息分析 523
    18.3.2  內核的內存使用情況 524
    18.4  用戶空間內存布局 526
    18.5  進程內存映射 528
    18.6  交換 529
    18.6.1  交換的利弊 529
    18.6.2  交換到壓縮內存 530
    18.7  使用mmap映射內存 530
    18.7.1  使用mmap分配私有內存 531
    18.7.2  使用mmap共享內存 531
    18.7.3  使用mmap訪問設備內存 532
    18.8  應用程序的內存使用情況 532
    18.9  每個進程的內存使用情況 533
    18.9.1  使用top和ps 534
    18.9.2  使用smem 534
    18.9.3  其他工具 536
    18.10  識別內存洩漏 537
    18.10.1  mtrace 537
    18.10.2  Valgrind 538
    18.11  內存不足 540
    18.12  小結 541
    18.13  延伸閱讀 542
    第4篇  調試和優化性能
    第19章  使用GDB進行調試 545
    19.1  技術要求 545
    19.2  GNU調試器 546
    19.3  準備調試 547
    19.4  調試應用程序 547
    19.4.1  使用gdbserver進行遠程調試 548
    19.4.2  設置Yocto Project以進行遠程調試 549
    19.4.3  為遠程調試設置Buildroot 550
    19.5  啟動調試 550
    19.5.1  連接GDB和gdbserver 550
    19.5.2  設置sysroot 551
    19.5.3  GDB命令文件 553
    19.5.4  GDB命令概述 554
    19.5.5  運行到斷點 555
    19.5.6  用Python擴展GDB 556
    19.5.7  構建包含Python支持的GDB 556
    19.5.8  使用GDB遠程調試bsdiff 559
    19.6  本機調試 560
    19.6.1  Yocto Project 560
    19.6.2  Buildroot 561
    19.7  即時調試 561
    19.8  調試分叉和線程 562
    19.9  核心文件 562
    19.9.1  觀察核心文件 563
    19.9.2  使用GDB查看核心文件 564
    19.10  GDB用戶界面 565
    19.10.1  終端用戶界面 565
    19.10.2  數據顯示調試器 566
    19.11  Visual Studio Code 567
    19.11.1  安裝Visual Studio Code 567
    19.11.2  安裝工具鏈 567
    19.11.3  安裝CMake 569
    19.11.4  創建一個Visual Studio Code項目 569
    19.11.5  安裝Visual Studio Code擴展 569
    19.11.6  配置CMake 570
    19.11.7  配置項目設置 571
    19.11.8  配置遠程調試的啟動設置 573
    19.12  調試內核代碼 574
    19.12.1  使用kgdb調試內核代碼 575
    19.12.2  調試會話示例 576
    19.12.3  調試早期代碼 577
    19.12.4  調試模塊 578
    19.12.5  使用kdb調試內核代碼 579
    19.12.6  查看內核Oops消息 580
    19.12.7  保存Oops消息 583
    19.13  小結 584
    19.14  延伸閱讀 585
    第20章  性能分析和跟蹤 587
    20.1  技術要求 588
    20.2  觀察者效應 588
    20.2.1  關於觀察者效應 588
    20.2.2  符號表和編譯標志 589
    20.3  開始性能分析 589
    20.4  使用top進行性能分析 590
    20.5  窮人的性能分析器 591
    20.6  perf簡介 592
    20.6.1  為perf配置內核 593
    20.6.2  使用Yocto Project構建perf 593
    20.6.3  使用Buildroot構建perf 594
    20.6.4  使用perf進行性能分析 594
    20.6.5  調用圖 596
    20.6.6  perf annotate 597
    20.7  跟蹤事件 598
    20.8  Ftrace簡介 599
    20.8.1  準備使用Ftrace 599
    20.8.2  使用Ftrace 600
    20.8.3  動態Ftrace和跟蹤過濾器 602
    20.8.4  跟蹤事件 603
    20.9  使用LTTng 604
    20.9.1  LTTng和Yocto Project 605
    20.9.2  LTTng和Buildroot 605
    20.9.3  使用LTTng進行內核跟蹤 606
    20.10  使用BPF 608
    20.10.1  為BPF配置內核 608
    20.10.2  使用Buildroot構建BCC工具包 611
    20.10.3  使用BPF跟蹤工具 612
    20.11  使用Valgrind 615
    20.11.1  Callgrind 615
    20.11.2  Helgrind 616
    20.12  使用strace 616
    20.13  小結 619
    20.14  延伸閱讀 619
    第21章  實時編程 621
    21.1  技術要求 621
    21.2  關於實時 622
    21.3  識別非確定性的來源 624
    21.4  了解調度延遲 625
    21.5  內核搶占 626
    21.5.1  實時Linux內核(PREEMPT_RT) 627
    21.5.2  線程化中斷處理程序 628
    21.6  可搶占內核鎖 630
    21.6.1  獲取PREEMPT_RT補丁 631
    21.6.2  Yocto Project和PREEMPT_RT 632
    21.7  高分辨率定時器 632
    21.8  避免頁面錯誤 633
    21.9  中斷屏蔽 634
    21.10  測量調度延遲 634
    21.10.1  cyclictest 635
    21.10.2  使用Ftrace 638
    21.10.3  結合cyclictest和Ftrace 639
    21.11  小結 640
    21.12  延伸閱讀 641


     

    前言
    多年來,Linux一直是嵌入式計算的中流砥柱。然而,涵蓋該領域所有主題的書籍非常少,本書旨在填補這一空白。“嵌入式Linux”一詞的定義並不明確,它可以應用於從恆溫器到Wi-Fi路由器,再到工業的各種設備內的操作繫統。但是,它們都建立在相同的基本開源軟件之上。這些正是我們在本書中要描述的技術,本書的寫作基於我們作為工程師的經驗和為培訓課程開發的資料。
    技術不會停滯不前。基於嵌入式計算的行業與主流計算一樣容易受到摩爾定律的影響。這種指數級的增長意味著自本書第一版出版以來發生了驚人的大量變化。你現在正在閱讀的第三版經過全面修訂,使用最新版本的主要開源組件,包括Linux 5.4、Yocto Project 3.1 Dunfell和Buildroot 2020.02 LTS。除了Autotools,本書還包含CMake,這是一種新構建繫統,近年來得到了越來越多的采用。
    本書大致按照你在實際項目中遇到的順序來涵蓋這些主題。第1篇包括第1~8章,涉及項目的早期階段。本篇涵蓋選擇工具鏈、引導加載程序和內核等基礎知識。我們以Buildroot和Yocto項目為例介紹嵌入式構建繫統的概念。本篇以對Yocto Project的新深入研究結束。
    多年來,Linux一直是嵌入式計算的中流砥柱。然而,涵蓋該領域所有主題的書籍非常少,本書旨在填補這一空白。“嵌入式Linux”一詞的定義並不明確,它可以應用於從恆溫器到Wi-Fi路由器,再到工業的各種設備內的操作繫統。但是,它們都建立在相同的基本開源軟件之上。這些正是我們在本書中要描述的技術,本書的寫作基於我們作為工程師的經驗和為培訓課程開發的資料。

    技術不會停滯不前。基於嵌入式計算的行業與主流計算一樣容易受到摩爾定律的影響。這種指數級的增長意味著自本書第一版出版以來發生了驚人的大量變化。你現在正在閱讀的第三版經過全面修訂,使用最新版本的主要開源組件,包括Linux 5.4、Yocto Project 3.1 Dunfell和Buildroot 2020.02 LTS。除了Autotools,本書還包含CMake,這是一種新構建繫統,近年來得到了越來越多的采用。

    本書大致按照你在實際項目中遇到的順序來涵蓋這些主題。第1篇包括第1~8章,涉及項目的早期階段。本篇涵蓋選擇工具鏈、引導加載程序和內核等基礎知識。我們以Buildroot和Yocto項目為例介紹嵌入式構建繫統的概念。本篇以對Yocto Project的新深入研究結束。

    第2篇包括第9~15章,著眼於在進行開發之前需要做出的各種設計決策。本篇涵蓋文件繫統、軟件更新、設備驅動程序、init程序和電源管理等主題。第12章演示使用分線板進行快速原型設計的各種技術,包括如何使用邏輯分析儀讀取原理圖、焊接接頭和排除信號故障等。第14章深入探討Buildroot,你將學習如何使用BusyBox runit將繫統軟件劃分為單獨的服務。

    第3篇包括第16~18章,將為你的項目實施階段提供幫助。我們從Python打包和依賴管理開始,隨著機器學習應用程序風靡全球,這個話題變得越來越重要。然後,我們討論各種形式的進程間通信和多線程編程。本篇最後還仔細探討Linux如何管理內存,並演示如何使用各種可用工具來測量內存使用情況和檢測內存洩漏。

    第4篇包括第19~21章,向你展示如何有效地利用Linux提供的許多調試和分析工具來檢測問題和識別性能瓶頸。第19章介紹如何配置Visual Studio Code以使用GDB進行遠程調試。第20章介紹BPF,這是一種在Linux內核中實現高級編程跟蹤的新技術。最後一章則闡釋如何在實時應用程序中使用Linux。

    本書的每一章都介紹嵌入式Linux的一個主要領域。它描述知識背景,以便你可以了解一般原則,它還包括詳細的有效示例來說明這些領域中的操作。你可以把它當作一本理論書籍,也可以將它作為一本實戰操作指南。如果你能二者兼得,那麼效果當然最好:你可以先熟悉理論,然後在現實生活中嘗試。

    本書讀者

    本書是為對嵌入式計算和Linux感興趣的開發人員編寫的。在編寫本書時,我們假設你對Linux命令行有基本的了解;在編程示例中,我們假設你對C和Python語言的知識有一定的了解。其中還有幾章側重於嵌入式目標板的硬件,因此對於本書讀者來說,熟悉硬件和硬件接口將是一個明顯的優勢。

    內容介紹

    本書分為4篇共21章,具體介紹如下。

    第1篇:嵌入式Linux的要素,包括第1~8章。

    第1章“初識嵌入式Linux開發”,詳細闡釋嵌入式Linux生態繫統,介紹硬件選擇和開發環境配置等準備工作。

    第2章“關於工具鏈”,描述工具鏈的組件,演示如何為目標開發板的交叉編譯代碼創建工具鏈。本章還詳細介紹從何處獲取工具鏈,並提供有關如何從源代碼中構建工具鏈的詳細信息。

    第3章“引導加載程序詳解”,闡釋引導加載程序在將Linux內核加載到內存這一過程中的作用,並以U-Boot為例演示其操作。本章還介紹設備樹,它是一種對幾乎所有嵌入式Linux繫統中的硬件細節進行編碼的機制。

    第4章“配置和構建內核”,介紹如何為嵌入式繫統選擇Linux內核並為設備內的硬件配置它。本章還介紹如何將Linux移植到新的硬件上。

    第5章“構建根文件繫統”,通過有關如何配置根文件繫統的分步指南,詳細介紹嵌入式Linux實現的用戶空間部分背後的思想。

    第6章“選擇構建繫統”,涵蓋兩個常用的嵌入式Linux構建繫統Buildroot和Yocto Project,它們可以自動執行此前4章中描述的步驟。

    第7章“使用Yocto進行開發”,演示如何在現有板級支持包(BSP)層之上構建繫統鏡像,如何使用Yocto的可擴展SDK開發板載軟件包,如何推出你自己的嵌入式Linux發行版,以及如何進行運行時包管理和配置遠程包服務器等。

    第8章“Yocto技術內幕”,介紹Yocto的構建工作流程和架構,包括對Yocto獨特的多層方法的解釋。本章還通過實際配方文件中的示例詳細介紹BitBake語法和語義方面的基礎知識。

    第2篇:繫統架構和設計決策,包括第9~15章。

    第9章“創建存儲策略”,討論管理閃存帶來的挑戰,包括原始閃存芯片和嵌入式MMC(eMMC)封裝。本章還描述適用於各種技術的文件繫統。

    第10章“現場更新軟件”,介紹在設備部署後更新軟件的各種方法,包括完全托管的無線(OTA)更新。本章討論的關鍵主題是可靠性和安全性。

    第11章“連接設備驅動程序”,描述內核設備驅動程序如何通過實現一個簡單的驅動程序與硬件進行交互。本章還闡釋從用戶空間調用設備驅動程序的各種方法。

    第12章“使用分線板進行原型設計”,演示如何使用BeagleBone Black開發板的預構建Debian鏡像和外圍分線板快速構建硬件和軟件原型。你將了解如何閱讀數據表、連接電路板、多路復用設備樹綁定以及分析SPI信號。

    第13章“init程序”,解釋第一個用戶空間程序init,討論如何通過它啟動繫統的其餘部分。本章描述init程序的3個版本(每個版本都適用於不同的嵌入式繫統組):從簡單的BusyBox init到System V init,再到當前最先進的方法systemd。

    第14章“使用BusyBox runit啟動”,演示如何使用Buildroot將繫統劃分為單獨的BusyBox runit 服務,每個服務都有自己的專用進程監督和日志記錄,就像 systemd 提供的那樣。與System V init不同,BusyBox runit服務是同時啟動而不是順序啟動,這可以顯著加快啟動速度。

    第15章“管理電源”,考慮可以調整Linux以降低功耗的各種方法,包括動態頻率和電壓調整、選擇更深的空閑狀態和繫統掛起等。其目的是使設備在電池充電時運行時間更長,並且運行溫度更低。

    第3篇:編寫嵌入式應用程序,包括第16~18章。

    第16章“打包Python程序”,解釋哪些選項可用於將Python模塊捆綁在一起進行部署,以及何時使用一種方法而不是另一種方法。本章涵蓋pip、venv、conda和Docker。

    第17章“了解進程和線程”,從應用程序開發人員的角度描述嵌入式繫統。本章著眼於進程和線程、進程間通信和調度策略。

    第18章“管理內存”,介紹虛擬內存背後的思想以及地址空間如何被劃分為內存映射。本章還描述如何準確測量內存使用情況,以及如何檢測內存洩漏。

    第4篇:調試和優化性能,包括第19~21章。

    第19章“使用GDB進行調試”,演示使用GNU調試器GDB和調試代理gdbserver來調試在目標設備上遠程運行的應用程序。本章還介紹如何擴展這個模型來調試內核代碼,即利用kgdb調試內核代碼。

    第20章“性能分析和跟蹤”,涵蓋可用於測量繫統性能的技術。本章從整個繫統的性能分析開始,介紹多種性能分析工具。本章還描述如何使用Valgrind檢查應用程序在線程同步和內存分配方面的正確性。

    第21章“實時編程”,提供Linux實時編程的詳細指南,包括內核配置和 PREEMPT_RT實時內核補丁。內核跟蹤工具Ftrace可用於測量內核調度延遲並顯示各種內核配置的效果。

    充分利用本書

    本書中使用的軟件是完全開源的。在幾乎所有示例中,我們都使用了撰寫本文時可用的最新穩定版本。雖然我們試圖以不特定於版本的方式來描述主要功能,但不可避免的是一些示例需要適應以後的軟件。

    本書涵蓋的軟硬件如表P-1所示。

    表P-1  本書涵蓋的軟硬件

    本書涵蓋的軟硬件 操作繫統需求

    BeagleBone Black 不適用

    Raspberry Pi 4 不適用

    QEMU(32位ARM) Linux(任意版本)

    Yocto Project 3.1(Dunfell) 兼容Linux發行版*

    Buildroot 2020.02 LTS Linux(任意版本)

    crosstool-NG 1.24.0 Linux(任意版本)

    U-Boot v2021.01 Linux(任意版本)

    Linux Kernel 5.4 Linux(任意版本)

    * 有關更多詳細信息,你可以參閱Yocto Project Quick Build(《Yocto Project快速構建》)指南的“Compatible Linux Distribution”(《兼容Linux發行版》)部分。其網址如下:

     

    https://www.yoctoproject.org/docs/current/brief-yoctoprojectqs/brief-yoctoprojectqs.html

    嵌入式開發涉及主機和目標兩個繫統:主機用於開發程序,目標用於運行程序。對於主機繫統,我們使用的是Ubuntu 20.04 LTS,但大多數Linux發行版隻需稍作修改即可工作。你可能決定在虛擬機中以訪客身份運行Linux,但你應該知道,某些任務(如使用Yocto Project構建發行版)要求很高,最好在Linux的本機安裝上運行。

    本書選擇了3個示例目標:QEMU模擬器、BeagleBone Black和Raspberry Pi 4。使用QEMU意味著你可以嘗試大多數示例,而無須投資任何額外的硬件。另外,如果你有真正的硬件,有些事情會更好,為此,我們選擇了BeagleBone Black,因為它較為便宜,廣泛可用,並且有很好的社區支持。Raspberry Pi 4是在本書第3版中添加的,因為它內置了Wi-Fi和藍牙。當然,你不僅限於這3個目標。本書背後的想法是為你提供問題的通用解決方案,以便你可以將它們應用到廣泛的目標板上。

    下載示例代碼文件

    本書隨附的代碼可以在GitHub上找到,其網址如下:

     

    https://github.com/PacktPublishing/Mastering-Embedded-Linux-Programming-Third-Edition

     

    如果代碼有更新,那麼它將在GitHub存儲庫中被更新。

    下載彩色圖像

    我們還提供了一個PDF文件,其中包含本書中使用的屏幕截圖/圖表的彩色圖像。你可以通過以下地址進行下載:

     

    https://static.packt-cdn.com/downloads/9781789530384_ColorImages.pdf

    本書約定

    本書中使用了許多文本約定。

    (1)有關代碼塊的設置如下:

     

    #include  

    #include

    int main (int argc, char *argv[])

    {

        printf ("Hello, world!\
    );

        return 0;

    }

     

    (2)為了突出代碼塊,相關內容需要以粗體的形式進行顯示:

     

    #!/bin/sh

    mount -t proc proc /proc

    mount -t sysfs sysfs /sys

    mount -t devtmpfs devtmpfs /dev

    echo /sbin/mdev > /proc/sys/kernel/hotplug

    mdev -s

     

    (3)任何命令行的輸入或輸出都采用如下所示的粗體代碼形式:

     

    $ sudo tunctl -u $(whoami) -t tap0

     

    (4)術語或重要單詞采用中英文對照的形式給出,在括號內保留其英文原文。示例如下:

     

    在嵌入式設備中最常見的架構是ARM、MIPS、PowerPC和x86,每一種都有32位和64位變體,它們都具有內存(memory management unit,MMU)。

     

    (5)對於界面詞彙或專有名詞將保留其英文原文,在括號內添加其中文譯文。示例如下:

     

    最後,將BR2_ROOTFS_OVERLAY設置為指向覆蓋層的路徑。可以在menuconfig中使用System configuration(繫統配置)| Root filesystem overlay directories(根文件繫統覆蓋層目錄)選項進行配置。

     

    (6)本書還使用了以下兩個圖標:

     表示警告或重要的注意事項。

     表示提示信息或操作技巧。

     
















     
    網友評論  我們期待著您對此商品發表評論
     
    相關商品
    在線留言 商品價格為新臺幣
    關於我們 送貨時間 安全付款 會員登入 加入會員 我的帳戶 網站聯盟
    DVD 連續劇 Copyright © 2024, Digital 了得網 Co., Ltd.
    返回頂部