注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)操作系統(tǒng)ARM Linux內(nèi)核源碼剖析

ARM Linux內(nèi)核源碼剖析

ARM Linux內(nèi)核源碼剖析

定 價(jià):¥99.00

作 者: (韓)尹錫訓(xùn) 等著; 崔范松 譯
出版社: 人民郵電出版社
叢編項(xiàng): 圖靈程序設(shè)計(jì)叢書
標(biāo) 簽: LINUX 操作系統(tǒng)/系統(tǒng)開發(fā) 計(jì)算機(jī)/網(wǎng)絡(luò)

ISBN: 9787115359100 出版時(shí)間: 2014-07-01 包裝: 平裝
開本: 16開 頁數(shù): 518 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  《圖靈程序設(shè)計(jì)叢書:ARM Linux內(nèi)核源碼剖析》是多位作者在3年Liunx內(nèi)核分析經(jīng)驗(yàn)和龐大資料基礎(chǔ)上寫成的,收錄了其他同類書未曾講解的內(nèi)容并進(jìn)行逐行分析,一掃當(dāng)前市場(chǎng)中其他理論書帶給讀者的郁悶。書中詳細(xì)的代碼分析與大量插圖能夠使讀者對(duì)Linux內(nèi)核及ARM獲得正確認(rèn)識(shí),自然而然習(xí)得如何有效分析定期發(fā)布的Linux內(nèi)核?!秷D靈程序設(shè)計(jì)叢書:ARM Linux內(nèi)核源碼剖析》適合想從Linux內(nèi)核啟動(dòng)開始透徹分析全部啟動(dòng)過程的讀者,因Linux代碼量龐大而束手無策的人、想要了解Linux實(shí)際運(yùn)行過程的人、渴求OS實(shí)操理論的人,本書必將成為他們不可或缺的參考書。

作者簡(jiǎn)介

  尹錫訓(xùn),所在公司的主營(yíng)業(yè)務(wù)是在Linux、安卓系統(tǒng)上制作無線終端,擔(dān)任工程師已有3年。一直用C語言、Python、Java開發(fā)各種產(chǎn)品。最近把對(duì)未來的期待、展望與精力集中到Linux內(nèi)核以及創(chuàng)業(yè)上,并不斷為之努力。崔范松(譯者),吉林人,畢業(yè)于長(zhǎng)春工業(yè)大學(xué)法學(xué)專業(yè)。大量接觸并翻譯過各類計(jì)算機(jī)圖書及相關(guān)資料,并從事過游戲策劃及軟件測(cè)試工作。喜歡散步、旅游等戶外運(yùn)動(dòng),夢(mèng)想成為一名自由職業(yè)者。

圖書目錄

