出版時間:2010-11 出版社:電子工業(yè)出版社 作者:祁德春 頁數(shù):241
Tag標(biāo)簽:無
前言
1.本書編寫目的剛參加工作從事嵌入式Linux軟件開發(fā),面臨的首要問題就是如何快速融入工作并承擔(dān)研發(fā)任務(wù),發(fā)現(xiàn)、分析、解決開發(fā)中出現(xiàn)的各種具體問題。萬事開頭難,千頭萬緒不知從何開始,作者剛參加工作時同樣疑惑。如果你也有同感的話,那么請你打開本書,它將帶你快速進入工作狀態(tài)。2.本書內(nèi)容本書共分9章。第1章簡單介紹嵌入式Linux的概念及特點;第2章以圖解方式詳細介紹如何搭建Linux開發(fā)服務(wù)器,以及如何解決搭建過程中可能出現(xiàn)的常見問題;第3章簡單地介紹Linux開發(fā)中主機和開發(fā)板上的常用命令并如何用它們來解決實際問題;第4章介紹如何搭建嵌入式Linux開發(fā)環(huán)境及解決在開發(fā)中遇到的常見問題;第5章舉例說明如何移植開源代碼及其注意事項;第6章介紹shell編程基礎(chǔ)知識;第7章用大量例子介紹如何進行網(wǎng)絡(luò)編程,如何解決網(wǎng)絡(luò)編程中的常見問題;第8章詳細闡述了Linux多線程編程以及如何實現(xiàn)多線程之間的同步和通信;第9章總結(jié)開發(fā)過程中出現(xiàn)的種種死機及其產(chǎn)生原因。后記中講述作者從事嵌入式Linux軟件開發(fā)的經(jīng)驗和教訓(xùn)。3.本書特色本書立足于實際研發(fā),本著幫助Linux新手快速入門的目的,摒棄大而全的寫法,以交流探討的方式,有針對性地講解開發(fā)過程中的常見問題、重點問題和難點問題。本書可以作為計算機、自動化、電子及相關(guān)專業(yè)學(xué)生的參考資料,尤其適合于初入職場從事嵌入式Linux開發(fā)的新手。
內(nèi)容概要
本書介紹了作者初入職場從事嵌入式Linux開發(fā),從不知所措到獨立承擔(dān)項目的過程中所遇到的種種問題,在簡要說明原理的同時,還配有完整的實例代碼,并對問題進行了詳細的分析和解答。書中第一部分簡要介紹嵌入式Linux開發(fā)基礎(chǔ),重點是第二部分,剖析了常見shell編程、socket編程、多線程編程及同步、多線程通信中的問題,以及常見死機問題等。 本書立足于實際研發(fā),適合于初入職場的軟件開發(fā)人員,準(zhǔn)備從事嵌入式Linux開發(fā)的人員,以及計算機、電子相關(guān)專業(yè)的學(xué)生閱讀。
書籍目錄
第1章 嵌入式Linux基礎(chǔ) 1.1 什么是嵌入式Linux 1.2 嵌入式Linux的特點 1.3 嵌入式Linux的應(yīng)用范圍 1.4 嵌入式Linux的開發(fā)模式 1.5 嵌入式Linux發(fā)展面臨的挑戰(zhàn) 1.6 嵌入式Linux的發(fā)展前景 1.7 嵌入式Linux應(yīng)用程序開發(fā)必備技能 第2章 搭建Linux開發(fā)服務(wù)器 2.1 Fedora概述 2.2 VMware workstation概述 2.3 Fedora5的安裝 2.4 配置linux服務(wù)器 2.4.1 怎樣開通常用網(wǎng)絡(luò)服務(wù) 2.4.2 ping不通Linux主機怎么辦 2.4.3 由telnet連不上Linux主機怎么辦 2.4.4 怎樣讓root用戶telnet到主機 2.4.5 怎樣配置Samba服務(wù)器——創(chuàng)建登錄用戶 2.4.6 怎樣配置Samba服務(wù)器 2.4.7 登錄主機提示找不到網(wǎng)絡(luò)路徑怎么辦 2.4.8 登錄主機提示指定的網(wǎng)絡(luò)名不再可用怎么辦 2.4.9 tftp下載主機文件超時怎么辦 2.4.10 NFS配置——開啟服務(wù)并添加共享文件夾 2.4.11 NFS配置——共享目錄不能被掛載怎么辦 2.4.12 怎樣修改File Browser風(fēng)格——顯示地址欄 2.4.13 怎樣修改Linux主機的屏幕分辨率 2.4.14 怎樣修改Linux主機的網(wǎng)絡(luò)接入方式 2.4.15 Fedora 5安裝完畢以后不能添加/刪除軟件怎么辦 2.4.16 Fedora 5不能在SCSI虛擬硬盤上安裝怎么辦 第3章 常用Linux命令介紹 3.1 常用命令介紹 3.1.1 文件管理命令 3.1.2 備份壓縮 3.1.3 磁盤管理和維護 3.1.4 系統(tǒng)管理和維護 3.1.5 文檔搜索和查找 3.1.6 網(wǎng)絡(luò)相關(guān) 3.2 常見問題探討 3.2.1 cp和scp拷貝丟失符號鏈接怎么辦 3.2.2 fgrep搜索時感覺很慢怎么辦 3.2.3 燒寫NAND Flash后文件系統(tǒng)校驗出錯怎么辦 3.2.4 怎樣在開發(fā)板上查看內(nèi)核版本和硬件平臺 3.2.5 怎樣查看/設(shè)置/刪除默認網(wǎng)關(guān) 3.2.6 設(shè)置默認網(wǎng)關(guān)顯示網(wǎng)絡(luò)不可達怎么辦 3.2.7 怎樣通過命令設(shè)置DNS地址 3.2.8 busybox命令date設(shè)置時間出錯怎么辦 3.2.9 busybox命令udhcpc不能設(shè)置IP地址怎么辦 3.2.10 busybox命令telnetd讓其他主機連接失敗怎么辦 3.2.11 怎樣在開發(fā)板上格式化U盤并創(chuàng)建文件系統(tǒng) 3.2.12 怎樣在開發(fā)板上掛載U盤 第4章 搭建嵌入式Linux開發(fā)環(huán)境 4.1 搭建嵌入式開發(fā)環(huán)境 4.1.1 搭建交叉編譯環(huán)境 4.1.2 編譯內(nèi)核 4.1.3 編譯標(biāo)準(zhǔn)函數(shù)庫 4.1.4 編譯bootloader 4.1.5 開發(fā)編譯應(yīng)用程序 4.1.6 在Linux上開啟tftp、nfs、ssh、telnet等服務(wù) 4.1.7 使用超級終端遠程登錄 4.1.8 構(gòu)建嵌入式Linux根文件系統(tǒng) 4.1.9 制作根文件系統(tǒng)鏡像 4.2 常見問題探討 4.2.1 了解Windows編程 4.2.2 不會寫驅(qū)動和u-boot怎么辦 4.2.3 不會寫makefile怎么辦 4.2.4 SecureCRT特別配置 4.2.5 Linux內(nèi)核配置時M不能修改怎么辦 4.2.6 開發(fā)板上/proc中沒有scsi文件夾怎么辦 4.2.7 開發(fā)板上/proc/bus/usb中沒有設(shè)備信息怎么辦 4.2.8 開發(fā)板上/sys為空怎么辦 4.2.9 開發(fā)板啟動時找不到init進程的原因 4.2.10 怎樣進行只讀文件系統(tǒng)調(diào)試 4.2.11 采用NFS調(diào)試時出現(xiàn)RPC錯誤的原因 4.2.12 燒寫jffs2鏡像之后重啟很慢的原因 4.2.13 無法找到"libstdc++.so.6"怎么辦 4.2.14 不能執(zhí)行二進制文件怎么辦 4.2.15 errno是否線程安全 4.2.16 注意bootloader傳給內(nèi)核的啟動參數(shù) 4.2.17 怎樣在內(nèi)核drivers目錄下添加模塊 4.2.18 怎樣實時監(jiān)測USB等hotplug設(shè)備 第5章 如何移植開源代碼 5.1 交叉編譯開源代碼 5.1.1 下載開源代碼 5.1.2 在host上運行程序 5.1.3 交叉編譯 5.2 在開發(fā)板上運行 5.3 開源代碼向工程中移植 5.4 常見問題探討 5.4.1 版本的選擇 5.4.2 執(zhí)行configure腳本失敗時怎么辦 5.4.3 鏈接以兩個下劃線開頭的函數(shù)顯示未定義怎么辦 5.4.4 某些源文件不能編譯時的解決辦法 5.4.5 交叉編譯的文件在開發(fā)板上的放置位置 5.4.6 在程序中調(diào)用交叉編譯的程序 5.4.7 移植的程序運行時寫文件失敗的原因 5.4.8 源碼移植時的注意事項 第6章 簡單shell編程 6.1 什么是shell 6.2 &命令 6.3 shell輸入與輸出——echo和管道(|) 6.3.1 echo 6.3.2 管道(|) 6.4 正則表達式 6.5 shell變量——本地變量、環(huán)境變量、位置變量參數(shù) 6.5.1 本地變量 6.5.2 環(huán)境變量 6.5.3 位置變量參數(shù) 6.6 引號的使用——雙引號、單引號、 反引號、反斜線 6.6.1 雙引號 6.6.2 單引號 6.6.3 反引號 6.6.4 反斜線 6.7 條件測試 6.7.1 文件狀態(tài)測試 6.7.2 邏輯操作符 6.7.3 字符串測試 6.7.4 數(shù)值測試 6.8 shell的流控制結(jié)構(gòu)——流控制和循環(huán) 6.8.1 流控制 6.8.2 循環(huán) 6.9 使用shell函數(shù) 6.10 shell編程實踐 6.11 常見問題 第7章 socket編程 7.1 常用函數(shù)介紹 7.2 編程實例 7.2.1 使用select實現(xiàn)超時連接 7.2.2 非阻塞數(shù)據(jù)收發(fā)操作 7.2.3 簡單服務(wù)器 7.2.4 加入組播 7.2.5 組播服務(wù)器 7.3 常見問題探討 7.3.1 怎樣實現(xiàn)內(nèi)核級PPP撥號程序 7.3.2 PPPOE撥號一直不成功怎么辦 7.3.3 PPPOE撥號成功獲取IP地址但不能上網(wǎng)怎么辦 7.3.4 給ppp0設(shè)置了默認網(wǎng)關(guān)仍不能上網(wǎng)怎么辦 7.3.5 通過system函數(shù)啟動PPPOE撥號死機怎么辦 7.3.6 非法關(guān)機導(dǎo)致pppoe下次連接失敗怎么辦 7.3.7 PPPOE撥號上網(wǎng)是否要加包過濾 7.3.8 IP地址設(shè)置成功后仍ping不通同網(wǎng)段內(nèi)其他主機怎么辦 7.3.9 錯誤SIOCADDRT: Network is unreachable的原因分析 7.3.10 修改socket接收緩沖區(qū)大小的方法 7.3.11 修改內(nèi)核中IGMP支持版本的方法 7.3.12 錯誤Too many open files in system的原因分析 7.3.13 接收HTTP或RTSP應(yīng)答數(shù)據(jù)時的注意事項 7.3.14 注意select設(shè)置超時的方式 7.3.15 域名解析花費時間長的解決辦法 7.3.16 非阻塞socket無限等待的解決辦法 7.3.17 用setsockopt+SO_SNDTIMEO實現(xiàn)連接超時 7.3.18 調(diào)用setsockopt時出現(xiàn)錯誤No such device的解決辦法 7.3.19 斷電重啟以后連接服務(wù)器失敗的解決辦法 第8章 多線程編程 8.1 線程管理函數(shù) 8.2 線程屬性操作函數(shù) 8.3 實例講解 8.3.1 創(chuàng)建線程并查看其屬性 8.3.2 pthread_exit的錯誤用法 8.3.3 自封裝函數(shù)create_thread 8.4 多線程同步 8.4.1 互斥鎖(mutex)常用函數(shù)介紹 8.4.2互斥鎖的兩種初始化方式及應(yīng)用 8.4.3 信號量(semaphore)常用函數(shù)介紹 8.4.4 二值信號量應(yīng)用——互斥鎖 8.4.5 多值信號量應(yīng)用——停車場問題 8.5 多線程通信 8.5.1 通過全局變量通信 8.5.2 系統(tǒng)V消息隊列 8.5.3 POSIX消息隊列 8.5.4 自封裝消息隊列 8.6 常見問題探討 8.6.1 使用多線程的好處 8.6.2 程序運行到pthread相關(guān)函數(shù)時阻塞怎么辦 8.6.3 線程被取消后用ps還能看到其PID怎么辦 8.6.4 在嵌入式Linux上是否使用實時優(yōu)先級 8.6.5 嵌入式Linux線程分離屬性的設(shè)置 8.6.6 用kill系統(tǒng)調(diào)用終止線程的隱患 8.6.7 用pthread_kill終止線程 第9章 常見死機問題探討 9.1 常見死機及原因分析 9.1.1 打印函數(shù)輸出格式或者參數(shù)順序不對 9.1.2 除數(shù)為0 9.1.3 應(yīng)用程序鏈接不匹配的庫文件或驅(qū)動 9.1.4 操作未初始化的指針 9.1.5 操作空指針 9.1.6 系統(tǒng)內(nèi)存耗盡 9.1.7 重復(fù)釋放同一塊內(nèi)存 9.1.8 free釋放棧內(nèi)存 9.1.9 malloc/new返回的地址被修改 9.1.10 內(nèi)存越界 9.1.11 分配過大的棧內(nèi)存 9.1.12 分配過大的靜態(tài)內(nèi)存 9.1.13 遞歸調(diào)用導(dǎo)致棧內(nèi)存不夠 9.1.14 操作“野指針” 9.1.15 未調(diào)用模塊的初始化函數(shù) 9.1.16 混用名稱和功能相近的函數(shù) 9.1.17 平臺問題 9.1.18 平臺編譯規(guī)則引起的死機 9.1.19 程序編譯不完全 9.2 死機調(diào)試 9.2.1 gdb遠程調(diào)試 9.2.2 抓取死機core文件 9.3 死循環(huán) 9.3.1 無符號數(shù)和0比較作為循環(huán)條件 9.3.2 循環(huán)退出條件不當(dāng) 9.3.3 鏈表操作不當(dāng) 9.4 關(guān)鍵任務(wù)死鎖或阻塞 9.4.1 關(guān)鍵任務(wù)調(diào)用阻塞函數(shù) 9.4.2 嵌套調(diào)用mutex或semaphore 9.4.3 操作消息隊列時無限等待 附錄 后記
章節(jié)摘錄
插圖:目前嵌入式Linux正在蓬勃發(fā)展,并已形成了很大的市場,除了一些傳統(tǒng)的Linux公司,一些專門開發(fā)嵌入式Linux的公司也應(yīng)運而生。但是就技術(shù)而言,嵌入式Linux離市場的真正需求還有一定的距離,需要在以下幾個方面加強開發(fā):第一,實時性擴充。實時性是嵌入式操作系統(tǒng)的基本要求,由于Linux還不是一個真正的實時操作系統(tǒng),內(nèi)核不支持事件優(yōu)先級和搶占實時特性,所以在開發(fā)嵌入式Linux的過程中,首要問題是擴展Linux的實時性。對Linux實時性的擴展可以從兩方面進行:向外擴展和向上擴展。向外擴展即從范圍上擴展,讓實時系統(tǒng)支持的范圍更廣,支持的設(shè)備更多。目前的開發(fā)所面向的設(shè)備僅限于較簡單的有實時要求的串/并口數(shù)據(jù)采集、浮點數(shù)據(jù)計算等,而像實時網(wǎng)絡(luò)這樣的高級應(yīng)用還需進一步發(fā)展。向上擴展是擴充Linux內(nèi)核,從功能上擴充Linux的實時處理和控制系統(tǒng)。如嵌入式系統(tǒng)RTLinux,它的基本原理是將Linux本身的任務(wù)及Linux內(nèi)核本身作為一個優(yōu)先級最低的任務(wù),而實時任務(wù)作為優(yōu)先級最高的任務(wù),即在實時任務(wù)存在的情況下運行實時任務(wù),否則就運行Linux本身的任務(wù)。
后記
在寫這本書的時候,心情是很矛盾的,說實話,自身的資歷與實力還不足以出書,但這四年的軟件開發(fā)實踐,從一個連C語言幾乎不懂的軟件開發(fā)人員成長到今天能夠獨立承擔(dān)項目,自覺經(jīng)歷的風(fēng)風(fēng)雨雨可以與大家一起交流分享。第一,堅定信念,相信自己。如果你一無所長,任何人都可以打擊你,都可以看不起你,但請你看得起自己。你可以什么都不會,也可以什么都不懂,但必須有一顆積極進取,永不服輸?shù)男?。別人連操作系統(tǒng)、驅(qū)動程序、標(biāo)準(zhǔn)庫函數(shù)都寫好了,我們沒理由連應(yīng)用程序都開發(fā)不好。一切的問題都不是問題,辦法總比問題多,問題就是答案,是問題就能被解決!第二,端正心態(tài),從零開始。學(xué)校說明不了問題,學(xué)歷代表不了水平。工作是人生的又一個新起點,那就讓自己從零開始吧。項目需要你做什么你就做什么,不要管在什么平臺開發(fā),不要管要你開發(fā)什么東西,也不要管你開發(fā)的東西有沒有“技術(shù)含量”。
編輯推薦
《初入職場之嵌入式Linux開發(fā)快速上手》:當(dāng)年初入職場無數(shù)冥思苦想九章經(jīng)驗總結(jié)諸多收獲感想
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載
初入職場之嵌入式Linux開發(fā)快速上手 PDF格式下載