《深度探索linux操作係統:係統構建和原理解析》
前 言
第1章 準備基本環境 1
1.1 安裝virtualbox 1
1.2 創建虛擬計算機 2
1.3 安裝linux係統 2
1.4 使用root用戶 5
1.5 啓用自動登錄 5
1.6 掛載實驗分區 6
1.7 安裝ssh服務器 6
1.8 更改網絡模式 7
1.9 安裝增強模式 8
1.10 使用xephyr 8
第2章 工具鏈 10
2.1 編譯過程 10
2.1.1 預編譯 12
2.1.2 編譯 14
2.1.3 匯編 17
2.1.4 鏈接 31
2.2 構建工具鏈 39
.2.2.1 gnu工具鏈組成 40
2.2.2 構建工具鏈的過程 40
2.2.3 準備工作 43
2.2.4 構建二進製工具 45
2.2.5 編譯freestanding的交叉編譯器 46
2.2.6 安裝內核頭文件 49
2.2.7 編譯目標係統的c庫 50
2.2.8 構建完整的交叉編譯器 52
2.2.9 定義工具鏈相關的環境變量 54
2.2.10 封裝“交叉”pkg-config 54
2.2.11 關於使用libtool鏈接庫的討論 56
2.2.12 啓動代碼 57
第3章 構建內核 62
3.1 內核映像的組成 62
3.1.1 一級推進係統——setup.bin 63
3.1.2 二級推進係統——內核非壓縮部分 65
3.1.3 有效載荷——vmlinux 65
3.1.4 映像的格式 66
3.2 內核映像的構建過程 68
3.2.1 kbuild簡介 68
3.2.2 構建過程概述 71
3.2.3 vmlinux的構建過程 71
3.2.4 vmlinux.bin的構建過程 75
3.2.5 setup.bin的構建過程 80
3.2.6 bzimage的組閤過程 81
3.2.7 內核映像構建過程總結 82
3.3 配置內核 86
3.3.1 交叉編譯內核設置 86
3.3.2 基本內核配置 87
3.3.3 配置處理器 88
3.3.4 配置內核支持模塊 90
3.3.5 配置硬盤控製器驅動 91
3.3.6 配置文件係統 96
3.3.7 配置內核支持elf文件格式 97
3.4 構建基本根文件係統 99
3.4.1 根文件係統的基本目錄結構 99
3.4.2 安裝c庫 100
3.4.3 安裝shell 101
3.4.4 安裝根文件係統到目標係統 102
第4章 構建initramfs 104
4.1 為什麼需要initramfs 104
4.2 initramfs原理探討 105
4.2.1 掛載rootfs 106
4.2.2 解壓initramfs到rootfs 110
4.2.3 掛載並切換到真正的根目錄 116
4.3 配置內核支持initramfs 117
4.4 構建基本的initramfs 118
4.5 將硬盤驅動編譯為模塊 121
4.5.1 配置devtmpfs 121
4.5.2 將硬盤控製器驅動配置為模塊 126
4.6 自動加載硬盤控製器驅動 130
4.6.1 內核嚮用戶空間發送事件 131
4.6.2 udev加載驅動和建立設備節點 136
4.6.3 處理冷插拔設備 139
4.6.4 編譯安裝udev 141
4.6.5 配置內核支持netlink 142
4.6.6 配置內核支持inotify 143
4.6.7 安裝modules.alias.bin文件 144
4.6.8 啓動udevd和模擬熱插拔 146
4.7 掛載並切換到根文件係統 147
4.7.1 掛載根文件係統 147
4.7.2 切換到根文件係統 149
第5章 從內核空間到用戶空間 154
5.1 linux操作係統加載 154
5.1.1 grub映像構成 155
5.1.2 安裝grub 160
5.1.3 grub啓動過程 165
5.1.4 加載內核和initramfs 170
5.2 解壓內核 181
5.2.1 移動內核映像 182
5.2.2 解壓 186
5.2.3 重定位 187
5.3 內核初始化 190
5.3.1 初始化虛擬內存 190
5.3.2 初始化進程0 201
5.3.3 創建進程1 206
5.4 進程加載 209
5.4.1 加載可執行程序 211
5.4.2 進程的投入運行 223
5.4.3 按需載入指令和數據 234
5.4.4 加載動態鏈接器 243
5.4.5 加載動態庫 246
5.4.6 重定位動態庫 250
5.4.7 重定位可執行程序 268
5.4.8 重定位動態鏈接器 271
5.4.9 段relro 274
第6章 構建根文件係統 278
6.1 初始根文件係統 278
6.2 以讀寫模式重新掛載文件係統 280
6.3 配置內核支持網絡 282
6.3.1 配置內核支持tcp/ip協議 282
6.3.2 配置內核支持網卡 283
6.4 啓動udev 285
6.5 安裝網絡配置工具並配置網絡 285
6.6 安裝並配置ssh服務 287
6.7 安裝procps 291
6.8 安裝x窗口係統 291
6.8.1 安裝m4宏定義 292
6.8.2 安裝x協議和擴展 292
6.8.3 安裝x相關庫和工具 294
6.8.4 安裝x服務器 296
6.8.5 安裝gpu的2d驅動 297
6.8.6 安裝x的輸入設備驅動 297
6.8.7 運行x服務器 300
6.8.8 一個簡單的x程序 302
6.8.9 配置內核支持drm 303
6.9 安裝圖形庫 307
6.9.1 安裝glib和libffi 307
6.9.2 安裝atk 307
6.9.3 安裝libpng 308
6.9.4 安裝gdkpixbuf 308
6.9.5 安裝fontconfig 308
6.9.6 安裝cairo 311
6.9.7 安裝pango 311
6.9.8 安裝libxi 311
6.9.9 安裝gtk 312
6.9.10 安裝gtk圖形庫的善後工作 312
6.9.11 一個簡單的gtk程序 313
6.10 安裝字體 315
第7章 構建桌麵環境 317
7.1 窗口管理器 317
7.1.1 基本原理 318
7.1.2 創建編譯腳本 325
7.1.3 主要數據結構 328
7.1.4 初始化 331
7.1.5 為窗口“落戶” 334
7.1.6 構建窗口裝飾 337
7.1.7 繪製裝飾窗口 341
7.1.8 配置窗口 343
7.1.9 移動窗口 345
7.1.10 改變窗口大小 348
7.1.11 切換窗口 348
7.1.12 最大化/最小化/關閉窗口 351
7.1.13 管理已存在的窗口 354
7.2 任務條和桌麵 356
7.2.1 標識任務條的身份 357
7.2.2 更新任務條上的任務項 358
7.2.3 激活任務 359
7.2.4 高亮顯示當前活動任務 360
7.2.5 顯示桌麵 361
7.2.6 桌麵 362
第8章 linux圖形原理探討 364
8.1 渲染和顯示 364
8.1.1 渲染 365
8.1.2 顯示 365
8.2 顯存 366
8.2.1 動態顯存技術 367
8.2.2 buffer object 370
8.3 2d渲染 375
8.3.1 創建前緩衝 377
8.3.2 gpu渲染 381
8.3.3 cpu渲染 386
8.4 3d渲染 388
8.4.1 創建幀緩衝 390
8.4.2 渲染pipleline 399
8.4.3 交換前緩衝和後緩衝 414
8.5 wayland 421
· · · · · · (
收起)
評分
☆☆☆☆☆
前麵寫的還可以,最後麵幾章居然是講圖形界麵.
評分
☆☆☆☆☆
不是我的領域,有點看不懂。T.T,等沉澱一下,以後再看。
評分
☆☆☆☆☆
不是我的領域,有點看不懂。T.T,等沉澱一下,以後再看。
評分
☆☆☆☆☆
從加電到init啓動的講解尤為精彩。
評分
☆☆☆☆☆
作者挺負責的,見到豆瓣閱讀狀態改變,主動發來瞭勘誤的圖片。整本書藉著構築Linux係統順便講解瞭部分原理,收獲還是挺多的呢,感覺結閤《程序員的自我修養》讀起來風味更佳。作者的觀點我非常同意,從構建Linux係統來學習Linux無疑是一條非常有效率的瞭解Linux整體結構的方式而不是盲人摸象,隻知道大象的局部而對整體一抹黑
評分
☆☆☆☆☆
把我发现及综合楼主的贴一下, 有一些不是错误, 只是由于我这边的硬件条件与书中不一致(如书中用了virtualbox,而我这边用kvm等,,其中不同硬件的驱动会与书中有不少出入,,,基本整书都翻过, 我照着书做到chapter6中的前面部分(也就是把SSHD搭完我就收手了, 毕竟后期折腾windowX与...
評分
☆☆☆☆☆
把我发现及综合楼主的贴一下, 有一些不是错误, 只是由于我这边的硬件条件与书中不一致(如书中用了virtualbox,而我这边用kvm等,,其中不同硬件的驱动会与书中有不少出入,,,基本整书都翻过, 我照着书做到chapter6中的前面部分(也就是把SSHD搭完我就收手了, 毕竟后期折腾windowX与...
評分
☆☆☆☆☆
这本书是我能够坚持基本从头看到尾的一本书(构建桌面环境那章大致看了看,基本是跳过去的),所以随便罗嗦几句。 和深入理解Linux内核那类书比较,这本书理论高度没有那些书高。但是这本书的突出之处就是实践,相比只是通过理论学习,按照这本书操作,别有一番领悟。 看完后有...
評分
☆☆☆☆☆
在我学习实践lfs的时候, 发现了这本书, 开始的时候以为和lfs没有太大区别, 无非是lfs的翻译与实践. 在我实践lfs的过程中, 发现无论是lfs还是clfs, 需要安装的工具链相关软件非常之多, 而且没有说明为什么一定要这么做. 之后我开始结合本书来重新审视lfs, 发现书里所写的lfs操...
評分
☆☆☆☆☆
当年看见我标记阅读之后作者很热心地发豆油提醒我,感谢作者,应一位豆瓣用户的请求,在此分享 49页的安装内核头文件这一小节中: ”make ARCH=i386 INSTALL_HDR_PATH=$SYSROOT/usr/headers_install“, 请在"headers_install" 前加一个空格。 印刷错误的图:http://pan.baidu.c...