注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)操作系統(tǒng)Linux嵌入式系統(tǒng)Linux內(nèi)核開發(fā)實(shí)戰(zhàn)指南(ARM平臺(tái))

嵌入式系統(tǒng)Linux內(nèi)核開發(fā)實(shí)戰(zhàn)指南(ARM平臺(tái))

嵌入式系統(tǒng)Linux內(nèi)核開發(fā)實(shí)戰(zhàn)指南(ARM平臺(tái))

定 價(jià):¥168.00

作 者: 王洪輝 編著
出版社: 電子工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: LINUX

ISBN: 9787121079191 出版時(shí)間: 2009-03-01 包裝: 平裝
開本: 16開 頁數(shù): 1124 字?jǐn)?shù):  

內(nèi)容簡介

  《嵌入式系統(tǒng)Linux開發(fā)實(shí)戰(zhàn)指南(ARM平臺(tái))》凝聚了作者12年的工作經(jīng)驗(yàn)和學(xué)習(xí)心得與體會(huì),內(nèi)容覆蓋了嵌入式系統(tǒng)Linux內(nèi)核開發(fā)的各個(gè)方面。作者根據(jù)自己11年的一線工作經(jīng)驗(yàn),介紹了嵌入式系統(tǒng)的概念、組織架構(gòu)、工作原理、軟硬件設(shè)計(jì)流程、開發(fā)調(diào)試方法以及嵌入式Linux的開發(fā)方法與技能,其中列舉了許多作者工作中的實(shí)際案例。另外,作者根據(jù)自己反復(fù)閱讀Linux2.6內(nèi)核源代碼和Linux內(nèi)核參考書的筆記與心得,用很大篇幅深入剖析了Linux內(nèi)核的組成結(jié)構(gòu)以及各組件的實(shí)現(xiàn)原理,在闡述理論的同時(shí)對內(nèi)核源代碼進(jìn)行詳細(xì)注釋,這樣既加深了對Linux內(nèi)核原理的理解,又可引導(dǎo)讀者自行閱讀、分析內(nèi)核源代碼;《嵌入式系統(tǒng)Linux內(nèi)核開發(fā)實(shí)戰(zhàn)指南(ARM平臺(tái))》共32章,分為四部分,每一部分的內(nèi)容既相互獨(dú)立,又彼此關(guān)聯(lián),讀者可以根據(jù)自己的實(shí)際情況有選擇地閱讀,不必嚴(yán)格依照書中的章節(jié)順序。

作者簡介

  王洪輝,江西豐城人,1996年畢業(yè)于華北航天工業(yè)學(xué)院,被分配到中航北京青云航空儀表公司工作,2000年從青云離職后先后在6家公司工作過;作者一直從事嵌入式系統(tǒng)Linux內(nèi)核開發(fā)工作,在當(dāng)今各種流行的嵌入式處理器平臺(tái)和操作系統(tǒng)上都做過開發(fā),編寫、移植或者調(diào)試過各種設(shè)備、接口的驅(qū)動(dòng)程序;作者在職期間即使擔(dān)任硬件部主管或技術(shù)總監(jiān)職務(wù),只要有時(shí)間仍堅(jiān)持親自參與一線技術(shù)開發(fā)工作,積累經(jīng)驗(yàn),精益求精,是嵌入式系統(tǒng)Linux內(nèi)核開發(fā)領(lǐng)域名副其實(shí)的技術(shù)專家;現(xiàn)在作者主要從事嵌入式系統(tǒng)Linux內(nèi)核研究與教學(xué)工作,并計(jì)劃將來組織開發(fā)自己的操作系統(tǒng)。

圖書目錄

