出版時(shí)間:2009-11 出版社:人民郵電出版社 作者:哈利南 頁數(shù):341 譯者:華清遠(yuǎn)見嵌入式培訓(xùn)中心
Tag標(biāo)簽:無
前言
如果早些看到Christopher Hallinan的這本書,我就不會(huì)在開發(fā)過程中走那么多彎路了!人類無限膨脹的欲望促進(jìn)了嵌入式的發(fā)展。回想10年前,你能想象手機(jī)可以照相嗎?你能想象汽車?yán)飼?huì)安裝全球定位系統(tǒng)嗎?今天看來,這些都是多么普通的功能,因?yàn)橹灰{(diào)用一些函數(shù)(壓縮算法)就可以實(shí)現(xiàn)。但是你想過嗎?如果沒有操作系統(tǒng)的支持,很多復(fù)雜的功能是無法完成的。要從事嵌入式開發(fā),掌握操作系統(tǒng)的知識(shí)是必要的本領(lǐng)之一。一個(gè)不可忽視的事實(shí)是電子產(chǎn)品的性能不斷提升,而價(jià)格卻在下降。開發(fā)商越來越重視成本。免費(fèi)、自由的Linux無疑是一個(gè)強(qiáng)有力的競(jìng)爭(zhēng)者。憑借優(yōu)異的特性和良好的發(fā)展趨勢(shì),Linux輕而易舉地坐上了嵌入式操作系統(tǒng)的頭把交椅。嵌入式系統(tǒng)并不見得有多么高深,但是因?yàn)榍度胧较到y(tǒng)本身涉及了很多學(xué)科,致使很多初學(xué)者時(shí)常深感迷茫,不知道從何入手,即便是編譯環(huán)境都很難搭建,更不用說調(diào)試和部署了。幸運(yùn)的是,Christopher Hallinan的這部著作為我們學(xué)習(xí)嵌入式系統(tǒng)提供了捷徑。請(qǐng)?jiān)试S我在此使用“捷徑”一詞,因?yàn)槲以趧倓偺と肭度胧絃inux大門時(shí),其中的很多概念也一度讓我覺得神秘而困惑。雖然網(wǎng)絡(luò)搜索功能很強(qiáng)大,但是就如同迷失在一棵大樹的樹葉之間,你很難摸索到樹干,找到正確的方向,而Christopher Hallinan的這本書就是指引我們前進(jìn)的“樹干”。更可貴的是,本書每章后都提供了相關(guān)參考資料,你會(huì)很容易地查找到需要了解的內(nèi)容。在如此短的篇幅內(nèi)闡述嵌入式Linux的方方面面是不可能的。但本書作者卻讓你在一本書中輕松地掌握了嵌入式開發(fā)的脈絡(luò),這是難能可貴的。本書內(nèi)容廣泛而又不乏深度,嵌入式L,inux開發(fā)的初學(xué)者和提高者都能從中獲得巨大收獲。
內(nèi)容概要
《嵌入式Linux基礎(chǔ)教程》是嵌入式Linux的經(jīng)典教程,介紹了引導(dǎo)裝入程序、系統(tǒng)初始化、文件系統(tǒng)、閃存和內(nèi)核、應(yīng)用程序調(diào)試技巧等,還講述了構(gòu)建Linux系統(tǒng)的工作原理,用于驅(qū)動(dòng)不同體系結(jié)構(gòu)的配置,Linux內(nèi)核源碼樹的特性,如何根據(jù)需求配制內(nèi)核運(yùn)行時(shí)的行為,如何擴(kuò)展系統(tǒng)功能等內(nèi)容。更重要的是,《嵌入式Linux基礎(chǔ)教程》闡述了如何修改系統(tǒng)使之滿足讀者自己的需求,使讀者能從中學(xué)習(xí)一些嵌入式工程中非常有用的提示和技巧?! 肚度胧絃inux基礎(chǔ)教程》適合Linux程序員閱讀,也可作為高等院校相關(guān)專業(yè)師生的參考讀物。
作者簡(jiǎn)介
作者:(美國)哈利南(Christopher Hallinan) 譯者:華清遠(yuǎn)見嵌入式培訓(xùn)中心Christopher Hallinan,著名嵌入式Linux技術(shù)專家。Monta Vistata件公司現(xiàn)場(chǎng)應(yīng)用工程師,曾任3Com公司工程總監(jiān)。他有25年以上網(wǎng)絡(luò)和通信產(chǎn)品的軟硬件開發(fā)經(jīng)驗(yàn),曾擔(dān)任Linux咨詢師,提供定制Linux主板接口、設(shè)備驅(qū)動(dòng)程序和引導(dǎo)裝入程序等方面的解決方案。譯者簡(jiǎn)介:華清遠(yuǎn)見嵌入式培訓(xùn)中心(http://www.farsight.com.cn)是享有盛譽(yù)的嵌入式高端培訓(xùn)企業(yè),目前已成為ARM、Altera、Atmel、Microsoft、Symbian等全球知名嵌入式企業(yè)授權(quán)培訓(xùn)中心。每年為Samsung、NEC、Philips、Motorola等世界500強(qiáng)企業(yè)提供嵌入式技術(shù)企業(yè)培訓(xùn)服務(wù),同時(shí)也致力于推廣與普及嵌入式技術(shù)。數(shù)萬名技術(shù)人員由此受益。
書籍目錄
第1章 引言 11.1 為什么使用Linux 11.2 嵌入式Linux現(xiàn)狀 21.3 開源和GPL 21.4 標(biāo)準(zhǔn)和相關(guān)機(jī)構(gòu) 31.4.1 LSB 31.4.2 OSDL 31.5 小結(jié) 4參考資源 4第2章 嵌入式初體驗(yàn) 52.1 需要嵌入式系統(tǒng)嗎 52.2 嵌入式系統(tǒng)剖析 62.2.1 典型嵌入式Linux系統(tǒng)設(shè)置 72.2.2 啟動(dòng)目標(biāo)板 82.2.3 啟動(dòng)內(nèi)核 92.2.4 內(nèi)核初始化概述 102.2.5 第一個(gè)用戶空間進(jìn)程:init 112.3 存儲(chǔ)的思考 122.3.1 閃存 122.3.2 NAND閃存 132.3.3 閃存的用途 142.3.4 閃存文件系統(tǒng) 142.3.5 存儲(chǔ)器空間 152.3.6 運(yùn)行上下文 162.3.7 進(jìn)程中的虛擬內(nèi)存 172.3.8 交叉開發(fā)環(huán)境 192.4 嵌入式Linux的發(fā)行版 202.4.1 Linux商業(yè)發(fā)行版 212.4.2 Linux自定義發(fā)行版 212.5 小結(jié) 21參考資源 22第3章 處理器基礎(chǔ) 233.1 單機(jī)處理器 233.1.1 IBM 970FX 243.1.2 Intel Pentium M 243.1.3 Freescale MPC7448 253.1.4 配套芯片組 253.2 集成化處理器:片上系統(tǒng) 273.2.1 PowerPC 273.2.2 AMCC PowerPC 273.2.3 Freescale PowerPC 303.2.4 MIPS 333.2.5 Broadcom MIPS 333.2.6 AMD MIPS 343.2.7 其他類型的MIPS 353.2.8 ARM 353.2.9 TI ARM 353.2.10 Freescale ARM 373.2.11 Intel ARM XScale 373.2.12 其他ARM 383.2.13 其他體系結(jié)構(gòu) 383.3 硬件平臺(tái) 383.3.1 CompactPCI 383.3.2 ATCA 393.4 小結(jié) 39參考資源 40第4章 Linux內(nèi)核——不同視角 414.1 背景知識(shí) 414.1.1 內(nèi)核的版本 424.1.2 內(nèi)核源碼庫 434.2 Linux內(nèi)核構(gòu)造 444.2.1 頂層資源目錄 444.2.2 編譯內(nèi)核 454.2.3 嚴(yán)格意義上的內(nèi)核:vmlinux 464.2.4 內(nèi)核映像組件 474.2.5 子目錄結(jié)構(gòu) 504.3 內(nèi)核構(gòu)建系統(tǒng) 504.3.1 .config文件 514.3.2 配置編輯器 524.3.3 makefile的目標(biāo) 554.3.4 內(nèi)核配置 584.3.5 自定義配置選項(xiàng) 594.3.6 內(nèi)核makefile 624.3.7 內(nèi)核文檔 624.4 獲取Linux內(nèi)核 634.5 小結(jié) 64參考資源 64第5章 內(nèi)核初始化 655.1 合成內(nèi)核映像:piggy及其他 655.1.1 Image目標(biāo)文件 675.1.2 體系結(jié)構(gòu)相關(guān)的目標(biāo)文件 685.1.3 第二階段引導(dǎo)裝入程序 695.1.4 引導(dǎo)信息 695.2 初始化控制流 725.2.1 內(nèi)核入口點(diǎn):head.o 735.2.2 內(nèi)核啟動(dòng):main.c 745.2.3 體系結(jié)構(gòu)設(shè)置 755.3 內(nèi)核命令行處理 755.4 子系統(tǒng)初始化 805.5 init線程 825.5.1 通過initcall初始化 835.5.2 引導(dǎo)的最后步驟 845.6 小結(jié) 85參考資源 85第6章 系統(tǒng)初始化 866.1 根文件系統(tǒng) 866.1.1 FHS 876.1.2 文件系統(tǒng)布局 876.1.3 最小文件系統(tǒng) 886.1.4 根文件系統(tǒng)帶來的挑戰(zhàn) 896.1.5 試錯(cuò)法 906.1.6 自動(dòng)化文件系統(tǒng)構(gòu)建工具 906.2 內(nèi)核的最后引導(dǎo)過程 906.2.1 用戶空間下第一個(gè)程序 916.2.2 解決依賴 926.2.3 定制初始化進(jìn)程 926.3 init進(jìn)程 926.3.1 inittab 956.3.2 Web服務(wù)器啟動(dòng)腳本示例 966.4 初始RAM磁盤 976.4.1 初始RAM磁盤的目的 986.4.2 使用initrd引導(dǎo) 986.4.3 引導(dǎo)裝入程序?qū)τ趇nitrd的支持 986.4.4 initrd的奧妙所在:linuxrc文件 1006.4.5 initrd探究 1006.4.6 構(gòu)建initrd映像文件 1016.5 使用initramfs 1026.6 關(guān)機(jī) 1036.7 小結(jié) 103參考資源 104第7章 引導(dǎo)裝入程序 1057.1 引導(dǎo)裝入程序的作用 1057.2 引導(dǎo)裝入程序的挑戰(zhàn) 1067.2.1 DRAM控制器 1067.2.2 閃存與RAM 1067.2.3 映像的復(fù)雜性 1077.2.4 執(zhí)行上下文 1087.3 通用的引導(dǎo)裝入程序:Das U-Boot 1097.3.1 執(zhí)行上下文 1097.3.2 U-Boot命令集 1117.3.3 網(wǎng)絡(luò)操作 1117.3.4 存儲(chǔ)子系統(tǒng) 1137.3.5 從磁盤啟動(dòng):U-Boot 1137.4 移植U-Boot 1147.4.1 為EP405開發(fā)板移植U-Boot 1147.4.2 U-Boot的makefile配置目標(biāo) 1157.4.3 EP405處理器初始化 1167.4.4 特定開發(fā)板的初始化 1177.4.5 移植概要 1207.4.6 U-Boot映像格式 1207.5 其他引導(dǎo)裝入程序 1227.5.1 Lilo 1227.5.2 GRUB 1237.5.3 其他引導(dǎo)裝入程序 1247.6 小結(jié) 124參考資源 124第8章 設(shè)備驅(qū)動(dòng)程序基礎(chǔ) 1268.1 設(shè)備驅(qū)動(dòng)程序基本概念 1268.1.1 可加載模塊 1278.1.2 設(shè)備驅(qū)動(dòng)程序的體系結(jié)構(gòu) 1278.1.3 最小設(shè)備驅(qū)動(dòng)程序示例 1288.1.4 模塊構(gòu)建的基礎(chǔ)設(shè)施 1298.1.5 安裝設(shè)備驅(qū)動(dòng)程序 1318.1.6 加載設(shè)備驅(qū)動(dòng)程序模塊 1328.2 模塊實(shí)用程序 1338.2.1 insmod 1338.2.2 模塊參數(shù) 1338.2.3 lsmod 1348.2.4 modprobe 1358.2.5 depmod 1368.2.6 rmmod 1368.2.7 modinfo 1378.3 驅(qū)動(dòng)程序方法 1378.3.1 驅(qū)動(dòng)程序文件系統(tǒng)操作 1388.3.2 設(shè)備節(jié)點(diǎn)與mknod 1408.4 匯總 1418.5 設(shè)備驅(qū)動(dòng)程序與GPL 1438.6 小結(jié) 143參考資源 144第9章 文件系統(tǒng) 1459.1 Linux文件系統(tǒng)的概念 1469.2 ext2文件系統(tǒng) 1479.2.1 掛載文件系統(tǒng) 1489.2.2 文件系統(tǒng)完整性檢查 1499.3 ext3文件系統(tǒng) 1509.4 ReiserFS文件系統(tǒng) 1529.5 JFFS2文件系統(tǒng) 1539.6 cramfs文件系統(tǒng) 1559.7 NFS文件系統(tǒng) 1569.8 偽文件系統(tǒng) 1609.8.1 proc文件系統(tǒng) 1609.8.2 sysfs文件系統(tǒng) 1629.9 其他文件系統(tǒng) 1649.10 構(gòu)建簡(jiǎn)單的文件系統(tǒng) 1659.11 小結(jié) 166參考資源 166第10章 MTD子系統(tǒng) 16810.1 啟用MTD服務(wù) 16810.2 MTD基礎(chǔ)知識(shí) 17010.3 MTD分區(qū) 17210.3.1 Redboot分區(qū)表 17310.3.2 內(nèi)核命令行分區(qū) 17610.3.3 映射驅(qū)動(dòng)程序 17710.3.4 閃存芯片驅(qū)動(dòng)程序 17810.3.5 特定開發(fā)板的初始化 17910.4 MTD實(shí)用程序 18010.5 小結(jié) 184參考資源 184第11章 BusyBox 18611.1 BusyBox簡(jiǎn)介 18611.2 BusyBox配置 18711.3 BusyBox操作 18911.3.1 BusyBox之init 19111.3.2 rcS初始化腳本示例 19311.3.3 在目標(biāo)平臺(tái)安裝BusyBox 19311.3.4 BusyBox命令 19511.4 小結(jié) 196參考資源 196第12章 嵌入式開發(fā)環(huán)境 19712.1 交叉開發(fā)環(huán)境 19712.2 主機(jī)系統(tǒng)需求 20012.3 為目標(biāo)板提供服務(wù) 20112.3.1 TFTP服務(wù)器 20112.3.2 BOOTP/DHCP服務(wù)器 20212.3.3 NFS服務(wù)器 20412.3.4 使用NFS為目標(biāo)板掛載根文件系統(tǒng) 20512.3.5 U-Boot NFS根掛載示例 20612.4 小結(jié) 208參考資源 208第13章 開發(fā)工具 20913.1 GDB 20913.1.1 調(diào)試核心轉(zhuǎn)儲(chǔ) 21013.1.2 調(diào)用GDB 21113.1.3 GDB調(diào)試會(huì)話 21313.2 DDD 21413.3 cbrowser/cscope 21613.4 追蹤和程序分析工具 21713.4.1 strace 21713.4.2 strace的變體 22013.4.3 ltrace 22113.4.4 ps 22213.4.5 top 22413.4.6 mtrace 22513.4.7 dmalloc 22613.4.8 內(nèi)核oops 22813.5 二進(jìn)制實(shí)用程序 23013.5.1 readelf 23013.5.2 使用readelf檢查調(diào)試信息 23213.5.3 objdump 23313.5.4 objcopy 23413.6 其他二進(jìn)制實(shí)用程序 23413.6.1 strip 23413.6.2 addr2line 23513.6.3 strings 23513.6.4 ldd 23513.6.5 nm 23613.6.6 prelink 23613.7 小結(jié) 237參考資源 237第14章 內(nèi)核調(diào)試技術(shù) 23814.1 內(nèi)核調(diào)試的難點(diǎn) 23814.2 使用KGDB調(diào)試內(nèi)核 23914.2.1 KGDB內(nèi)核配置 24014.2.2 支持KGDB的內(nèi)核啟動(dòng) 24114.2.3 有用的內(nèi)核斷點(diǎn) 24314.3 Linux內(nèi)核的調(diào)試 24414.3.1 gdb遠(yuǎn)程串口協(xié)議 24414.3.2 調(diào)試優(yōu)化后的內(nèi)核代碼 24714.3.3 gdb用戶定義命令 25114.3.4 有用的內(nèi)核gdb宏 25214.3.5 調(diào)試可加載模塊 25814.3.6 printk調(diào)試 26214.3.7 Magic SysReq鍵 26314.4 硬件輔助調(diào)試 26314.4.1 使用JTAG探測(cè)器對(duì)閃存編程 26514.4.2 用JTAG探測(cè)器進(jìn)行調(diào)試 26614.5 無法啟動(dòng)時(shí) 26814.5.1 早期串口調(diào)試輸出 26914.5.2 轉(zhuǎn)儲(chǔ)printk日志緩沖區(qū) 27014.5.3 KGDB捕捉崩潰 27114.6 小結(jié) 272參考資源 272第15章 調(diào)試嵌入式Linux應(yīng)用程序 27415.1 目標(biāo)機(jī)調(diào)試 27415.2 遠(yuǎn)程(交叉)調(diào)試 27415.3 使用共享庫進(jìn)行調(diào)試 27815.4 多任務(wù)調(diào)試 28215.4.1 多進(jìn)程的調(diào)試 28215.4.2 多線程應(yīng)用程序的調(diào)試 28415.4.3 引導(dǎo)裝入程序/閃存代碼的調(diào)試 28615.5 遠(yuǎn)程調(diào)試的附加選項(xiàng) 28715.5.1 串行端口調(diào)試 28715.5.2 綁定到正在運(yùn)行的進(jìn)程 28715.6 小結(jié) 288參考資源 288第16章 移植Linux 28916.1 Linux源代碼的組織 28916.2 為開發(fā)板定制Linux 29116.2.1 前提和假設(shè) 29116.2.2 定制內(nèi)核初始化 29216.2.3 靜態(tài)內(nèi)核命令行 29416.3 平臺(tái)初始化 29516.3.1 早期變量訪問 29816.3.2 開發(fā)板信息結(jié)構(gòu) 29916.3.3 機(jī)器相關(guān)的調(diào)用 30116.4 匯總 30216.5 小結(jié) 304參考資源 304第17章 Linux與實(shí)時(shí) 30517.1 什么是實(shí)時(shí) 30517.1.1 軟實(shí)時(shí) 30517.1.2 硬實(shí)時(shí) 30617.1.3 Linux 調(diào)度 30617.1.4 中斷延遲 30617.2 內(nèi)核搶占 30717.2.1 搶占的缺陷 30717.2.2 搶占模型 30817.2.3 SMP內(nèi)核 30917.2.4 搶占延遲源 31017.3 實(shí)時(shí)內(nèi)核補(bǔ)丁 31017.3.1 實(shí)時(shí)的特性 31117.3.2 O(1)調(diào)度器 31317.3.3 創(chuàng)建實(shí)時(shí)進(jìn)程 31317.3.4 臨界區(qū)管理 31417.4 調(diào)試實(shí)時(shí)內(nèi)核 31417.4.1 軟鎖檢測(cè) 31417.4.2 搶占調(diào)試 31517.4.3 調(diào)試喚醒時(shí)間 31517.4.4 喚醒延遲歷史 31517.4.5 中斷響應(yīng)時(shí)間 31617.4.6 中斷響應(yīng)歷史 31617.4.7 延遲跟蹤 31717.4.8 調(diào)試死鎖環(huán)境 31817.4.9 鎖模式的運(yùn)行時(shí)控制權(quán) 31917.5 小結(jié) 319參考資源 319附錄A 可配置的U-Boot命令 320附錄B BusyBox命令 322附錄C SDRAM接口的注意事項(xiàng) 328附錄D 開源項(xiàng)目資源 334附錄E BDI-2000配置文件示例 336
章節(jié)摘錄
插圖:Linux內(nèi)核依靠硬件內(nèi)存管理單元的優(yōu)勢(shì)實(shí)現(xiàn)了支持虛擬內(nèi)存的操作系統(tǒng)。虛擬內(nèi)存技術(shù)能夠帶來的最大好處是,可以更加有效地利用物理內(nèi)存,并給用戶提供遠(yuǎn)遠(yuǎn)大于實(shí)際物理內(nèi)存的更大的可用地址空間。另一個(gè)好處是,內(nèi)核可以為分配給某個(gè)任務(wù)或進(jìn)程的地址空間設(shè)置訪問權(quán)限,以阻止一個(gè)進(jìn)程由于誤操作而非法訪問其他進(jìn)程或整個(gè)操作系統(tǒng)的地址和資源。讓我們來看看它是如何工作的。對(duì)虛擬內(nèi)存系統(tǒng)整體性的介紹已經(jīng)超出了本書的范圍①,在這里我們將按照嵌入式系統(tǒng)開發(fā)者在實(shí)際工作中所接觸的順序,來逐一介紹虛擬內(nèi)存的相關(guān)知識(shí)。2.3.6運(yùn)行上下文在Linux啟動(dòng)運(yùn)行的最初階段,必須要做的一項(xiàng)工作,就是要配置好處理器的內(nèi)存管理單元并初始化與之配套的數(shù)據(jù)結(jié)構(gòu),以支持虛擬地址到物理地址的轉(zhuǎn)換。當(dāng)這一步完成之后,內(nèi)核就運(yùn)行在它自己的虛擬地址空間中了。在最新的版本中,內(nèi)核開發(fā)人員規(guī)定的內(nèi)核虛擬地址默認(rèn)為OxC0000000。在大多數(shù)體系結(jié)構(gòu)中,這個(gè)地址被設(shè)置成可配置參數(shù)②。如果我們看一下內(nèi)核符號(hào)表,將會(huì)發(fā)現(xiàn)所有的內(nèi)核符號(hào)都以0xCOxxxxxx來編址。由此可見,當(dāng)內(nèi)核在內(nèi)核空間執(zhí)行代碼時(shí),處理器的IP指針都將指向這個(gè)地址范圍中。在Linux中,根據(jù)指定線程③的運(yùn)行環(huán)境,我們可以把它分為兩個(gè)獨(dú)立的運(yùn)行上下文。當(dāng)線程完全運(yùn)行在內(nèi)核空間時(shí),我們稱之為內(nèi)核上下文,而應(yīng)用程序則運(yùn)行在用戶空間上下文。
媒體關(guān)注與評(píng)論
“這本書很令我振奮,它為那些想在嵌入式系統(tǒng)中使用Linux的開發(fā)人員提供了極好的學(xué)習(xí)路線指導(dǎo)。本書內(nèi)容簡(jiǎn)潔、準(zhǔn)確,組織合理,Christopher的知識(shí)和見解貫穿全書,你不僅能得到很多信息和幫助,也能享受到閱讀的樂趣?!薄 狝rnold Robbins,著名Linux專家“本書涵蓋了嵌入式Linux開發(fā)的方方面面……強(qiáng)烈推薦每一位嵌入式Linux開發(fā)人員閱讀?!薄 狶inuxQuestions.org
編輯推薦
《嵌入式Linux基礎(chǔ)教程》:廣泛的硬件支持、高效穩(wěn)定的內(nèi)核、開源共享的軟件、優(yōu)秀的開發(fā)工具、完善的網(wǎng)絡(luò)通信和文件管理機(jī)制等特點(diǎn),使嵌入式Linux獲得了廣泛應(yīng)用,已成為嵌入式開發(fā)的主流平臺(tái)。《嵌入式Linux基礎(chǔ)教程》是嵌入式Linux領(lǐng)域名著。全面深入而又簡(jiǎn)明地闡述了構(gòu)建嵌入式LirIUX系統(tǒng)的精髓。書中不僅剖析了嵌入式Linux系統(tǒng),而且描述了處理器、內(nèi)核、引導(dǎo)裝入程序、設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)等關(guān)鍵組件。介紹了嵌入式LirlUX系統(tǒng)的開發(fā)工具和調(diào)試技術(shù)。書中作者多年積累總結(jié)的嵌入式Linux開發(fā)技巧和提示,無論對(duì)初學(xué)者還是有經(jīng)驗(yàn)的開發(fā)人員,都彌足珍貴。譯者特別提供了《嵌入式Linux基礎(chǔ)教程》內(nèi)容的答疑服務(wù),網(wǎng)址為http://www.farsight.com.cn/FarsightBBS/irldex.a(chǎn)spo嵌入式Linux權(quán)威著作Amazon全五星評(píng)價(jià)全面剖析嵌入式Linux開發(fā),揭示大量技術(shù)內(nèi)幕
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載