字?jǐn)?shù):1619千字 定價(jià):¥168.00元 本書以嵌入式系統(tǒng)Linux內(nèi)核開發(fā)的整個(gè)過程為線索,按照先硬件后軟件、先易后難的順序編寫。書中內(nèi)容覆蓋了嵌入式系統(tǒng)Linux內(nèi)核開發(fā)的各個(gè)方面,全書由“嵌入式系統(tǒng)硬件開發(fā)(共10章)”、“Linux內(nèi)核開發(fā)初步(共6章)”、“Linux 2.6內(nèi)核原理(共9章)”、“Linux內(nèi)核開發(fā)高級(jí)指南(共7章)”四部分組成,共32章。其中“嵌入式系統(tǒng)硬件開發(fā)”部分主要以ARM處理器為例介紹了嵌入式處理器的特點(diǎn)、內(nèi)部原理以及硬件開發(fā)調(diào)試過程和方法,還介紹了如何制作簡(jiǎn)易JTAG線纜和編寫燒寫程序;“Linux內(nèi)核開發(fā)初步”部分主要介紹各種bootloader、Linux開發(fā)環(huán)境的創(chuàng)建、Linux內(nèi)核的配置和編譯以及根文件系統(tǒng)的制作,還簡(jiǎn)單介紹了uClinux;“Linux 2.6內(nèi)核原理”部分是本書的核心,該部分以Linux 2.6.10版內(nèi)核源代碼為基礎(chǔ)分析了Linux 2.6的內(nèi)核原理,涵蓋了Linux的各大方面。第1部分 嵌入式系統(tǒng)硬件開發(fā)第1章 嵌入式系統(tǒng)概述 2這一章對(duì)嵌入式系統(tǒng)的概念及其特點(diǎn)和應(yīng)用作了概括介紹,筆者根據(jù)自己多年的經(jīng)驗(yàn)闡述了對(duì)嵌入式系統(tǒng)的理解,并對(duì)一些常見的嵌入式處理器的硬件數(shù)據(jù)進(jìn)行了比較。1.1 嵌入式系統(tǒng)概念 21.2 嵌入式處理器 31.3 嵌入式系統(tǒng)應(yīng)用 41.4 嵌入式系統(tǒng)發(fā)展 41.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ā)展歷程 162.2 ARM處理器特點(diǎn) 172.3 ARM處理器應(yīng)用 172.4 ARM體系架構(gòu) 182.4.1 ARM體系架構(gòu)版本 182.4.2 ARM體系架構(gòu)變種(Variant) 202.4.3 ARM體系架構(gòu)版本命名格式 222.5 ARM處理器 222.5.1 ARM7系列處理器 232.5.2 ARM9系列處理器 242.5.3 ARM9E系列處理器 242.5.4 ARM10E系列處理器 252.5.5 SecurCore系列處理器 252.5.6 StrongARM處理器 262.5.7 Xscale處理器 26第3章 ARM指令及其尋址方式 27本章主要介紹了ARM處理器的指令和尋址方式以及ARM匯編偽指令,這是做ARM處理器應(yīng)用系統(tǒng)底層軟件開發(fā)必備的知識(shí)。3.1 ARM處理器的程序狀態(tài)寄存器(PSR) 273.2 ARM指令的條件碼 283.3 ARM指令介紹 293.3.1 跳轉(zhuǎn)指令 293.3.2 數(shù)據(jù)處理指令 303.3.3 乘法指令 313.3.4 雜類算術(shù)指令 323.3.5 狀態(tài)寄存器訪問指令 323.3.6 Load/Store內(nèi)存訪問指令 333.3.7 批量Load/Store內(nèi)存訪問指令 343.3.8 LDREX和STREX指令 353.3.9 信號(hào)量操作指令 373.3.10 異常中斷產(chǎn)生指令 373.3.11 ARM協(xié)處理器指令 373.4 ARM指令尋址方式 393.4.1 數(shù)據(jù)處理指令的操作數(shù)的尋址方式 393.4.2 字及無(wú)符號(hào)字節(jié)的Load/Store指令的尋址方式 433.4.3 雜類Load/Store指令的尋址方式 473.4.4 批量Load/Store指令的尋址方式 493.4.5 協(xié)處理器Load/Store指令的尋址方式 513.4.6 ARM指令的尋址方式總結(jié) 523.5 ARM匯編偽操作(Directive) 533.5.1 符號(hào)定義偽操作 543.5.2 數(shù)據(jù)定義偽操作 543.5.3 匯編控制偽操作 563.5.4 棧中數(shù)據(jù)幀描述偽操作 573.5.5 信息報(bào)告?zhèn)尾僮?573.5.6 其他偽操作 583.6 ARM匯編偽指令 593.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é)處理器的寄存器 614.1.1 訪問CP15寄存器的指令 614.1.2 CP15寄存器介紹 624.2 MMU簡(jiǎn)介 704.3 系統(tǒng)訪問存儲(chǔ)空間的過程 714.3.1 使能MMU時(shí)的情況 714.3.2 禁止MMU時(shí)的情況 714.3.3 使能/禁止MMU時(shí)應(yīng)注意的問題 724.4 ARM處理器地址變換過程 724.4.1 MMU的一級(jí)映射描述符 734.4.2 MMU的二級(jí)映射描述符 744.4.3 基于段的地址變換過程 754.4.4 粗粒度大頁(yè)地址變換過程 754.4.5 粗粒度小頁(yè)地址變換過程 764.4.6 細(xì)粒度大頁(yè)地址變換過程 764.4.7 細(xì)粒度小頁(yè)地址變換過程 774.4.8 細(xì)粒度極小頁(yè)地址變換過程 774.5 ARM存儲(chǔ)空間訪問權(quán)限控制 784.6 TLB操作 794.6.1 使TLB內(nèi)容無(wú)效 794.6.2 鎖定TLB內(nèi)容 794.6.3 解除TLB中被鎖定的地址變換條目 804.7 存儲(chǔ)訪問失效 804.7.1 MMU失效(MMUFault) 804.7.2 外部存儲(chǔ)訪問失效(ExternalAbort) 81第5章 ARM處理器的Cache和WriteBuffer 82本章主要介紹了ARM處理器高速緩存(Cache)和寫緩存(WriteBuffer)的工作原理,使讀者了解如何提高處理器的性能。5.1 Cache和WriteBuffer一般性介紹 825.1.1 Cache工作原理 825.1.2 地址映像方式 835.1.3 Cache寫入方式原理簡(jiǎn)介 845.1.4 關(guān)于Write-through和Write-back 855.1.5 Cache替換策略 865.1.6 使用Cache的必要性 875.1.7 使用Cache的可行性 875.2 ARM處理器中的Cache和WriteBuffer 885.2.1 基本概念 885.2.2 Cache工作原理 885.2.3 Cache地址映射和變換方法 895.2.4 Cache分類 905.2.5 Cache替換算法 915.2.6 Cache內(nèi)容鎖定 915.2.7 MMU映射描述符中B位和C位的含義 925.2.8 Cache和WriterBuffer編程接口 935.3 ARM處理器的快速上下文切換技術(shù) 945.3.1 FCSE概述 945.3.2 FCSE原理 945.3.3 FCSE編程接口 95第6章 ARM處理器存儲(chǔ)訪問一致性問題 97本章介紹了在支持MMU、Cache和DMA的系統(tǒng)中可能出現(xiàn)的存儲(chǔ)訪問一致性問題,以及Linux中解決類似問題的方法。6.1 存儲(chǔ)訪問一致性問題介紹 976.1.1 地址映射關(guān)系變化造成的數(shù)據(jù)不一致性 976.1.2 指令cache的數(shù)據(jù)不一致性問題 986.1.3 DMA造成的數(shù)據(jù)不一致問題 996.1.4 指令預(yù)取和自修改代碼 996.2 Linux中解決存儲(chǔ)訪問一致性問題的方法 99第7章 ARM處理器工作模式與異常中斷處理 101本章主要介紹了ARM處理器的工作模式和異常中斷處理過程,這是ARM處理器系統(tǒng)啟動(dòng)程序編寫者或Bootloader開發(fā)人員的必備知識(shí)。7.1 ARM處理器工作模式 1017.2 ARM處理器異常中斷向量表和優(yōu)先級(jí) 1037.3 ARM處理器異常中斷處理 1047.3.1 進(jìn)入異常中斷處理 1047.3.2 退出異常中斷處理 1057.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ù)位操作 1108.2 ARM處理器系統(tǒng)初始化過程 1118.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)容對(duì)于嵌入式系統(tǒng)硬件開發(fā)和調(diào)試有較高的參考、指導(dǎo)價(jià)值。9.1 嵌入式系統(tǒng)設(shè)計(jì)流程 1139.2 嵌入式系統(tǒng)硬件原理設(shè)計(jì)與審核 1149.3 硬件設(shè)計(jì)工具軟件 1179.4 嵌入式系統(tǒng)調(diào)試仿真工具 1179.5 嵌入式系統(tǒng)調(diào)試診斷方法 118第10章 自制簡(jiǎn)易JTAG下載燒寫工具 123本章根據(jù)筆者自己制作簡(jiǎn)易JTAG線纜的經(jīng)驗(yàn),介紹了簡(jiǎn)易JTAG線纜的硬件原理和軟件流程,這是初學(xué)者必備的最廉價(jià)的工具,必須掌握。10.1 JTAG簡(jiǎn)介 12310.1.1 一些基本概念 12410.1.2 JTAG接口信號(hào) 12410.1.3 TAP控制器的狀態(tài)機(jī) 12510.1.4 JTAG接口指令集 12910.2 簡(jiǎn)易JTAG線纜原理 13010.2.1 PC并口定義 13010.2.2 PC并口的寄存器 13110.2.3 簡(jiǎn)易JTAG線纜原理圖 13310.2.4 簡(jiǎn)易JTAG線纜燒寫連接圖(見圖10-5) 13410.3 簡(jiǎn)易JTAG燒寫代碼分析 13510.3.1 簡(jiǎn)易JTAG燒寫程序(flashp)使用說明 13510.3.2 flash與CPU連接及flash屬性描述文件 13610.3.3 簡(jiǎn)易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ù)和作用 14211.2 各種各樣的Bootloader 14311.3 Bootloader編譯環(huán)境 14411.4 Bootloader的移植與裁減 14511.5 編譯Bootloader 14511.6 燒寫B(tài)ootloader 14611.7 Bootloader使用舉例 14811.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 安裝Linuxhost 15112.2 在虛擬機(jī)中安裝Linuxhost 15212.3 安裝Linux交叉編譯環(huán)境 15712.4 在主機(jī)上設(shè)置TFTPServer 16012.5 在主機(jī)上設(shè)置DHCPServer 16112.6 在主機(jī)上設(shè)置Telnetserver 16112.7 在開發(fā)過程中使用NFS 16212.8 設(shè)置超級(jí)終端 163第13章 編譯Linux內(nèi)核 166本章介紹了Linux內(nèi)核的配置和編譯方法。13.1 獲取Linux內(nèi)核源代碼 16613.2 Linux內(nèi)核目錄結(jié)構(gòu) 16613.3 配置Linux內(nèi)核 16713.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)概述 17014.2 根文件系統(tǒng)目錄結(jié)構(gòu) 17114.3 獲取根文件系統(tǒng)組件源代碼 17114.4 編譯根文件系統(tǒng)源代碼 17114.5 創(chuàng)建一個(gè)32MB的RAMDISK根文件系統(tǒng) 17314.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本章簡(jiǎn)要介紹了?Clinux與標(biāo)準(zhǔn)Linux的區(qū)別。16.1 ?Clinux簡(jiǎn)介 17616.2 ?Clinux源代碼目錄結(jié)構(gòu) 17716.3 ?Clinux與標(biāo)準(zhǔn)Linux的區(qū)別 17816.4 編譯?Clinux 179第3部分 Linux2.6內(nèi)核原理第17章 Linux2.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í)對(duì)這些函數(shù)的注釋,僅供讀者了解start_kernel()和init()函數(shù)中調(diào)用到的每個(gè)函數(shù)的大致功能時(shí)使用。17.1 Linux2.6.10中與ARM處理器平臺(tái)硬件相關(guān)的結(jié)構(gòu)和全局變量 18217.1.1 相關(guān)數(shù)據(jù)結(jié)構(gòu) 18217.1.2 相關(guān)全局變量 18717.2 Linux匯編代碼入口 18917.3 Linux匯編入口處CPU的狀態(tài) 18917.4 start_kernel()函數(shù)之前的匯編代碼執(zhí)行過程 19017.5 start_kernel()函數(shù)中調(diào)用的函數(shù)介紹 19217.5.1 lock_kernel()函數(shù) 19217.5.2 page_address_init()函數(shù) 19217.5.3 printk(linux_banner) 19317.5.4 setup_arch(&command_line)函數(shù) 19317.5.5 setup_per_cpu_areas()函數(shù) 19817.5.6 smp_prepare_boot_cpu()函數(shù) 19917.5.7 sched_init()函數(shù) 19917.5.8 build_all_zonelists()函數(shù) 20017.5.9 page_alloc_init()函數(shù) 20017.5.10 printk("Kernelcommandline:%s
",saved_command_line) 20117.5.11 parse_early_param()函數(shù) 20117.5.12 parse_args()函數(shù) 20117.5.13 sort_main_extable()函數(shù) 20217.5.14 trap_init()函數(shù) 20217.5.15 rcu_init()函數(shù) 20217.5.16 init_IRQ()函數(shù) 20317.5.17 pidhash_init()函數(shù) 20317.5.18 init_timers()函數(shù) 20317.5.19 softirq_init()函數(shù) 20417.5.20 time_init()函數(shù) 20417.5.21 console_init()函數(shù) 20517.5.22 profile_init()函數(shù) 20617.5.23 local_irq_enable()函數(shù) 20717.5.24 vfs_caches_init_early()函數(shù) 20717.5.25 mem_init()函數(shù) 20817.5.26 kmem_cache_init()函數(shù) 21017.5.27 numa_policy_init()函數(shù) 22517.5.28 calibrate_delay()函數(shù) 22717.5.29 pidmap_init()函數(shù) 22817.5.30 pgtable_cache_init()函數(shù) 22917.5.31 prio_tree_init()函數(shù) 22917.5.32 anon_vma_init()函數(shù) 22917.5.33 fork_init(num_physpages)函數(shù) 22917.5.34 proc_caches_init()函數(shù) 23017.5.35 buffer_init()函數(shù) 23117.5.36 unnamed_dev_init()函數(shù) 23117.5.37 security_init()函數(shù) 23117.5.38 vfs_caches_init(num_physpages)函數(shù) 23217.5.39 radix_tree_init()函數(shù) 23717.5.40 signals_init()函數(shù) 23717.5.41 page_writeback_init()函數(shù) 23717.5.42 proc_root_init()函數(shù) 23817.5.43 check_bugs()函數(shù) 24017.5.44 acpi_early_init()函數(shù) 24417.5.45 rest_init()函數(shù) 24417.6 init()進(jìn)程執(zhí)行過程 26517.6.1 smp_prepare_cpus(max_cpus)函數(shù) 26517.6.2 do_pre_smp_initcalls()函數(shù) 26517.6.3 fixup_cpu_present_map()函數(shù) 26717.6.4 smp_init()函數(shù) 26717.6.5 sched_init_smp()函數(shù) 26817.6.6 populate_rootfs()函數(shù) 26817.6.7 do_basic_setup()函數(shù) 28317.6.8 sys_access()函數(shù) 29217.6.9 free_initmem()函數(shù) 30117.6.10 unlock_kernel()函數(shù) 30117.6.11 numa_default_policy()函數(shù) 30217.6.12 sys_dup()函數(shù) 30217.6.13 execve()函數(shù) 302第18章 Linux內(nèi)存管理 305從本章開始,筆者將帶領(lǐng)讀者走進(jìn)神秘的Linux內(nèi)核世界。筆者在閱讀內(nèi)核源代碼以及兩本相關(guān)參考書(見參考文獻(xiàn))的基礎(chǔ)上,以自己的理解和語(yǔ)言總結(jié)概括了Linux內(nèi)核每個(gè)組件的原理。筆者對(duì)與每個(gè)內(nèi)核組件相關(guān)的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)和全局變量作了盡量詳盡的說明,并且對(duì)核心函數(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)存管理概述 30518.1.1 Linux內(nèi)存管理的一些基本概念 30518.1.2 內(nèi)存管理相關(guān)數(shù)據(jù)結(jié)構(gòu) 30918.1.3 內(nèi)存管理相關(guān)宏和全局變量 33018.1.4 Linux內(nèi)存管理的任務(wù) 34118.1.5 Linux中的物理和虛擬存儲(chǔ)空間布局 34118.2 為虛擬(線性地址)存儲(chǔ)空間建立頁(yè)表 34518.3 設(shè)置存儲(chǔ)空間的訪問控制屬性 34818.4 Linux中的內(nèi)存分配和釋放 35018.4.1 在系統(tǒng)啟動(dòng)初期申請(qǐng)內(nèi)存 35018.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)程管理概述 48019.1.1 進(jìn)程相關(guān)概念 48019.1.2 進(jìn)程分類 48119.1.3 0號(hào)進(jìn)程 48119.1.4 1號(hào)進(jìn)程 48119.1.5 其他一些內(nèi)核線程 48219.1.6 進(jìn)程描述符(structtask_struct) 48219.1.7 進(jìn)程狀態(tài) 48219.1.8 進(jìn)程標(biāo)識(shí)符(PID) 48319.1.9 current宏定義 48419.1.10 進(jìn)程鏈表 48419.1.11 PIDhash表和鏈表 48519.1.12 硬件上下文(HardwareContext) 48519.1.13 進(jìn)程資源限制 48519.1.14 進(jìn)程管理相關(guān)數(shù)據(jù)結(jié)構(gòu) 48619.1.15 進(jìn)程管理相關(guān)宏定義 50219.1.16 進(jìn)程管理相關(guān)全局變量 51419.2 進(jìn)程管理相關(guān)初始化 52019.3 進(jìn)程創(chuàng)建與刪除 52919.4 進(jìn)程調(diào)度 55119.4.1 進(jìn)程類型 55319.4.2 進(jìn)程調(diào)度類型 55419.4.3 基本時(shí)間片計(jì)算方法 55519.4.4 動(dòng)態(tài)優(yōu)先級(jí)算法 55619.4.5 交互式進(jìn)程 55619.4.6 普通進(jìn)程調(diào)度 55719.4.7 實(shí)時(shí)進(jìn)程調(diào)度 55719.4.8 進(jìn)程調(diào)度函數(shù)分析 55819.5 進(jìn)程切換 57619.6 用戶態(tài)進(jìn)程間通信 58119.6.1 信號(hào)(Signal) 58119.6.2 管道(pipe)和FIFO(命名管道) 62719.6.3 進(jìn)程間通信原語(yǔ)(SystemVIPC) 641第20章 Linux文件管理 651本章講解了Linux內(nèi)核第三大核心組件“文件系統(tǒng)”的原理和實(shí)現(xiàn)內(nèi)幕。20.1 文件系統(tǒng)概述 65120.1.1 Linux文件管理相關(guān)概念 65220.1.2 Linux文件管理相關(guān)數(shù)據(jù)結(jié)構(gòu) 65720.1.3 Linux文件管理相關(guān)宏定義 68220.1.4 Linux文件管理相關(guān)全局變量 69120.2 文件管理相關(guān)初始化 69920.3 文件系統(tǒng)類型注冊(cè) 71120.4 掛接文件系統(tǒng) 71220.5 文件系統(tǒng)類型超級(jí)塊讀取 73020.5.1 get_sb_single()通用超級(jí)塊讀取函數(shù) 73120.5.2 get_sb_nodev()通用超級(jí)塊讀取函數(shù) 73720.5.3 get_sb_bdev()通用超級(jí)塊讀取函數(shù) 73820.5.4 get_sb_pseudo()通用超級(jí)塊讀取函數(shù) 74020.6 路徑名查找 74720.7 訪問文件操作 75920.7.1 打開文件 75920.7.2 關(guān)閉文件 76620.7.3 讀文件 76820.7.4 寫文件 78520.8 異步I/O系統(tǒng)調(diào)用 79220.9 Linux特殊文件系統(tǒng) 79220.9.1 rootfs文件系統(tǒng) 79320.9.2 sysfs文件系統(tǒng) 79720.9.3 devfs設(shè)備文件系統(tǒng) 80020.9.4 bdev塊設(shè)備文件系統(tǒng) 80320.9.5 ramfs文件系統(tǒng) 80420.9.6 proc文件系統(tǒng) 80420.10 磁盤文件系統(tǒng) 81320.10.1 ext2文件系統(tǒng)相關(guān)數(shù)據(jù)結(jié)構(gòu) 81320.10.2 ext2文件系統(tǒng)磁盤分區(qū)格式 81920.10.3 ext2文件系統(tǒng)的各種文件 82020.10.4 創(chuàng)建ext2文件系統(tǒng) 82120.10.5 ext2文件系統(tǒng)的操作方法 82220.11 關(guān)于initramfs 82420.11.1 initramfs概述 82420.11.2 initramfs與initrd的區(qū)別 82420.11.3 initramfs相關(guān)全局變量 82520.11.4 initramfs被編譯鏈接的位置 82520.11.5 initramfs文件的生成過程 82520.11.6 initramfs二進(jìn)制文件格式說明(cpio格式) 82820.11.7 initramfs二進(jìn)制文件和列表文件對(duì)照示例 82920.11.8 initramfs利弊 83020.12 關(guān)于initrd 83020.12.1 initrd概述 83020.12.2 initrd相關(guān)全局變量 83120.13 關(guān)于gzip壓縮文件 832第21章 Linux模塊設(shè)計(jì) 834本章講解了Linux內(nèi)核模塊程序與應(yīng)用程序的區(qū)別以及如何編寫和加載Linux內(nèi)核模塊程序。21.1 Linux模塊設(shè)計(jì)概述 83421.2 Linux的內(nèi)核空間和用戶空間 83421.3 內(nèi)核模塊與應(yīng)用程序的區(qū)別 83521.4 編譯模塊 83721.5 裝載和卸載模塊 83721.6 模塊層疊 83821.7 模塊版本依賴 83921.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異常中斷處理 84122.2 指令預(yù)取和數(shù)據(jù)訪問中止異常中斷處理 84922.2.1 指令預(yù)取中止異常中斷處理 85022.2.2 數(shù)據(jù)訪問中止異常中斷處理 85822.3 Linux中斷處理 86322.3.1 內(nèi)核模式下的中斷處理 86322.3.2 用戶模式下的中斷處理 86722.4 從中斷返回 86822.5 Linux中斷管理 86922.5.1 Linux中斷管理相關(guān)數(shù)據(jù)結(jié)構(gòu)與全局變量 87022.5.2 Linux中斷管理初始化 87222.5.3 安裝和卸載中斷處理程序 87422.5.4 使能和禁止中斷 87822.6 Linux系統(tǒng)調(diào)用 88022.6.1 Linux系統(tǒng)調(diào)用內(nèi)核實(shí)現(xiàn)過程 88022.6.2 從系統(tǒng)調(diào)用返回 88922.6.3 Linux系統(tǒng)調(diào)用用戶程序接口函數(shù) 89022.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 概述 90123.2 Linux軟中斷 90223.2.1 軟中斷相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 90323.2.2 軟中斷初始化 90423.2.3 軟中斷的核心操作函數(shù)do_softirq() 90823.2.4 軟中斷看護(hù)進(jìn)程執(zhí)行函數(shù)ksoftirqd() 91223.2.5 如何使用軟中斷 91323.3 Linux工作隊(duì)列 91823.3.1 Linux工作隊(duì)列相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 91823.3.2 Linux工作隊(duì)列初始化 92123.3.3 將工作加入到工作隊(duì)列中 92423.3.4 工作者進(jìn)程執(zhí)行函數(shù)worker_thread() 92823.3.5 使用Linux工作隊(duì)列 931第24章 Linux并發(fā)與競(jìng)態(tài) 933本章講解了Linux內(nèi)核同步機(jī)制,包括幾種鎖定技術(shù)以及免鎖算法。24.1 并發(fā)與競(jìng)態(tài)概述 93324.1.1 Linux中的并發(fā)源 93424.1.2 競(jìng)態(tài)可能導(dǎo)致的后果 93424.1.3 避免競(jìng)態(tài)的規(guī)則 93424.2 消除競(jìng)態(tài)的“鎖定”技術(shù) 93524.2.1 信號(hào)量(semphore)和互斥體(mutualexclusion) 93524.2.2 讀寫信號(hào)量(rw_semaphore) 93824.2.3 完成量(completion) 94124.2.4 自旋鎖(spinlock_t) 94224.2.5 讀寫自旋鎖(rwlock_t) 94624.2.6 使用“鎖定”技術(shù)的注意事項(xiàng) 94924.3 消除競(jìng)態(tài)的非“鎖定”方法 94924.3.1 免鎖算法 94924.3.2 原子操作 95024.3.3 位操作 95124.3.4 順序鎖 95224.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)程序概述 95825.1.1 設(shè)備驅(qū)動(dòng)程序組成部分 95925.1.2 設(shè)備號(hào) 95925.1.3 設(shè)備文件 96025.1.4 編寫設(shè)備驅(qū)動(dòng)程序的關(guān)鍵 96125.2 字符設(shè)備驅(qū)動(dòng)程序 96125.2.1 字符設(shè)備相關(guān)數(shù)據(jù)結(jié)構(gòu) 96125.2.2 字符設(shè)備相關(guān)全局變量 96325.2.3 字符設(shè)備驅(qū)動(dòng)程序全局初始化 96325.2.4 為字符設(shè)備分配設(shè)備號(hào) 96425.2.5 注冊(cè)字符設(shè)備驅(qū)動(dòng)程序 96825.2.6 字符設(shè)備的操作方法 97125.2.7 用戶對(duì)字符設(shè)備驅(qū)動(dòng)程序的調(diào)用過程 97225.2.8 如何編寫字符設(shè)備驅(qū)動(dòng)程序 97425.2.9 關(guān)于TTY設(shè)備驅(qū)動(dòng)程序 97425.2.10 控制臺(tái)設(shè)備驅(qū)動(dòng)程序 97525.3 塊設(shè)備驅(qū)動(dòng)程序 98625.3.1 塊設(shè)備相關(guān)數(shù)據(jù)結(jié)構(gòu) 98625.3.2 塊設(shè)備相關(guān)宏定義 99725.3.3 塊設(shè)備相關(guān)全局變量 99925.3.4 塊設(shè)備驅(qū)動(dòng)程序全局初始化 100425.3.5 為塊設(shè)備分配主設(shè)備號(hào) 100625.3.6 注冊(cè)塊設(shè)備驅(qū)動(dòng)程序 100925.3.7 塊設(shè)備驅(qū)動(dòng)程序的操作方法 101725.3.8 調(diào)用塊設(shè)備驅(qū)動(dòng)程序過程 101725.3.9 I/O調(diào)度 103125.3.10 如何編寫塊設(shè)備驅(qū)動(dòng)程序 103225.4 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序 103325.4.1 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序概述 103325.4.2 網(wǎng)絡(luò)設(shè)備相關(guān)數(shù)據(jù)結(jié)構(gòu) 103425.4.3 網(wǎng)絡(luò)設(shè)備相關(guān)宏定義 104425.4.4 網(wǎng)絡(luò)設(shè)備相關(guān)全局變量 104525.4.5 創(chuàng)建net_device結(jié)構(gòu) 104625.4.6 注冊(cè)網(wǎng)絡(luò)設(shè)備 104825.4.7 網(wǎng)絡(luò)設(shè)備的操作方法 105025.4.8 網(wǎng)絡(luò)設(shè)備中斷服務(wù)程序 105125.4.9 如何編寫網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序 105125.5 PCI設(shè)備驅(qū)動(dòng)程序 105225.5.1 PCI接口定義 105325.5.2 PCI設(shè)備的三個(gè)地址空間 105725.5.3 PCI總線仲裁 105825.5.4 PCI設(shè)備編號(hào) 105925.5.5 如何訪問PCI配置空間 105925.5.6 如何配置PCI設(shè)備 106125.5.7 PCI驅(qū)動(dòng)程序相關(guān)數(shù)據(jù)結(jié)構(gòu) 106225.5.8 PCI驅(qū)動(dòng)程序相關(guān)宏定義 106825.5.9 PCI驅(qū)動(dòng)程序相關(guān)全局變量 106825.5.10 Bootloader和內(nèi)核做的事 106925.5.11 PCI驅(qū)動(dòng)程序注冊(cè) 106925.5.12 PCI驅(qū)動(dòng)程序接口函數(shù) 107125.5.13 如何編寫PCI驅(qū)動(dòng)程序 1072第4部分 Linux內(nèi)核開發(fā)高級(jí)指南第26章 Linux系統(tǒng)參數(shù)設(shè)置 1076從本章開始的后續(xù)章節(jié)主要講解了比較高級(jí)或者平時(shí)較少關(guān)注的Linux內(nèi)核方面的知識(shí),本章講解了Linux中的4種系統(tǒng)參數(shù)格式和設(shè)置方法。26.1 旗語(yǔ)系統(tǒng)參數(shù)(tag) 107626.1.1 與旗語(yǔ)系統(tǒng)參數(shù)相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 107626.1.2 旗語(yǔ)系統(tǒng)參數(shù)說明 108226.1.3 旗語(yǔ)系統(tǒng)參數(shù)設(shè)置方法 108426.2 前期命令行設(shè)置的系統(tǒng)參數(shù) 108426.2.1 與前期命令行系統(tǒng)參數(shù)相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 108426.2.2 前期命令行設(shè)置的系統(tǒng)參數(shù)說明 108526.2.3 前期命令行系統(tǒng)參數(shù)設(shè)置方法 108626.2.4 如何添加自己的前期命令行設(shè)置的系統(tǒng)參數(shù) 108726.3 老式命令行系統(tǒng)參數(shù) 108726.3.1 與老式命令行系統(tǒng)參數(shù)相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 108726.3.2 老式命令行設(shè)置的系統(tǒng)參數(shù)說明 108826.3.3 老式命令行設(shè)置的系統(tǒng)參數(shù)設(shè)置方法 108926.3.4 如何添加自己的老式命令行設(shè)置的系統(tǒng)參數(shù) 108926.4 命令行系統(tǒng)參數(shù) 108926.4.1 與命令行系統(tǒng)參數(shù)相關(guān)數(shù)據(jù)結(jié)構(gòu)和全局變量 108926.4.2 命令行設(shè)置的系統(tǒng)參數(shù)說明 109026.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) 109127.2 內(nèi)核剖析(Profiling) 109327.3 通過打印調(diào)試(printk) 109527.3.1 關(guān)于printk() 109527.3.2 內(nèi)核信息級(jí)別 109627.3.3 打印速度限制 109727.3.4 控制臺(tái)重定向 109827.4 使用proc文件系統(tǒng)調(diào)試 109827.5 oops消息 109827.6 通過跟蹤命令strace調(diào)試 109927.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)化 110429.2 根據(jù)CPU特性進(jìn)行優(yōu)化 110529.3 對(duì)內(nèi)核進(jìn)行裁減 110529.4 優(yōu)化系統(tǒng)內(nèi)存配置 110629.5 優(yōu)化系統(tǒng)啟動(dòng)過程以縮減系統(tǒng)啟動(dòng)時(shí)間 110629.6 內(nèi)存映射優(yōu)化 110729.7 工具軟件輔助優(yōu)化 1107第30章 Linux定時(shí)器 1109本章介紹了Linux內(nèi)核的軟件定時(shí)器。30.1 定時(shí)器相關(guān)數(shù)據(jù)結(jié)構(gòu) 110930.2 定時(shí)器相關(guān)宏定義 111130.3 定時(shí)器相關(guān)全局變量 111230.4 定時(shí)器和時(shí)鐘初始化 111330.5 獲取系統(tǒng)時(shí)間 111430.6 延遲函數(shù) 111530.7 與定時(shí)器相關(guān)系統(tǒng)調(diào)用 111530.8 使用定時(shí)器方法 1116第31章 雜項(xiàng) 1117本章介紹了PER_CPU變量以及Linux中的數(shù)據(jù)類型定義。31.1 per_cpu變量 111731.2 Linux中的數(shù)據(jù)類型定義 1118第32章 編譯鏈接文件說明 1119本章注釋了ARM處理器系統(tǒng)中Linux內(nèi)核的鏈接文件,以幫助讀者了解編譯出來(lái)的Linux內(nèi)核各區(qū)段在內(nèi)存中的存放位置。參考文獻(xiàn) 1125