第一部分 ARM Linux內(nèi)核——分析內(nèi)核前需要做的準(zhǔn)備
第1章 內(nèi)核介紹及2.6版和3.2版之間的差異
1.1 內(nèi)核的誕生、作用以及內(nèi)部結(jié)構(gòu)
1.1.1 Linus創(chuàng)造的Linux
1.1.2 由多種子系統(tǒng)集成運(yùn)行的單內(nèi)核
1.1.3 全世界最著名的通用操作系統(tǒng)
1.2 內(nèi)核2.6版和3.2版之間的差異
第2章 內(nèi)核構(gòu)建系統(tǒng)
2.1 內(nèi)核初始化
2.2 內(nèi)核配置
2.3 內(nèi)核構(gòu)建
2.4 內(nèi)核安裝
第3章 了解ARM處理器
3.1 處理器概要和特征
3.2 處理器架構(gòu)與核心
3.3 處理器命名規(guī)則
3.4 處理器內(nèi)部結(jié)構(gòu)
3.5 處理器模式和寄存器
3.6 處理器異常
3.7 硬件擴(kuò)展功能
3.7.1 緩存
3.7.2 內(nèi)存管理裝置
3.7.3 協(xié)處理器
第4章 構(gòu)建分析環(huán)境
4.1 下載并安裝Linux源內(nèi)核
4.1.1 下載源內(nèi)核
4.1.2 安裝源內(nèi)核
4.2 安裝ctags+cscope
4.2.1 用ctags制作源代碼標(biāo)簽
4.2.2 制作cscope標(biāo)簽數(shù)據(jù)庫
4.3 vim插件下載及環(huán)境設(shè)置
4.3.1 下載vim插件
4.3.2 vim+plugin的環(huán)境結(jié)構(gòu)
4.3.3 vim環(huán)境設(shè)置
4.4 查看源碼分析環(huán)境工具
第二部分 內(nèi)核的啟動(dòng)——start_kernel調(diào)用方法
第5章 準(zhǔn)備解壓內(nèi)核
5.1 進(jìn)入啟動(dòng)加載后結(jié)束首個(gè)啟動(dòng)——start標(biāo)簽
5.2 BSS系統(tǒng)域初始化——not_relocated標(biāo)簽
5.3 激活緩存——cache_on標(biāo)簽
5.4 頁目錄項(xiàng)初始化——__setup_mmu標(biāo)簽
5.5 指令緩存激活及緩存策略適用——__common_mmu_cache_on標(biāo)簽
第6章 從壓縮的內(nèi)核zImage還原內(nèi)核映像
6.1 解壓內(nèi)核并避免覆寫——wont_overwrite、decompress_kernel標(biāo)簽
6.2 調(diào)用已解壓內(nèi)核——call_kernel標(biāo)簽
6.3 緩存清理及清除——cache_clean_flush標(biāo)簽
6.4 緩存禁用——cache_off標(biāo)簽
第7章 調(diào)用start_kernel
7.1 初始化指向——stext標(biāo)簽
7.2 處理器信息搜尋——__look_processor_type
7.2.1 __lookup_processor_type標(biāo)簽
7.2.2 __proc_info_begin和__proc_info_end中保存的信息
7.2.3 在MMU禁用狀態(tài)下將虛擬地址轉(zhuǎn)換為物理地址
7.2.4 查找proc_info_list結(jié)構(gòu)體并比較處理器信息
7.3 搜尋我的機(jī)型——__lookup_machine_type
7.3.1 __lookup_machine_type標(biāo)簽
7.3.2 保存在__arch_info_begin和__arch_info_end中的machine_desc信息及訪問路徑
7.3.3 查找machine_desc結(jié)構(gòu)體并比較機(jī)器信息
7.4 源自啟動(dòng)加載項(xiàng)的atags——__vet_atags標(biāo)簽
7.5 對(duì)虛擬內(nèi)存進(jìn)行基礎(chǔ)創(chuàng)建——__create_page_tables標(biāo)簽
7.6 設(shè)置核心(core)——v6_setup標(biāo)簽
7.7 打開MMU并使用虛擬地址——__enable_mmu/__turn_mmu_on標(biāo)簽
7.8 跳轉(zhuǎn)至start_kernel——__mmap_switched 標(biāo)簽
第三部分 內(nèi)核的執(zhí)行——內(nèi)核的起始與結(jié)束位置
第8章 start_setup_processor_id~lock_kernel
8.1 smp_setup_processor_id、lockdep_init、debug_objects_early_init
8.1.1 smp_setup_processor_id
8.1.2 lockdep_init
8.1.3 debug_objects_early_init
8.2 棧溢出感應(yīng)——__boot_init_stack_canary
8.3 初始化提供進(jìn)程集成方法的cgroup——__cgroup_init_early
8.3.1 cgroupfs_root和cgroup的關(guān)聯(lián)初始化——init_cgroup_root
8.3.2 初始化子系統(tǒng)——cgroup_init_subsys
8.4 禁用IRQ
8.5 early_boot_irqs_off、early_init_irq_lock_class
8.6 大內(nèi)核鎖——lock_kernel
第9章 注冊(cè)針對(duì)時(shí)鐘事件的處理器
9.1 函數(shù)的聲明和定義——tick_init
9.2 注冊(cè)處理事件的處理器——_clockevents_register_notifier
9.2.1 為clockevents_lock添加自旋鎖
9.2.2 clockevents_chain生成原理
9.2.3 在clockevents_chain中注冊(cè)tick_notifier的方法
9.2.4 對(duì)clockevents_lock解除自旋鎖的原理
第10章 在CPU位圖中注冊(cè)當(dāng)前運(yùn)行CPU/初始化HIGHMEM管理
10.1 在包含熱插拔信息的位圖上添加執(zhí)行init_task的CPU——boot_cpu_init
10.2 管理高端內(nèi)存——page_address_init
第11章 整體指向——setup_arch
第12章 unwind_init~early_trap_init
12.1 棧回溯——unwind_init
12.2 求出包含機(jī)器信息的machine_desc結(jié)構(gòu)體——setup_machine
12.3 處理ATAG信息——setup_arch
12.4 處理啟動(dòng)參數(shù)——parse_cmdline
12.5 構(gòu)建源代碼樹——request_standard_resources
12.6 初始化cpu possible位圖——smp_init_cpus
12.7 用棧指定各ARM異常模式——cpu_init
12.8 初始化以處理異?!猠arly_trap_init
12.9 查看中斷處理器函數(shù)
12.9.1 調(diào)用IRQ處理器——asm_do_IRQ
12.9.2 返回中斷之前——ret_to_user標(biāo)簽
第13章 設(shè)置處理器—— setup_processor
13.1 查看setup_processor結(jié)構(gòu)
13.2 查找CPU ID——read_cpuid_id
13.3 查找處理器信息——lookup_processor_type
13.4 查找處理器結(jié)構(gòu)信息——cpu_architecture
13.5 查找處理器緩存類型_cacheid_init
13.6 調(diào)用處理器初始化函數(shù)——cpu_proc_init
第14章 準(zhǔn)備內(nèi)存分頁—— paging_init
14.1 查看paging_init的整體結(jié)構(gòu)
14.2 設(shè)置內(nèi)存類型表——build_mem_type_table
14.3 檢驗(yàn)內(nèi)存信息——sanity_check_meminfo
14.4 準(zhǔn)備頁表——prepare_page_table
14.4.1 prepare_page_table
14.4.2 Linux的分頁結(jié)構(gòu)
14.4.3 求出頁目錄項(xiàng)
14.4.4 pmd_clear
14.5 設(shè)備區(qū)域映射準(zhǔn)備——devicemaps_init
14.6 準(zhǔn)備使用高端內(nèi)存——kmap_init
14.7 初始化零頁
14.7.1 分配內(nèi)存——__alloc_bootmem_nopanic
14.7.2 在指定節(jié)點(diǎn)使用fallback分配內(nèi)存——alloc_bootmem_core
14.7.3 將虛擬地址變換為page結(jié)構(gòu)體——virt_to_page
14.8 保持?jǐn)?shù)據(jù)緩存一致性——flush_dcache_page
第15章 在啟動(dòng)時(shí)初始化內(nèi)存分配器
15.1 bootmem函數(shù)流和數(shù)據(jù)結(jié)構(gòu)
15.2 查看bootmem_init結(jié)構(gòu)
15.3 查找虛擬內(nèi)存盤位置——check_initrd
15.4 將節(jié)點(diǎn)的BANK信息反映到頁目錄——bootmem_init_node
15.4.1 map_memory_bank
15.4.2 bootmem_bootmap_pages
15.4.3 find_bootmap_pfn
15.4.4 node_set_online
15.4.5 NODE_DATA宏
15.4.6 init_bootmem_node
15.4.7 free_bootmem_node
15.4.8 reserve_bootmem_node
15.5 排除0號(hào)節(jié)點(diǎn)——reserve_node_zero
15.6 排除虛擬內(nèi)存盤節(jié)點(diǎn)——bootmem_reserve_initrd
15.7 設(shè)置為無可用頁——bootmem_free_node
15.8 初始化free_area區(qū)域
15.8.1 free_area結(jié)構(gòu)體
15.8.2 free_area_init_node
15.8.3 free_area_init_core
15.8.4 init_currently_empty_zone
15.8.5 memmap_init
第16章 mm_init_owner~preempt_disable
16.1 設(shè)置內(nèi)存擁有者——mm_init_owner
16.2 保存命令行——setup_command_line
16.3 初始化per-cpu數(shù)據(jù)——setup_per_cpu_areas
16.4 求CPU個(gè)數(shù)——setup_nr_cpu_ids
16.5 注冊(cè)SMP上的啟動(dòng)進(jìn)程——smp_prepare_boot_cpu
16.6 初始化數(shù)據(jù)結(jié)構(gòu)以使用調(diào)度程序——sched_init
16.6.1 為集合調(diào)度中使用的task_group的sched_entity結(jié)構(gòu)體和runqueue結(jié)構(gòu)體分配內(nèi)存
16.6.2 初始化root_domain、rt_bandwidth、task_group相關(guān)數(shù)據(jù)結(jié)構(gòu)
16.6.3 初始化系統(tǒng)上所有可用CPU的就緒隊(duì)列
16.6.4 初始化當(dāng)前任務(wù)的調(diào)度相關(guān)值與注冊(cè)針對(duì)負(fù)載均衡的中斷處理器
16.7 允許內(nèi)核搶占和阻止搶占——preempt_enable/preempt_disable
第17章 構(gòu)建借用內(nèi)存的后臺(tái)
17.1 在build_all_zonelists中操作的一些數(shù)據(jù)結(jié)構(gòu)
17.2 查看build_all_zonelists結(jié)構(gòu)
17.3 決定zone的列表方式——set_zonelist_order
17.4 構(gòu)建備用列表和備用位圖——__build_all_zonelists
17.4.1 build_zonelists
17.4.2 build_zonelist_in_node_order
17.4.3 build_zonelists_in_zone_order
17.4.4 build_thisnode_zonelists
17.4.5 build_zonelists_cache
17.5 輸出備用列表信息——mminit_verify_zonelist
17.6 指定處理頁分配請(qǐng)求的節(jié)點(diǎn)——cpuset_init_current_mems_allowed
17.7 求空頁數(shù)——nr_free_pagecache_pages
17.8 頁移動(dòng)性
第18章 page_alloc_init~pidhash_init
18.1 處理用于熱插拔CPU的頁——page_alloc_init
18.2 處理console參數(shù)——parse_early_param
18.3 處理特殊參數(shù)——parse_args
18.4 確認(rèn)中斷處理是否激活——irqs_disable
18.5 內(nèi)核異常列表定義——sort_main_extable
18.6 初始化RCU機(jī)制——rcu_init
18.7 準(zhǔn)備使用IRQ——early_irq_init
18.8 初始化中斷——init_IRQ
18.9 構(gòu)建迅速搜尋進(jìn)程信息的結(jié)構(gòu)——pidhash_init
第19章 init_timers~page_cgroup _init
19.1 初始化計(jì)時(shí)器——init_timers
19.1.1 timers_cpu_notify
19.1.2 register_cpu_notifier
19.1.3 open_softirq
19.2 初始化高分辨率計(jì)時(shí)器——hrtimers_init
19.3 注冊(cè)softirq的回調(diào)函數(shù)——softirq_init
19.4 設(shè)置xtime——timekeeping_init
19.5 初始化硬件計(jì)時(shí)器——time_init
19.6 初始化時(shí)鐘時(shí)間——sched_clock_init
19.7 激活CPU的中斷處理——local_irq_enable
19.8 檢測(cè)用作根文件系統(tǒng)的init虛擬內(nèi)存盤
19.9 初始化以分配動(dòng)態(tài)內(nèi)存——vmalloc_init
19.10 預(yù)先初始化目錄項(xiàng)和索引節(jié)點(diǎn)緩存——vfs_caches_init_early
19.11 初始化cpuset子系統(tǒng)——cpuset_init_early
19.12 初始化內(nèi)存子系統(tǒng)——page_cgroup_init
第20章 終止bootmem分配器并替換為伙伴系統(tǒng)
20.1 mem_init函數(shù)的調(diào)用關(guān)系及其與數(shù)據(jù)結(jié)構(gòu)的相互關(guān)系
20.2 查看mem_init結(jié)構(gòu)
20.3 記錄到不存在的內(nèi)存位圖——free_unused_memmap_node
20.4 移交至普通空白頁伙伴系統(tǒng)——free_all_bootmem_node
20.4.1 register_page_bootmem_info_node
20.4.2 free_all_bootmem_core
20.4.3 __free_pages_bootmem
20.4.4 __free_pages
20.4.5 free_hot_cold_page
20.4.6 __free_pages_ok
20.5 移交到高端內(nèi)存空白頁伙伴系統(tǒng)——free_area
第21章 初始化以支持CPU熱插拔
21.1 初始化cpu_hotplug成員變量——cpu_hotplug_init
21.2 CPU的聯(lián)機(jī)→脫機(jī)轉(zhuǎn)換處理
第22章 激活slab內(nèi)存分配器——kmem_cache_init
22.1 slab分配器的概念及結(jié)構(gòu)體
22.2 slab分配器的重要結(jié)構(gòu)體——kmem_cache和kmem_list3
22.3 查看kmem_cache_init結(jié)構(gòu)
22.4 初始化initkmem_list3〔〕、cache_cache、nodelist〔〕
22.5 連接kmem_list3數(shù)組并決定cache壓縮時(shí)間——set_up_list3s
22.6 求出用于cache擴(kuò)展/壓縮的頁順序——cache_estimate
22.7 malloc_sizes和cache_names
22.8 生成cache——kmem_cache_create
22.8.1 kmem_cache_zalloc
22.8.2 calculate_slab_order
22.8.3 setup_cpu_cache
22.8.4 enable_cpucache
22.9 生成arraycache_init,kmem_list3 cache
22.10 用kmalloc函數(shù)分配的內(nèi)存替代靜態(tài)分配的內(nèi)存
第23章 kmem_trace_init~security_init
23.1 生成ID alloccator緩存——idr_init_cache
23.2 初始化pageset——setup_per_cpu_pageset
23.3 指定交叉節(jié)點(diǎn)——numa_policy_init
23.4 結(jié)束計(jì)時(shí)器初始化——late_time_init
23.5 測(cè)定BogoMIPS——calibrate_delay
23.6 制作位圖以分配進(jìn)程識(shí)別符(ID)——pidmap_init
23.7 初始化優(yōu)先樹的數(shù)據(jù)結(jié)構(gòu)——prio_tree_init
23.8 生成anon_vma slab緩存——anon_vma_init
23.9 為對(duì)象的每個(gè)用戶賦予資格——cred_init
23.10 初始化數(shù)據(jù)結(jié)構(gòu)以使用fork函數(shù)——fork_init
23.11 初始化生成進(jìn)程的緩存——proc_caches_init
23.12 初始化緩沖緩存——buffer_init
23.13 準(zhǔn)備密鑰——key_init
第24章 初始化VFS中使用的多種緩存——vfs_cache_init
第25章 radix_tree_init~ftrace_init
25.1 基數(shù)樹相關(guān)數(shù)據(jù)結(jié)構(gòu)初始化——radix_tree_init
25.2 準(zhǔn)備使用信號(hào)——signals_init
25.3 注冊(cè)并掛載proc文件系統(tǒng)——proc_root_init
25.4 注冊(cè)未能初始化的子系統(tǒng)——cgroup_init
25.5 重置top_cpuset并注冊(cè)cpuset文件系統(tǒng)——cpuset_init
25.6 初始化任務(wù)統(tǒng)計(jì)信息接口——delayacct_init
25.7 為管理延遲信息做準(zhǔn)備——delayacct_init
25.7.1 延遲審計(jì)
25.7.2 delayacct_init
25.7.3 task_delay_info結(jié)構(gòu)體和delayacct_tsk_init
25.8 檢查寫緩沖一致性——check_bugs
第26章 同步內(nèi)存與后備存儲(chǔ)——page write back
26.1 頁回寫機(jī)制
26.2 激活頁回寫——pdflush_init
26.3 pdflush線程
26.4 指定頁回寫函數(shù)
26.5 周期性頁回寫和強(qiáng)制性頁回寫回調(diào)函數(shù)調(diào)用方法
26.5.1 周期性頁回寫函數(shù)——wb_kupdate
26.5.2 強(qiáng)制性頁回寫函數(shù)——background_writeout
26.6 初始化周期性頁回寫
第27章 查看啟動(dòng)內(nèi)核的最終函數(shù)結(jié)構(gòu)——rest_init
第28章 生成執(zhí)行函數(shù)的內(nèi)核線程——kernel_thread
28.1 查看kernel_thread結(jié)構(gòu)
28.2 生成處理器的網(wǎng)關(guān)——do_fork
28.3 復(fù)制父進(jìn)程——copy_process
第29章 喚醒新生成的任務(wù)
29.1 查看wake_up_new_task結(jié)構(gòu)
29.2 獲取任務(wù)的就緒隊(duì)列——task_rq_lock
29.3 改善任務(wù)的優(yōu)先順序——effective_prio
第30章 準(zhǔn)備使用內(nèi)核
30.1 將當(dāng)前進(jìn)程轉(zhuǎn)移到其他CPU——sched_init_smp
30.2 結(jié)束系統(tǒng)整體初始化——do_basic_setup
30.2.1 生成執(zhí)行rcu_sched_grace_period的線程——rcu_init_sched
30.2.2 生成events工作隊(duì)列——init_workqueues
30.2.3 初始化cpuset子系統(tǒng)的top_cpuset——cpuset_init_smp
30.2.4 生成khelper工作隊(duì)列——usermodehelper_init
30.2.5 初始化Linux的設(shè)備模型——driver_init
30.2.6 在proc文件系統(tǒng)注冊(cè)irq信息——init_irq_proc
30.2.7 調(diào)用內(nèi)核未知子系統(tǒng)——do_initcalls
30.3 為初始化之后的操作做準(zhǔn)備——init_post
第31章 內(nèi)核線程守護(hù)進(jìn)程
31.1 內(nèi)核線程守護(hù)進(jìn)程——kthreadd
31.2 忽略信號(hào)——ignore_signals
31.3 設(shè)置nice值——set_user_nice
31.4 搜索執(zhí)行任務(wù)的CPU——set_cpus_allowed_prt
31.5 搜索包含列表的實(shí)際結(jié)構(gòu)體位置——list_entry
31.6 生成內(nèi)核線程——create_kthread
第32章 find_task_by_pid_ns~cpu_idle
32.1 用PID搜索任務(wù)——find_task_by_pid_ns
32.2 解除BKL——unlock_kernel
32.3 將調(diào)度類變更為idle——init_idle_bootup_task
32.4 RCU機(jī)制激活完成通知——rcu_scheduler_starting
32.5 激活內(nèi)核搶占——preempt_enable_no_resched
32.6 執(zhí)行進(jìn)程調(diào)度表——schedule
32.7 Linux啟動(dòng)萬里長(zhǎng)征的終點(diǎn)——cpu_idle
附錄
附錄A 匯編語言、gas關(guān)鍵詞總結(jié)
附錄B 內(nèi)核分析常見API
附錄C 淺談ext2文件系統(tǒng)
附錄D Linux線程模型
附錄E 鏈接器腳本文件結(jié)構(gòu)
后記
索引

本目錄推薦

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