第1部分 嵌入式系統(tǒng)硬件開發(fā)
第1章 嵌入式系統(tǒng)概述 2
這一章對嵌入式系統(tǒng)的概念及其特點(diǎn)和應(yīng)用作了概括介紹,筆者根據(jù)自己多年的經(jīng)驗(yàn)闡述了對嵌入式系統(tǒng)的理解,并對一些常見的嵌入式處理器的硬件數(shù)據(jù)進(jìn)行了比較。
1.1 嵌入式系統(tǒng)概念 2
1.2 嵌入式處理器 3
1.3 嵌入式系統(tǒng)應(yīng)用 4
1.4 嵌入式系統(tǒng)發(fā)展 4
1.5 一些嵌入式處理器的硬件特性比較 5
第2章 ARM處理器概述 16
為了使本書內(nèi)容完整,從第2章到第7章中的內(nèi)容大部分是筆者閱讀《ARM體系結(jié)構(gòu)與編程》(詳情參見附錄中的參考文獻(xiàn))的筆記和心得,把與嵌入式系統(tǒng)開發(fā)和Linux內(nèi)核密切相關(guān)的硬件知識(shí)進(jìn)行了概括和整理,本章主要介紹了ARM處理器的特點(diǎn)、ARM處理器的體系架構(gòu)版本和ARM處理器系列。
2.1 ARM發(fā)展歷程 16
2.2 ARM處理器特點(diǎn) 17
2.3 ARM處理器應(yīng)用 17
2.4 ARM體系架構(gòu) 18
2.4.1 ARM體系架構(gòu)版本 18
2.4.2 ARM體系架構(gòu)變種(Variant) 20
2.4.3 ARM體系架構(gòu)版本命名格式 22
2.5 ARM處理器 22
2.5.1 ARM7系列處理器 23
2.5.2 ARM9系列處理器 24
2.5.3 ARM9E系列處理器 24
2.5.4 ARM10E系列處理器 25
2.5.5 SecurCore系列處理器 25
2.5.6 StrongARM處理器 26
2.5.7 Xscale處理器 26
第3章 ARM指令及其尋址方式 27
本章主要介紹了ARM處理器的指令和尋址方式以及ARM匯編偽指令,這是做ARM處理器應(yīng)用系統(tǒng)底層軟件開發(fā)必備的知識(shí)。
3.1 ARM處理器的程序狀態(tài)寄存器(PSR) 27
3.2 ARM指令的條件碼 28
3.3 ARM指令介紹 29
3.3.1 跳轉(zhuǎn)指令 29
3.3.2 數(shù)據(jù)處理指令 30
3.3.3 乘法指令 31
3.3.4 雜類算術(shù)指令 32
3.3.5 狀態(tài)寄存器訪問指令 32
3.3.6 Load/Store內(nèi)存訪問指令 33
3.3.7 批量Load/Store內(nèi)存訪問指令 34
3.3.8 LDREX和STREX指令 35
3.3.9 信號量操作指令 37
3.3.10 異常中斷產(chǎn)生指令 37
3.3.11 ARM協(xié)處理器指令 37
3.4 ARM指令尋址方式 39
3.4.1 數(shù)據(jù)處理指令的操作數(shù)的尋址方式 39
3.4.2 字及無符號字節(jié)的Load/Store指令的尋址方式 43
3.4.3 雜類Load/Store指令的尋址方式 47
3.4.4 批量Load/Store指令的尋址方式 49
3.4.5 協(xié)處理器Load/Store指令的尋址方式 51
3.4.6 ARM指令的尋址方式總結(jié) 52
3.5 ARM匯編偽操作(Directive) 53
3.5.1 符號定義偽操作 54
3.5.2 數(shù)據(jù)定義偽操作 54
3.5.3 匯編控制偽操作 56
3.5.4 棧中數(shù)據(jù)幀描述偽操作 57
3.5.5 信息報(bào)告?zhèn)尾僮?57
3.5.6 其他偽操作 58
3.6 ARM匯編偽指令 59
3.7 Thumb指令介紹 60
第4章 ARM處理器內(nèi)存管理單元(MMU) 61
本章主要介紹了ARM處理器內(nèi)存管理單元(MMU)的工作原理,Linux內(nèi)存管理功能是通過處理器硬件MMU實(shí)現(xiàn)的,在沒有MMU的處理器系統(tǒng)中,Linux只能工作在物理地址模式,沒有虛擬(線性)地址空間的概念。
4.1 ARM處理器中CP15協(xié)處理器的寄存器 61
4.1.1 訪問CP15寄存器的指令 61
4.1.2 CP15寄存器介紹 62
4.2 MMU簡介 70
4.3 系統(tǒng)訪問存儲(chǔ)空間的過程 71
4.3.1 使能MMU時(shí)的情況 71
4.3.2 禁止MMU時(shí)的情況 71
4.3.3 使能/禁止MMU時(shí)應(yīng)注意的問題 72
4.4 ARM處理器地址變換過程 72
4.4.1 MMU的一級映射描述符 73
4.4.2 MMU的二級映射描述符 74
4.4.3 基于段的地址變換過程 75
4.4.4 粗粒度大頁地址變換過程 75
4.4.5 粗粒度小頁地址變換過程 76
4.4.6 細(xì)粒度大頁地址變換過程 76
4.4.7 細(xì)粒度小頁地址變換過程 77
4.4.8 細(xì)粒度極小頁地址變換過程 77
4.5 ARM存儲(chǔ)空間訪問權(quán)限控制 78
4.6 TLB操作 79
4.6.1 使TLB內(nèi)容無效 79
4.6.2 鎖定TLB內(nèi)容 79
4.6.3 解除TLB中被鎖定的地址變換條目 80
4.7 存儲(chǔ)訪問失效 80
4.7.1 MMU失效(MMU Fault) 80
4.7.2 外部存儲(chǔ)訪問失效(External Abort) 81
第5章 ARM處理器的Cache和Write Buffer 82
本章主要介紹了ARM處理器高速緩存(Cache)和寫緩存(Write Buffer)的工作原理,使讀者了解如何提高處理器的性能。
5.1 Cache和Write Buffer一般性介紹 82
5.1.1 Cache工作原理 82
5.1.2 地址映像方式 83
5.1.3 Cache寫入方式原理簡介 84
5.1.4 關(guān)于Write-through和Write-back 85
5.1.5 Cache替換策略 86
5.1.6 使用Cache的必要性 87
5.1.7 使用Cache的可行性 87
5.2 ARM處理器中的Cache和Write Buffer 88
5.2.1 基本概念 88
5.2.2 Cache工作原理 88
5.2.3 Cache地址映射和變換方法 89
5.2.4 Cache分類 90
5.2.5 Cache替換算法 91
5.2.6 Cache內(nèi)容鎖定 91
5.2.7 MMU映射描述符中B位和C位的含義 92
5.2.8 Cache和Writer Buffer編程接口 93
5.3 ARM處理器的快速上下文切換技術(shù) 94
5.3.1 FCSE概述 94
5.3.2 FCSE原理 94
5.3.3 FCSE編程接口 95
第6章 ARM處理器存儲(chǔ)訪問一致性問題 97
本章介紹了在支持MMU、Cache和DMA的系統(tǒng)中可能出現(xiàn)的存儲(chǔ)訪問一致性問題,以及Linux中解決類似問題的方法。
6.1 存儲(chǔ)訪問一致性問題介紹 97
6.1.1 地址映射關(guān)系變化造成的數(shù)據(jù)不一致性 97
6.1.2 指令cache的數(shù)據(jù)不一致性問題 98
6.1.3 DMA造成的數(shù)據(jù)不一致問題 99
6.1.4 指令預(yù)取和自修改代碼 99
6.2 Linux中解決存儲(chǔ)訪問一致性問題的方法 99
第7章 ARM處理器工作模式與異常中斷處理 101
本章主要介紹了ARM處理器的工作模式和異常中斷處理過程,這是ARM處理器系統(tǒng)啟動(dòng)程序編寫者或Bootloader開發(fā)人員的必備知識(shí)。
7.1 ARM處理器工作模式 101
7.2 ARM處理器異常中斷向量表和優(yōu)先級 103
7.3 ARM處理器異常中斷處理 104
7.3.1 進(jìn)入異常中斷處理 104
7.3.2 退出異常中斷處理 105
7.4 ARM處理器的中斷(IRQ或FIQ) 109
第8章 ARM處理器啟動(dòng)過程 110
本章根據(jù)筆者的開發(fā)經(jīng)驗(yàn)介紹了ARM處理器系統(tǒng)的啟動(dòng)過程以及編寫ARM處理器系統(tǒng)啟動(dòng)程序需要注意的事項(xiàng)。
8.1 ARM處理器上電/復(fù)位操作 110
8.2 ARM處理器系統(tǒng)初始化過程 111
8.3 ARM處理器系統(tǒng)初始化編程注意事項(xiàng) 111
第9章 嵌入式系統(tǒng)設(shè)計(jì)與調(diào)試 113
本章根據(jù)筆者10多年的開發(fā)經(jīng)驗(yàn)介紹了嵌入式系統(tǒng)的設(shè)計(jì)流程和調(diào)試方法,列舉了大量筆者工作中碰到的實(shí)際案例。本章內(nèi)容對于嵌入式系統(tǒng)硬件開發(fā)和調(diào)試有較高的參考、指導(dǎo)價(jià)值。
9.1 嵌入式系統(tǒng)設(shè)計(jì)流程 113
9.2 嵌入式系統(tǒng)硬件原理設(shè)計(jì)與審核 114
9.3 硬件設(shè)計(jì)工具軟件 117
9.4 嵌入式系統(tǒng)調(diào)試仿真工具 117
9.5 嵌入式系統(tǒng)調(diào)試診斷方法 118
第10章 自制簡易JTAG下載燒寫工具 123
本章根據(jù)筆者自己制作簡易JTAG線纜的經(jīng)驗(yàn),介紹了簡易JTAG線纜的硬件原理和軟件流程,這是初學(xué)者必備的最廉價(jià)的工具,必須掌握。
10.1 JTAG簡介 123
10.1.1 一些基本概念 124
10.1.2 JTAG接口信號 124
10.1.3 TAP控制器的狀態(tài)機(jī) 125
10.1.4 JTAG接口指令集 129
10.2 簡易JTAG線纜原理 130
10.2.1 PC并口定義 130
10.2.2 PC并口的寄存器 131
10.2.3 簡易JTAG線纜原理圖 133
10.2.4 簡易JTAG線纜燒寫連接圖(見圖10-5) 134
10.3 簡易JTAG燒寫代碼分析 135
10.3.1 簡易JTAG燒寫程序(flashp)使用說明 135
10.3.2 flash與CPU連接及flash屬性描述文件 136
10.3.3 簡易JTAG燒寫程序的執(zhí)行邏輯和流程 138
第2部分 Linux內(nèi)核開發(fā)初步
第11章 Bootloader 142
本章根據(jù)筆者的工作經(jīng)驗(yàn)介紹了流行的幾種Bootloader、Bootloader應(yīng)該具備的基本功能以及Bootloader的裁剪與移植。
11.1 Bootloader的任務(wù)和作用 142
11.2 各種各樣的Bootloader 143
11.3 Bootloader編譯環(huán)境 144
11.4 Bootloader的移植與裁減 145
11.5 編譯Bootloader 145
11.6 燒寫B(tài)ootloader 146
11.7 Bootloader使用舉例 148
11.8 Bootloader修改舉例 149
第12章 創(chuàng)建嵌入式Linux開發(fā)環(huán)境 151
本章介紹了如何創(chuàng)建嵌入式系統(tǒng)Linux內(nèi)核交叉開發(fā)環(huán)境,本章和后續(xù)3章的內(nèi)容是嵌入式系統(tǒng)Linux內(nèi)核開發(fā)的基礎(chǔ),必須掌握。
12.1 安裝Linux host 151
12.2 在虛擬機(jī)中安裝Linux host 152
12.3 安裝Linux交叉編譯環(huán)境 157
12.4 在主機(jī)上設(shè)置TFTP Server 160
12.5 在主機(jī)上設(shè)置DHCP Server 161
12.6 在主機(jī)上設(shè)置Telnet server 161
12.7 在開發(fā)過程中使用NFS 162
12.8 設(shè)置超級終端 163
第13章 編譯Linux內(nèi)核 166
本章介紹了Linux內(nèi)核的配置和編譯方法。
13.1 獲取Linux內(nèi)核源代碼 166
13.2 Linux內(nèi)核目錄結(jié)構(gòu) 166
13.3 配置Linux內(nèi)核 167
13.4 編譯Linux內(nèi)核 168
第14章 創(chuàng)建Linux根文件系統(tǒng) 170
本章介紹了Linux的根文件系統(tǒng)的結(jié)構(gòu)以及創(chuàng)建根文件系統(tǒng)的方法。
14.1 根文件系統(tǒng)概述 170
14.2 根文件系統(tǒng)目錄結(jié)構(gòu) 171
14.3 獲取根文件系統(tǒng)組件源代碼 171
14.4 編譯根文件系統(tǒng)源代碼 171
14.5 創(chuàng)建一個(gè)32MB的RAMDISK根文件系統(tǒng) 173
14.6 在根文件系統(tǒng)中添加驅(qū)動(dòng)模塊或者應(yīng)用程序 173
第15章 固化Linux內(nèi)核和根文件系統(tǒng) 174
本章介紹了固化(燒寫)Linux內(nèi)核和根文件系統(tǒng)的方法。
第16章 關(guān)于?Clinux 176
本章簡要介紹了?Clinux與標(biāo)準(zhǔn)Linux的區(qū)別。
16.1 ?Clinux簡介 176
16.2 ?Clinux源代碼目錄結(jié)構(gòu) 177
16.3 ?Clinux與標(biāo)準(zhǔn)Linux的區(qū)別 178
16.4 編譯?Clinux 179
第3部分 Linux 2.6內(nèi)核原理
第17章 Linux 2.6.10@ARM啟動(dòng)過程 182
本章以start_kernel()和init()函數(shù)中調(diào)用到的函數(shù)說明的方式,介紹了從Linux匯編代碼入口到init內(nèi)核進(jìn)程最后調(diào)用用戶空間init命令的Linux整個(gè)啟動(dòng)過程。本章內(nèi)容是筆者第一次閱讀Linux內(nèi)核源代碼時(shí)對這些函數(shù)的注釋,僅供讀者了解start_kernel()和init()函數(shù)中調(diào)用到的每個(gè)函數(shù)的大致功能時(shí)使用。
17.1 Linux 2.6.10中與ARM處理器平臺(tái)硬件相關(guān)的結(jié)構(gòu)和全局變量 182
17.1.1 相關(guān)數(shù)據(jù)結(jié)構(gòu) 182
17.1.2 相關(guān)全局變量 187
17.2 Linux匯編代碼入口 189
17.3 Linux匯編入口處CPU的狀態(tài) 189
17.4 start_kernel()函數(shù)之前的匯編代碼執(zhí)行過程 190
17.5 start_kernel()函數(shù)中調(diào)用的函數(shù)介紹 192
17.5.1 lock_kernel()函數(shù) 192
17.5.2 page_address_init()函數(shù) 192
17.5.3 printk(linux_banner) 193
17.5.4 setup_arch(&command_line)函數(shù) 193
17.5.5 setup_per_cpu_areas()函數(shù) 198
17.5.6 smp_prepare_boot_cpu()函數(shù) 199
17.5.7 sched_init()函數(shù) 199
17.5.8 build_all_zonelists()函數(shù) 200
17.5.9 page_alloc_init()函數(shù) 200
17.5.10 printk("Kernel command line: %s\n", saved_command_line) 201
17.5.11 parse_early_param()函數(shù) 201
17.5.12 parse_args()函數(shù) 201
17.5.13 sort_main_extable()函數(shù) 202
17.5.14 trap_init()函數(shù) 202
17.5.15 rcu_init()函數(shù) 202
17.5.16 init_IRQ()函數(shù) 203
17.5.17 pidhash_init()函數(shù) 203
17.5.18 init_timers()函數(shù) 203
17.5.19 softirq_init()函數(shù) 204
17.5.20 time_init()函數(shù) 204
17.5.21 console_init()函數(shù) 205
17.5.22 profile_init()函數(shù) 206
17.5.23 local_irq_enable()函數(shù) 207
17.5.24 vfs_caches_init_early()函數(shù) 207
17.5.25 mem_init()函數(shù) 208
17.5.26 kmem_cache_init()函數(shù) 210
17.5.27 numa_policy_init()函數(shù) 225
17.5.28 calibrate_delay()函數(shù) 227
17.5.29 pidmap_init()函數(shù) 228
17.5.30 pgtable_cache_init()函數(shù) 229
17.5.31 prio_tree_init()函數(shù) 229
17.5.32 anon_vma_init()函數(shù) 229
17.5.33 fork_init(num_physpages)函數(shù) 229
17.5.34 proc_caches_init()函數(shù) 230
17.5.35 buffer_init()函數(shù) 231
17.5.36 unnamed_dev_init()函數(shù) 231
17.5.37 security_init()函數(shù) 231
17.5.38 vfs_caches_init(num_physpages)函數(shù) 232
17.5.39 radix_tree_init()函數(shù) 237
17.5.40 signals_init()函數(shù) 237
17.5.41 page_writeback_init()函數(shù) 237
17.5.42 proc_root_init()函數(shù) 238
17.5.43 check_bugs()函數(shù) 240
17.5.44 acpi_early_init()函數(shù) 244
17.5.45 rest_init()函數(shù) 244
17.6 init()進(jìn)程執(zhí)行過程 265
17.6.1 smp_prepare_cpus(max_cpus)函數(shù) 265
17.6.2 do_pre_smp_initcalls()函數(shù) 265
17.6.3 fixup_cpu_present_map()函數(shù) 267
17.6.4 smp_init()函數(shù) 267
17.6.5 sched_init_smp()函數(shù) 268
17.6.6 populate_rootfs()函數(shù) 268
17.6.7 do_basic_setup()函數(shù) 283
17.6.8 sys_access()函數(shù) 292
17.6.9 free_initmem()函數(shù) 301
17.6.10 unlock_kernel()函數(shù) 301
17.6.11 numa_default_policy()函數(shù) 302
17.6.12 sys_dup()函數(shù) 302
17.6.13 execve()函數(shù) 302
第18章 Linux內(nèi)存管理 305
從本章開始,筆者將帶領(lǐng)讀者走進(jìn)神秘的Linux內(nèi)核世界。筆者在閱讀內(nèi)核源代碼以及兩本相關(guān)參考書(見參考文獻(xiàn))的基礎(chǔ)上,以自己的理解和語言總結(jié)概括了Linux內(nèi)核每個(gè)組件的原理。筆者對與每個(gè)內(nèi)核組件相關(guān)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)和全局變量作了盡量詳盡的說明,并且對核心函數(shù)進(jìn)行了詳細(xì)注釋,在向讀者灌輸理論知識(shí)的同時(shí)引導(dǎo)讀者自己去閱讀、分析Linux內(nèi)核源代碼。本章講解了Linux內(nèi)核第一大核心組件“內(nèi)存管理”的原理和實(shí)現(xiàn)內(nèi)幕。
18.1 Linux內(nèi)存管理概述 305
18.1.1 Linux內(nèi)存管理的一些基本概念 305
18.1.2 內(nèi)存管理相關(guān)數(shù)據(jù)結(jié)構(gòu) 309
18.1.3 內(nèi)存管理相關(guān)宏和全局變量 330
18.1.4 Linux內(nèi)存管理的任務(wù) 341
18.1.5 Linux中的物理和虛擬存儲(chǔ)空間布局 341
18.2 為虛擬(線性地址)存儲(chǔ)空間建立頁表 345
18.3 設(shè)置存儲(chǔ)空間的訪問控制屬性 348
18.4 Linux中的內(nèi)存分配和釋放 350
18.4.1 在系統(tǒng)啟動(dòng)初期申請內(nèi)存 350
18.4.2 系統(tǒng)啟動(dòng)之后的內(nèi)存分配與釋放 360
第19章 Linux進(jìn)程管理 480
本章講解了Linux內(nèi)核第二大核心組件“進(jìn)程管理”的原理和實(shí)現(xiàn)內(nèi)幕。
19.1 進(jìn)程管理概述 480
19.1.1 進(jìn)程相關(guān)概念 480
19.1.2 進(jìn)程分類 481
19.1.3 0號進(jìn)程 481
19.1.4 1號進(jìn)程 481
19.1.5 其他一些內(nèi)核線程 482
19.1.6 進(jìn)程描述符(struct task_struct) 482
19.1.7 進(jìn)程狀態(tài) 482
19.1.8 進(jìn)程標(biāo)識(shí)符(PID) 483
19.1.9 current宏定義 484
19.1.10 進(jìn)程鏈表 484
19.1.11 PID hash表和鏈表 485
19.1.12 硬件上下文(Hardware Context) 485
19.1.13 進(jìn)程資源限制 485
19.1.14 進(jìn)程管理相關(guān)數(shù)據(jù)結(jié)構(gòu) 486
19.1.15 進(jìn)程管理相關(guān)宏定義 502
19.1.16 進(jìn)程管理相關(guān)全局變量 514
19.2 進(jìn)程管理相關(guān)初始化 520
19.3 進(jìn)程創(chuàng)建與刪除 529
19.4 進(jìn)程調(diào)度 551
19.4.1 進(jìn)程類型 553
19.4.2 進(jìn)程調(diào)度類型 554
19.4.3 基本時(shí)間片計(jì)算方法 555
19.4.4 動(dòng)態(tài)優(yōu)先級算法 556
19.4.5 交互式進(jìn)程 556
19.4.6 普通進(jìn)程調(diào)度 557
19.4.7 實(shí)時(shí)進(jìn)程調(diào)度 557
19.4.8 進(jìn)程調(diào)度函數(shù)分析 558
19.5 進(jìn)程切換 576
19.6 用戶態(tài)進(jìn)程間通信 581
19.6.1 信號(Signal) 581
19.6.2 管道(pipe)和FIFO(命名管道) 627
19.6.3 進(jìn)程間通信原語(System V IPC) 641
第20章 Linux文件管理 651
本章講解了Linux內(nèi)核第三大核心組件“文件系統(tǒng)”的原理和實(shí)現(xiàn)內(nèi)幕。
20.1 文件系統(tǒng)概述 651
20.1.1 Linux文件管理相關(guān)概念 652
20.1.2 Linux文件管理相關(guān)數(shù)據(jù)結(jié)構(gòu) 657
20.1.3 Linux文件管理相關(guān)宏定義 682
20.1.4 Linux文件管理相關(guān)全局變量 691
20.2 文件管理相關(guān)初始化 699
20.3 文件系統(tǒng)類型注冊 711
20.4 掛接文件系統(tǒng) 712
20.5 文件系統(tǒng)類型超級塊讀取 730
20.5.1 get_sb_single()通用超級塊讀取函數(shù) 731
20.5.2 get_sb_nodev()通用超級塊讀取函數(shù) 737
20.5.3 get_sb_bdev()通用超級塊讀取函數(shù) 738
20.5.4 get_sb_pseudo()通用超級塊讀取函數(shù) 740
20.6 路徑名查找 747
20.7 訪問文件操作 759
20.7.1 打開文件 759
20.7.2 關(guān)閉文件 766
20.7.3 讀文件 768
20.7.4 寫文件 785
20.8 異步I/O系統(tǒng)調(diào)用 792
20.9 Linux特殊文件系統(tǒng) 792
20.9.1 rootfs文件系統(tǒng) 793
20.9.2 sysfs文件系統(tǒng) 797
20.9.3 devfs設(shè)備文件系統(tǒng) 800
20.9.4 bdev塊設(shè)備文件系統(tǒng) 803
20.9.5 ramfs文件系統(tǒng) 804
20.9.6 proc文件系統(tǒng) 804
20.10 磁盤文件系統(tǒng) 813
20.10.1 ext2文件系統(tǒng)相關(guān)數(shù)據(jù)結(jié)構(gòu) 813
20.10.2 ext2文件系統(tǒng)磁盤分區(qū)格式 819
20.10.3 ext2文件系統(tǒng)的各種文件 820
20.10.4 創(chuàng)建ext2文件系統(tǒng) 821
20.10.5 ext2文件系統(tǒng)的操作方法 822
20.11 關(guān)于initramfs 824
20.11.1 initramfs概述 824
20.11.2 initramfs與initrd的區(qū)別 824
20.11.3 initramfs相關(guān)全局變量 825
20.11.4 initramfs被編譯鏈接的位置 825
20.11.5 initramfs文件的生成過程 825
20.11.6 initramfs二進(jìn)制文件格式說明(cpio格式) 828
20.11.7 initramfs二進(jìn)制文件和列表文件對照示例 829
20.11.8 initramfs利弊 830
20.12 關(guān)于initrd 830
20.12.1 initrd概述 830
20.12.2 initrd相關(guān)全局變量 831
20.13 關(guān)于gzip壓縮文件 832
第21章 Linux模塊設(shè)計(jì) 834
本章講解了Linux內(nèi)核模塊程序與應(yīng)用程序的區(qū)別以及如何編寫和加載Linux內(nèi)核模塊程序。
21.1 Linux模塊設(shè)計(jì)概述 834
21.2 Linux的內(nèi)核空間和用戶空間 834
21.3 內(nèi)核模塊與應(yīng)用程序的區(qū)別 835
21.4 編譯模塊 837
21.5 裝載和卸載模塊 837
21.6 模塊層疊 838
21.7 模塊版本依賴 839
21.8 模塊編程示例 839
第22章 Linux系統(tǒng)異常中斷管理 841
本章講解了Linux內(nèi)核如何管理系統(tǒng)異常中斷以及Linux系統(tǒng)調(diào)用的實(shí)現(xiàn)內(nèi)幕。
22.1 Linux異常中斷處理 841
22.2 指令預(yù)取和數(shù)據(jù)訪問中止異常中斷處理 849
22.2.1 指令預(yù)取中止異常中斷處理 850
22.2.2 數(shù)據(jù)訪問中止異常中斷處理 858
22.3 Linux中斷處理 863
22.3.1 內(nèi)核模式下的中斷處理 863
22.3.2 用戶模式下的中斷處理 867
22.4 從中斷返回 868
22.5 Linux中斷管理 869
22.5.1 Linux中斷管理相關(guān)數(shù)據(jù)結(jié)構(gòu)與全局變量 870
22.5.2 Linux中斷管理初始化 872
22.5.3 安裝和卸載中斷處理程序 874
22.5.4 使能和禁止中斷 878
22.6 Linux系統(tǒng)調(diào)用 880
22.6.1 Linux系統(tǒng)調(diào)用內(nèi)核實(shí)現(xiàn)過程 880
22.6.2 從系統(tǒng)調(diào)用返回 889
22.6.3 Linux系統(tǒng)調(diào)用用戶程序接口函數(shù) 890
22.6.4 Linux系統(tǒng)調(diào)用用戶接口函數(shù)與內(nèi)核實(shí)現(xiàn)函數(shù)之間參數(shù)傳遞 899
第23章 Linux軟中斷和工作隊(duì)列 901
本章講解了Linux內(nèi)核中的兩種延遲處理機(jī)制“軟中斷”和“工作隊(duì)列”的原理和實(shí)現(xiàn)。
23.1 概述 901
23.2 Linux軟中斷 902
23.2.1 軟中斷相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 903
23.2.2 軟中斷初始化 904
23.2.3 軟中斷的核心操作函數(shù)do_softirq() 908
23.2.4 軟中斷看護(hù)進(jìn)程執(zhí)行函數(shù)ksoftirqd() 912
23.2.5 如何使用軟中斷 913
23.3 Linux工作隊(duì)列 918
23.3.1 Linux工作隊(duì)列相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 918
23.3.2 Linux工作隊(duì)列初始化 921
23.3.3 將工作加入到工作隊(duì)列中 924
23.3.4 工作者進(jìn)程執(zhí)行函數(shù)worker_thread() 928
23.3.5 使用Linux工作隊(duì)列 931
第24章 Linux并發(fā)與競態(tài) 933
本章講解了Linux內(nèi)核同步機(jī)制,包括幾種鎖定技術(shù)以及免鎖算法。
24.1 并發(fā)與競態(tài)概述 933
24.1.1 Linux中的并發(fā)源 934
24.1.2 競態(tài)可能導(dǎo)致的后果 934
24.1.3 避免競態(tài)的規(guī)則 934
24.2 消除競態(tài)的“鎖定”技術(shù) 935
24.2.1 信號量(semphore)和互斥體(mutual exclusion) 935
24.2.2 讀寫信號量(rw_semaphore) 938
24.2.3 完成量(completion) 941
24.2.4 自旋鎖(spinlock_t) 942
24.2.5 讀寫自旋鎖(rwlock_t) 946
24.2.6 使用“鎖定”技術(shù)的注意事項(xiàng) 949
24.3 消除競態(tài)的非“鎖定”方法 949
24.3.1 免鎖算法 949
24.3.2 原子操作 950
24.3.3 位操作 951
24.3.4 順序鎖 952
24.3.5 讀-復(fù)制-更新(Read-Copy-Update,RCU) 954
第25章 Linux設(shè)備驅(qū)動(dòng)程序 958
本章講解了Linux內(nèi)核第四大核心組件“設(shè)備驅(qū)動(dòng)”的原理和實(shí)現(xiàn)內(nèi)幕。同時(shí)還總結(jié)歸納了編寫各種設(shè)備驅(qū)動(dòng)程序的方法和步驟。
25.1 設(shè)備驅(qū)動(dòng)程序概述 958
25.1.1 設(shè)備驅(qū)動(dòng)程序組成部分 959
25.1.2 設(shè)備號 959
25.1.3 設(shè)備文件 960
25.1.4 編寫設(shè)備驅(qū)動(dòng)程序的關(guān)鍵 961
25.2 字符設(shè)備驅(qū)動(dòng)程序 961
25.2.1 字符設(shè)備相關(guān)數(shù)據(jù)結(jié)構(gòu) 961
25.2.2 字符設(shè)備相關(guān)全局變量 963
25.2.3 字符設(shè)備驅(qū)動(dòng)程序全局初始化 963
25.2.4 為字符設(shè)備分配設(shè)備號 964
25.2.5 注冊字符設(shè)備驅(qū)動(dòng)程序 968
25.2.6 字符設(shè)備的操作方法 971
25.2.7 用戶對字符設(shè)備驅(qū)動(dòng)程序的調(diào)用過程 972
25.2.8 如何編寫字符設(shè)備驅(qū)動(dòng)程序 974
25.2.9 關(guān)于TTY設(shè)備驅(qū)動(dòng)程序 974
25.2.10 控制臺(tái)設(shè)備驅(qū)動(dòng)程序 975
25.3 塊設(shè)備驅(qū)動(dòng)程序 986
25.3.1 塊設(shè)備相關(guān)數(shù)據(jù)結(jié)構(gòu) 986
25.3.2 塊設(shè)備相關(guān)宏定義 997
25.3.3 塊設(shè)備相關(guān)全局變量 999
25.3.4 塊設(shè)備驅(qū)動(dòng)程序全局初始化 1004
25.3.5 為塊設(shè)備分配主設(shè)備號 1006
25.3.6 注冊塊設(shè)備驅(qū)動(dòng)程序 1009
25.3.7 塊設(shè)備驅(qū)動(dòng)程序的操作方法 1017
25.3.8 調(diào)用塊設(shè)備驅(qū)動(dòng)程序過程 1017
25.3.9 I/O調(diào)度 1031
25.3.10 如何編寫塊設(shè)備驅(qū)動(dòng)程序 1032
25.4 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序 1033
25.4.1 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序概述 1033
25.4.2 網(wǎng)絡(luò)設(shè)備相關(guān)數(shù)據(jù)結(jié)構(gòu) 1034
25.4.3 網(wǎng)絡(luò)設(shè)備相關(guān)宏定義 1044
25.4.4 網(wǎng)絡(luò)設(shè)備相關(guān)全局變量 1045
25.4.5 創(chuàng)建net_device結(jié)構(gòu) 1046
25.4.6 注冊網(wǎng)絡(luò)設(shè)備 1048
25.4.7 網(wǎng)絡(luò)設(shè)備的操作方法 1050
25.4.8 網(wǎng)絡(luò)設(shè)備中斷服務(wù)程序 1051
25.4.9 如何編寫網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序 1051
25.5 PCI設(shè)備驅(qū)動(dòng)程序 1052
25.5.1 PCI接口定義 1053
25.5.2 PCI設(shè)備的三個(gè)地址空間 1057
25.5.3 PCI總線仲裁 1058
25.5.4 PCI設(shè)備編號 1059
25.5.5 如何訪問PCI配置空間 1059
25.5.6 如何配置PCI設(shè)備 1061
25.5.7 PCI驅(qū)動(dòng)程序相關(guān)數(shù)據(jù)結(jié)構(gòu) 1062
25.5.8 PCI驅(qū)動(dòng)程序相關(guān)宏定義 1068
25.5.9 PCI驅(qū)動(dòng)程序相關(guān)全局變量 1068
25.5.10 Bootloader和內(nèi)核做的事 1069
25.5.11 PCI驅(qū)動(dòng)程序注冊 1069
25.5.12 PCI驅(qū)動(dòng)程序接口函數(shù) 1071
25.5.13 如何編寫PCI驅(qū)動(dòng)程序 1072
第4部分 Linux內(nèi)核開發(fā)高級指南
第26章 Linux系統(tǒng)參數(shù)設(shè)置 1076
從本章開始的后續(xù)章節(jié)主要講解了比較高級或者平時(shí)較少關(guān)注的Linux內(nèi)核方面的知識(shí),本章講解了Linux中的4種系統(tǒng)參數(shù)格式和設(shè)置方法。
26.1 旗語系統(tǒng)參數(shù)(tag) 1076
26.1.1 與旗語系統(tǒng)參數(shù)相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 1076
26.1.2 旗語系統(tǒng)參數(shù)說明 1082
26.1.3 旗語系統(tǒng)參數(shù)設(shè)置方法 1084
26.2 前期命令行設(shè)置的系統(tǒng)參數(shù) 1084
26.2.1 與前期命令行系統(tǒng)參數(shù)相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 1084
26.2.2 前期命令行設(shè)置的系統(tǒng)參數(shù)說明 1085
26.2.3 前期命令行系統(tǒng)參數(shù)設(shè)置方法 1086
26.2.4 如何添加自己的前期命令行設(shè)置的系統(tǒng)參數(shù) 1087
26.3 老式命令行系統(tǒng)參數(shù) 1087
26.3.1 與老式命令行系統(tǒng)參數(shù)相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 1087
26.3.2 老式命令行設(shè)置的系統(tǒng)參數(shù)說明 1088
26.3.3 老式命令行設(shè)置的系統(tǒng)參數(shù)設(shè)置方法 1089
26.3.4 如何添加自己的老式命令行設(shè)置的系統(tǒng)參數(shù) 1089
26.4 命令行系統(tǒng)參數(shù) 1089
26.4.1 與命令行系統(tǒng)參數(shù)相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 1089
26.4.2 命令行設(shè)置的系統(tǒng)參數(shù)說明 1090
26.4.3 命令行設(shè)置的系統(tǒng)參數(shù)設(shè)置方法 1090
第27章 Linux內(nèi)核調(diào)試 1091
本章介紹了Linux內(nèi)核的調(diào)試方法。
27.1 打開Linux內(nèi)核及其各模塊自帶的調(diào)試開關(guān) 1091
27.2 內(nèi)核剖析(Profiling) 1093
27.3 通過打印調(diào)試(printk) 1095
27.3.1 關(guān)于printk() 1095
27.3.2 內(nèi)核信息級別 1096
27.3.3 打印速度限制 1097
27.3.4 控制臺(tái)重定向 1098
27.4 使用proc文件系統(tǒng)調(diào)試 1098
27.5 oops消息 1098
27.6 通過跟蹤命令strace調(diào)試 1099
27.7 使用gdb、kdb、kgdb調(diào)試 1099
第28章 Linux內(nèi)核移植 1101
本章介紹了Linux內(nèi)核的移植方法。
第29章 Linux內(nèi)核優(yōu)化 1104
本章介紹了Linux內(nèi)核的優(yōu)化方法。
29.1 編譯優(yōu)化 1104
29.2 根據(jù)CPU特性進(jìn)行優(yōu)化 1105
29.3 對內(nèi)核進(jìn)行裁減 1105
29.4 優(yōu)化系統(tǒng)內(nèi)存配置 1106
29.5 優(yōu)化系統(tǒng)啟動(dòng)過程以縮減系統(tǒng)啟動(dòng)時(shí)間 1106
29.6 內(nèi)存映射優(yōu)化 1107
29.7 工具軟件輔助優(yōu)化 1107
第30章 Linux定時(shí)器 1109
本章介紹了Linux內(nèi)核的軟件定時(shí)器。
30.1 定時(shí)器相關(guān)數(shù)據(jù)結(jié)構(gòu) 1109
30.2 定時(shí)器相關(guān)宏定義 1111
30.3 定時(shí)器相關(guān)全局變量 1112
30.4 定時(shí)器和時(shí)鐘初始化 1113
30.5 獲取系統(tǒng)時(shí)間 1114
30.6 延遲函數(shù) 1115
30.7 與定時(shí)器相關(guān)系統(tǒng)調(diào)用 1115
30.8 使用定時(shí)器方法 1116
第31章 雜項(xiàng) 1117
本章介紹了PER_CPU變量以及Linux中的數(shù)據(jù)類型定義。
31.1 per_cpu變量 1117
31.2 Linux中的數(shù)據(jù)類型定義 1118
第32章 編譯鏈接文件說明 1119
本章注釋了ARM處理器系統(tǒng)中Linux內(nèi)核的鏈接文件,以幫助讀者了解編譯出來的Linux內(nèi)核各區(qū)段在內(nèi)存中的存放位置。
參考文獻(xiàn) 1125

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號