第五章 搭建S3C6410 開發板的測試環境windows
開發板是開發和學習嵌入式技術的主要硬件設備,儘管能夠在PC上開發Linux驅動,而後從新編譯成ARM架構的Linux驅動模塊。但最終都是要在開發板上進行測試的。這主要是由於ARM架構的開發板可基於X86架構的PC在CPU指令以及二進制格式上都有所不一樣。並且若是Linux驅動須要訪問硬件,而且這些硬件很難在PC上進行模擬,那麼就要在帶有這些硬件的開發板上進行調試和測試。儘管開發板從技術上與咱們常常用的手機相似,但與手機不一樣的是在開發板上安裝嵌入式系統要比手機容易的多。並且通常開發板都有不少擴展的端口,能夠很容易開發定製的硬件,並與開發板連接。所以,開發板相對於手機來講,更適合對程序進行測試,尤爲適合對底層的Linux程序進行測試。近期因爲對開發板的好奇也本身小投資了點,對itop-4412進行了一段時間的探索,一樣爲三星公司是推出的處理器,不一樣開發板的區別主要在燒錄嵌入式系統的方式上。書中使用的是一款minicom,基於Linux的串口管理軟件,一直是應用筆記本安裝虛擬機進行實驗學習,對其不太瞭解,之後有機會使用一下,閱讀到燒寫Android系統這一小節時還有個小插曲,由於其開發板使用的是預裝的WinCE6.0,要燒寫成Android須要將原有的系統卸載掉,當說是得進入Eboot模式時,本身還得意的認爲書中出現了錯誤,其實否則Eboot和Uboot一樣是屬於bootloader引導程序,只不過一個是windows嵌入式,一個是Linux嵌入式而已,接下來的操做基本是對比式的學習,由於windows特有的圖形界面交互,跟Linux仍是有必定差異的,相對來講指令要少,而後一樣是配置有線網絡,這裏結合近期的學習多了一些感悟,由於這種有線網絡配置只能保存在內存中,一旦重啓開發板,其設置將消失,咱們能夠編寫一個腳本文件,將上面的命令放到腳本文件中,當開發板每次重啓後執行該腳本文件。通常開發板都提供了一個開機自動執行的腳本文件。能夠經過對其的修改保存,實現其功能。網絡
第6章 第一個Linux驅動程序:統計單詞個數架構
本章詳細介紹開發和測試Linux驅動程序的完整過程。Linux驅動和普通的Linux API 沒有本質的區別。只是是使用Linux驅動的方式與使用Linux API的方式不一樣而已。Linux驅動的工做和訪問方式是Linux的亮點之一,實際上是遵循Linux系統將一切皆文件的思想,將每個驅動都映射成一個文件。這些文件稱爲設備文件或驅動文件,都保存在/dev目錄中。這種設計理念使得與Linux驅動進行交互就像與普通文件進行交互同樣容易。因爲大多數Linux驅動都有與其對應的設備文件,所以與Linux驅動交換數據就變成了與設備文件交換數據。接下來對Linux驅動程序的編寫進行了初探,感受仍是一臉茫然,但也算小有收穫。首先,編寫一個基本的Linux驅動的通常步驟:1.創建Linux驅動的骨架(裝載和卸載Linux驅動),(module_init和module_exit宏指定),兩個函數的兩個宏的C程序文件也能夠看做是Linux驅動的骨架。2.註冊和註銷設備文件,任何一個Linux驅動都須要有一個設備文件,不然應用程序沒法與驅動程序交互。能夠分別使用misc_register和 misc_deregister函數建立和移除設備文件。3.指定與驅動相關的信息(modinfo命令獲取)。4.指定回調函數。5.編寫業務邏輯(核心部分)。6.編寫Makefile文件。7.編譯Linux驅動程序(能夠直接編譯進內核,也能夠做爲模塊單獨編譯)。8.安裝和卸載Linux驅動。(前五步是關於如何編寫Linux驅動程序的,後三步能夠是Linux驅動正常工做。後面相繼講了在各類平臺的測試,而其實本書的主題之一就是介紹如何將Android移植到不一樣的硬件上,那麼使用test_word_count在不一樣硬件平臺上運行實際上也是一種移植,只不過這種移植並非移植操做系統,而是移植應用程序。最簡單的應用程序移植就是將應用程序源代碼譯成可在不一樣目標平臺運行的二進制文件。若是恰巧這些平臺中都包含應用程序所使用的API,那麼直接在不一樣平臺編譯便可(有時候須要使用交叉編譯器),可是並非全部的API 在各個平臺都有,有的API可能名字變化了,有的API在某些平臺根本就沒實現。面對這樣的狀況,通常須要先移植這些API,而後再移植應用程序。應用程序移植在Android系統中也會常常發生,若是某些特殊的Android系統(基於ARM芯片)須要一些用C語言實現的Library或可執行程序,但Android平臺並無這些功能看,而其餘平臺(如Ubuntu Linux)有這樣的程序,徹底能夠修改並從新編譯成ARM平臺的目標文件放到Android系統中。函數
第7章 LED將爲我閃爍:控制發光二極管學習
這一章實際上是對上一章的一個應用擴展與深刻,實現了Linux驅動與硬件的直接交互,每個鏈接Linux的硬件在I/O內存中都會有映射首地址。在使用ioread32、iowrite32等函數讀寫I/O內存時須要指定這些首地址。移植Linux驅動有一條很是重要,就是在修改Linux驅動源碼時,應儘可能不修改Linux驅動的接口。測試