本實驗采用華清遠見A8實驗箱--FS210,搭載三星生產的ARM-A8內核的單核處理器S5PV210。這款處理器曾用于制造三星TAB平板,性能比較強大。本課程實驗旨在通過對實驗箱的使用掌握基本的ARM-A系列芯片系統的嵌入式開發流程。包括四個實驗: - 裸機開發環境及linux操作系統下開發環境搭建
- 應用程序如何燒寫到開發板中以及如何在線調試
- 裸機下實現開發板與PC機的串口通信
4、帶操作系統下的嵌入式開發原理初識 通過四次試驗,使同學們掌握嵌入式開發流程,理解有無操作系統在開發嵌入式系統過程中的區別,為以后深入學習嵌入式打下入門基礎。 最后附有實驗報告要求。 實驗1:裸機開發環境及linux操作系統下開發環境搭建 及Linux常用命令及vi, gdb的使用 實驗目的: (1)掌握嵌入式開發環境搭建的基本流程 - 掌握linux系統安裝過程,熟悉基本的Linux指令操作
- 理解交叉編譯的意義
實驗原理: 嵌入式軟件開發不同于PC機的軟件開發,由于不同硬件平臺的指令系統不同,要想在個人計算機上編寫嵌入式軟件和程序就需要使用對應的嵌入式平臺的開發環境,比如大家學過的51單片機,用的KEIL(keil-C51)軟件就是針對51內核平臺下的集成開發環境,keil-C51軟件中集成了代碼編寫、交叉編譯、鏈接、程序燒寫、仿真等最主要功能,從而使51單片機軟件開發者在一個軟件中實現了整個的程序開發流程,方便快捷。 同理,ARM內核平臺也有其相應的開發平臺,包括IAR,KEIL FOR ARM這兩個著名軟件,這兩個軟件在開發不帶操作系統以及帶有小型嵌入式操作系統(如u\Cos,RT-thread,Vx-works等)的產品時非常方便,但在開發如linux、安卓系統的產品時力不能及。因此需要用到更通用些的開發環境,如eclipse、PC-linux系統。 Eclipse是一個開源的軟件工程文件管理界面,當它的底層安裝了不同的編譯、仿真等工具后,就可以用來開發不同平臺的軟件,如安卓APP,FPGA軟核代碼,當然也包括ARM軟件。 當需要開發帶有linux內核的大型嵌入式系統時,通常要在linux操作系統下進行,因此安裝linux操作系統是開發嵌入式高端產品的必由之路,linux的使用流程能夠幫助你更好理解嵌入式開發的每個環節。 實驗儀器及資料: 1個人電腦(建議安裝winXP或win7-32b,更高版本系統可能導致驅動安裝失敗) 2 FS210試驗箱 3 FS210試驗箱配套資料(12G) 實驗內容及步驟: - 裸機開發環境搭建(這一大步驟需要在實驗課上完成,第二步可以回去自己做)
下面為win7-32b系統下軟件安裝流程,以后的實驗都使用win7-32位系統進行,使用其他系統的同學請參照實驗箱配套書籍進行操作。此實驗手冊不做介紹。 把下載的實驗箱資料解壓(假設解壓在桌面上)后: - 安裝GCC編譯器和Yagarto工具包(圈住的兩個都裝,安裝位置隨意):(已經安裝)
- 安裝FS-JTAG調試軟件(安裝位置隨意):(已經安裝)
(3)安裝FS-JTAG驅動: 如圖所示用USB線連接JTAG仿真器和電腦 <我的電腦>--右鍵--管理--設備管理器,如圖 會出現兩個帶黃色嘆號的設備(下圖中的兩個未知設備不必管它,只關心那兩個“USB<=>JTAG&RS232”即可) 鼠標放在“USB<=>JTAG&RS232”上--右鍵--更新驅動程序軟件,如圖 選擇第二項: ④瀏覽選擇驅動位置并點擊下一步,安裝完成 注意:在win764位以及更高版本系統中會出現提示“驅動數字簽名不可用”或者“哈希值不可用“的問題,而且有的電腦可以解決,有的不能解決,同學們自行百度。 ⑤重復第三步和第四步,直到使設備管理器里面沒有帶嘆號的設備(一共三次) ①如圖所示鏈接串口線 ②打開設備管理器按照“(3)安裝JTAG驅動”方法安裝串口驅動 ① ②自行在D盤新建一個Eclipse文件夾,并把上圖壓縮包解壓至Eclipse文件夾中 ③下圖是D盤下解壓的eclipse,將其發送到桌面,留待以后使用 ④雙擊打開eclipse,設定工作路徑(即以后你用eclipse新建的軟件工程的默認保存位置),點擊Workbench。如下圖: 至此,可用于開發ARM裸機程序的開發環境搭建完成。 二、操作系統開發環境搭建(這一步可以回宿舍自己做,實驗室電腦已經安裝好,只需要在做第四個實驗之前完成這一步驟就可以了,建議做完第二個實驗之后做這一步) (1)環境搭建前的準備 ①檢查主機配置 ②檢查自己的電腦是否支持虛擬化技術(只有支持虛擬化技術的CPU才能運行虛擬機軟件) 如果顯示有下圖紅圈中的VT-x,則表示支持虛擬化技術 如果支持就繼續實驗,不支持的話,實驗一下面的步驟和實驗四沒法做 ③繼續,打開計算機的虛擬化功能:關機重啟計算機,重啟時按下F2按鍵進入下圖狀態,按照下圖操作 準備工作完成,下面進入環境搭建流程 (2)環境搭建與初級設置 ①安裝VMware Player,雙擊下圖程序安裝 ②解壓Ubuntu系統鏡像到D盤新建文件夾中(其他磁盤也可以) 解壓后在D盤中: ③打開虛擬機,進行初級配置 ④編輯虛擬機設置 ⑤分別修改各項配置參數1、內存。2、處理器。3、網絡適配器。4、共享目錄 虛擬機內存分配大小根據自己的電腦配置修改,如果是2G內存,則分配約1G即可,如果大于等于4G內存,則分配大于1G即可。本機內存4G,如下圖分配1.5G給虛擬機。 查看處理器的配置:計算機--右鍵--屬性 可以看到,我的計算機為雙核四線程(看不懂的可以用魯大師查看) 我的計算機為雙核,每個核心為雙線程。 因此設置如下(下圖中所謂核心數量=內核數x每個內核的線程數) 網絡適配器為橋接模式: 上圖橋接到了有線網卡上,因為我們后面要用有線網卡往開發板燒寫程序 至于無線網卡,需要取消掉對它的橋接 共享目錄添加:添加--下一步--瀏覽--下一步--完成 初級配置完成 ⑥打開虛擬機 ⑦ 密碼為1,回車 打開了!!! 如何關閉!!! 到現在為止,linux開發環境的配置還沒有結束,但是第二個和第三個實驗的開發環境早已經可以使用了。 至于linux下的開發環境搭建還差一點點,留在第四個實驗時接著介紹! (三)Linux常用命令及vi, gdb的使用 一、常用命令使用介紹 1.ls 命令 ---------------------------------------------------------------------- ls 以默認方式顯示當前目錄文件列表 ls –a 顯示所有文件包括隱藏文件 ls –l 顯示文件屬性,包括大小,日期,符號連接,是否可讀寫及是否可執行 ---------------------------------------------------------------------- 2.cd 命令 cd dir 切換到當前目錄下的 dir 目錄 cd .. 切換到到上一級目錄 cd ~ 切換到用戶目錄,比如是 root 用戶,則切換到/root 下 ---------------------------------------------------------------------- 3.rm 命令 rm file 刪除某一個文件 rm -rf dir 刪除當前目錄下叫 dir 的整個目錄 ---------------------------------------------------------------------- 4.cp 命令 cp source target 將文件 source 復制為 target cp –av soure_dir target_dir 將整個目錄復制,兩目錄完全一樣 cp –fr source_dir target_dir 將整個目錄復制,并且是以非鏈接方式復制,當 source 目錄帶有符號鏈接時,兩個目錄不相同 ---------------------------------------------------------------------- 5.mv 命令 mv source target 將文件或者目錄 source 更名為 target ---------------------------------------------------------------------- 6.diff 命令 diff -ruN dir1 dir2 > <patch_file> 比較目錄 1 與目錄 2 中的文件 ---------------------------------------------------------------------- 7.echo 命令 echo message 顯示一串字符 ---------------------------------------------------------------------- 8.cat 命令 cat file 顯示文件的內容,和 DOS 的 type 相同 cat file | more 顯示文件的內容并傳輸到 more 程序實現分頁顯示,使用命令 less file可實現相同的功能more 分頁命令,一般通過管道將內容傳給它,如 ls | more ---------------------------------------------------------------------- 9.du 命令 du 計算當前目錄的容量 du -sm /root 計算/root 目錄的容量并以 M 為單位 ---------------------------------------------------------------------- 10.find 命令 find -name <path> file 在/path 目錄下查找看是否有文件 file ---------------------------------------------------------------------- 11.grep 命令 grep -r “chars” ./ 在當前目錄的所有文件查找字串 chars -r 表示遞歸查找子目錄 ---------------------------------------------------------------------- 12.vi 的使用 vi file 編輯文件 file vi 原基本使用及命令: vi 分為編輯狀態和命令狀態。輸入命令要先按 ESC,退出編輯狀態, 然后輸入命令。 常用命令有: :x(退出) :x!(退出不保存) :w(保存文件) :w!(不詢問方式寫入文件) :r file(讀文件 file) :%s/oldchars/newchars/g(將所有字串 oldchars 換成 newchars) i 進入編輯插入狀態 ESC 退出編輯狀態 ---------------------------------------------------------------------- 13.man 命令 man ls 讀取關于 ls 命令的幫助 ---------------------------------------------------------------------- 14.啟動關閉計算機命令 reboot 重新啟動計算機 halt 關閉計算機 init 0 關閉所有應用程序和服務,進入純凈的操作環境 init 1 重新啟動應用及服務 init 6 重新啟動計算機 ---------------------------------------------------------------------- 15.tar 命令 tar -xfzv file.tgz 將文件 file.tgz 解壓 tar -zcvf file.tgz <source> 將文件或目錄<source>壓縮為 file.tgz gzip directory.tar 將覆蓋原文件生成壓縮的 directory.tar.gz gunzip directory.tar.gz 覆蓋原文件解壓生成不壓縮的 directory.tar。 ---------------------------------------------------------------------- 16.dmesg,uname 命令 dmesg 顯示 kernle 啟動及驅動裝載信息 uname -a 顯示操作系統的類型 ---------------------------------------------------------------------- 17.string 命令 string file 顯示 file 文件中的 ASCII 字符內容 --------------------------------------------------------------------- 18.rpm 命令 rpm -ihv program.rpm 安裝程序 program 并顯示安裝進程 ---------------------------------------------------------------------- 19.文件目錄管理命令 su root 切換到超級用戶 chmod a+x file 將 file 文件設置為可執行,腳本類文件一定要這樣設置一個,否則得用 bash file 才能執行 chmod 666 file 將文件 file 設置為可讀寫 chown user /dir 將/dir 目錄設置為 user 所有 ---------------------------------------------------------------------- 20.mknod 命令 mknod /dev/hda1 b 3 1 創建塊設備 hda1,主設備號為 3,從設備號為 1,即 master 硬盤的第一個分區 Mknod /dev/tty1 c 4 1 創建字符設備 tty1,主設備號為 4,眾設備號為 1,即第一個 tty 終端 ---------------------------------------------------------------------- Touch /tmp/running在/tmp 下創建一個臨時文件 running,重新啟動后消失 ---------------------------------------------------------------------- 21.磁盤管理的命令 fdisk /dev/hda 就像執行了 dos 的 fdisk 一樣 mount -t ext2 /dev/hda1 /mnt 把/dev/hda1 裝載到 /mnt 目錄 df 顯示文件系統裝載的相關信息 mount -t nfs 192.168.1.1:/sharedir /mnt 將 nfs 服務的共享目錄 sharedir 加載到/mnt/nfs 目錄 umount /mnt 將/mnt 目錄卸載,/mnt 目錄必須處于空閑狀態 sync 刷新緩沖區,使內容與磁盤同步, mkfs.ext2 /dev/hda1 格式化/dev/hda1 為 ext2 格式 dd if=/dev/zero of=root.ram bs=1024,count=1024 生成一個大小為 1M 的塊設備,可以把它當作硬盤的一個分區來用 22.程序開發有關命令 gcc hello.c -o hello 將 hello.c 編譯成名為 hello 的二進制執行文件 ldd program 顯示程序所使用了哪些庫 23.系統有關命令 ps 顯示當前系統進程信息 ps –ef 顯示系統所有進程信息 kill -9 500 將進程編號為 500 的程序殺死 top 顯示系統進程的活動情況,按占 CPU 資源百分比來分 free 顯示系統內存及 swap 使用情況 time program 在 program 程序結束后,將計算出 program 運行所使用的時間 網絡命令 ifconfig eth0 192.168.1.2 捆綁網卡 1 的 IP 地址為 192.168.1.2 ---------------------------------------------------------------------- 24、登錄網絡服務器 telnet 192.168.1.1 登陸 IP 為 192.168.1.1 的 telnet 服務器 ftp 192.168.1.1 登陸到 ftp 服務器 實驗思考 Linux 下命令有哪幾種可使用的通配符?分別代表什么含義?
實驗2 燒寫應用程序到開發板中以及在線調試 實驗目的: 掌握如何把自己編寫好的軟件下載到開發板上 實驗原理: PC機通過JTAG工具把開發者編譯好的可執行文件下載到開發板中,有的時下載到芯片內部的flash中,以后芯片上電后就會自動執行flash中的代碼。也有的芯片內部沒有flash,而是把可執行文件燒到開發板上的flash中,大型程序往往存儲在外部磁盤,比如個人電腦里有一個ROM用于開機時的初始化工作,之后調用了C盤里的windows操作系統,嵌入式平臺可以外接SD卡,MMC等,他們都可以存儲程序。 本試驗把一個已經編譯好的軟件燒寫到開發板的RAM中,這個程序只有幾KB,不會引導外部存儲中的其他可執行文件。 把程序燒寫到RAM中是一種快捷的調試手段,這樣可以在不修改flash中的引導程序的前提下,在線調試程序,當斷開仿真器后,開發板會重新復位,RAM中的程序被清除,重新加載flash中的程序。 通過對一個現有的點亮LED燈的程序,使大家掌握eclipse軟件的使用流程。 實驗儀器及資料: 1個人電腦(建議安裝winXP或win7-32b,更高版本系統可能導致安裝失敗) 2 FS210試驗箱 3 FS210試驗箱配套資料(12G) 實驗內容及步驟: ① 關閉電源的情況下,開發板上的撥碼開關需要撥到如圖狀態(1000),這是一個用于開機啟動配置的開關,撥到不同位置,啟動的系統來自不同的存儲器。 ②連接開發板與電腦,如下圖 ③使用串口終端調試軟件Putty。 (把這個軟件復制到桌面,因為以后實驗多次用到) ④查看自己電腦的串口號,如圖,本機CH340的串口為COM5,(至于COM7,它是FS-JTAG上面的串口,暫時不必管它) ⑤配置Putty并使用 把剛才查看到的串口號填寫到Putty的文本框中 ⑥打開串口 ⑦打開后如圖 ⑧以后再次使用putty只需如圖設置 ⑨打開開發板電源,此時Putty顯示下圖內容,立刻按下空格鍵。 ⑩打開FS-JTAG調試工具 出現下圖現象: 出現ERROR屬于正常情況,此時不要關閉putty和FS-JTAG軟件 準備工作到此完成,以上工作在以后的實驗中也要提前用到,目的就是要使開發板進入步驟⑨的狀態,下面開始進行程序燒寫實驗 (2)程序仿真 ①打開eclipse,導入一個已有的工程:右鍵點擊Project Explorer--Import ②選擇Exsiting project--next ③瀏覽并打開一個LED工程的根目錄 這個工程目錄如下: ④工程打開后界面如圖,雙擊打開led.c文件 ⑤編譯工程:project--build all ⑥仿真配置:run--debug configeration--Zylin...(native)--右鍵--new ⑦browse--<04-led-ram>--OK--Browse ⑧上圖第三小步打開led.elf文件 ⑨配置debugger選項卡 其中上圖第二小步選擇打開下圖所示(打開之前安裝yagarto編譯器的安裝位置): 其中上圖第三小步選擇打開下圖所示: ⑩配置好仿真命令后開始仿真 ⑪仿真時界面如下,按下圖標記的1小步開始運行仿真 此時看到開發板上led燈閃爍: 按⑪中的2小步仿真暫停,led停止閃爍 ⑫查看此時開發板上的寄存器以及變量的值(暫停狀態下) 由于在main函數中定義了一個變量i,所以在右上角的查看窗口的Variables選項卡中有一個“(x)=i 551556”,代表i當前值為551556. 同理點擊Registers選項卡,可以查看CPU寄存器中的數值。 ⑬結束仿真:按照下圖步驟 ⑭工程名--右鍵--close project,然后關閉eclipse 實驗結束!!! 思考題: 1.注釋main函數的每一條語句的大致意思?可以打印出來粘貼在實驗報告上 2.工程文件中有一個start.s文件,它的作用是什么? 實驗3 裸機下實現開發板與PC機的串口通信 實驗目的: 1.理解一個嵌入式硬件開發板上兩個不同的芯片之間如何通信 2.掌握串口通信概念,理解串口通信對于嵌入式開發的作用 實驗原理: 在實際應用中串行通信比并行通信應用廣泛的多,wifi,藍牙,以太網,光線都是采用串行通信。本次試驗講解一種最簡單的串行通信--UART. 這個串口每次發送一個字節的數據,波特率可選為115200bps、9600bps等不同速度,和51單片機的串口相比,其通信協議相同,只是ARM中的串口功能更強大一點。 串口與整個開發板之間的關系如圖: Uart是芯片上的一個外設,芯片內核通過并行(IO映射統一編址)方式把數據發給UART,然后串口自動以串行方式發出,接受過程類似。 途中用到MAX3232芯片,這是一個把UART使用的TTL電平轉換為RS232電平,從而提高傳輸線抗干擾能力。PC機通過USB轉串口驅動把數據接收過來。 實驗儀器及資料: 1個人電腦(建議安裝winXP或win7-32b,更高版本系統可能導致安裝失敗) 2 FS210試驗箱 3 FS210試驗箱配套資料(12G) 實驗內容及步驟: ①導入一個已有工程 09-uart ②安裝一個新的串口調試助手: 百度下載并安裝 ③ 準備工作:(完全按照實驗二的準備工作進行即可) ④ 完成上一步后,可以關閉putty軟件了,因為putty和上面新下載的串口助手無法同時運行 ⑤打開新下載安裝的Spu串口助手并打開串口 所需要配置的串口號是putty軟件所驅動的同一個串口-COM5,這就是putty和Spu無法同時運行的原因(兩個軟件不可同時驅動同一個外設工作) ⑥程序仿真:按照實驗二中程序仿真的步驟進行操作(無非是換了個工程而已) 實驗現象: ① 此時接收到三行字符串,數據量體現在最下方“Rx:52 Bytes” 此時還沒有通過電腦給開發板發送數據,所以顯示“Tx:0 Bytes” ②通過電腦發送數據“Teacher Chen--學號110”: 可以看到接收框中多出了自己發送的一行,但是事實上多出的一行是從開發板發送過來的,不是自己打在上面的。 因為最下面顯示“Rx:73 Bytes”和“Tx:21 Bytes”。“Teacher Chen--學號110”這段字符剛好占21字節,所以會顯示發送了21字節,同時又接收了新的21個字節,導致接收了52+21=73字節。 實驗完成!! 注意:第四次試驗中第一部分要求自己回去完成,請同學在第四次實驗開始之前完成好。 思考練習: 1.修改程序代碼,使你通過電腦發出的數據和接受的數據不一樣,實現發送一個字符大寫’A’,接收小寫’a’。把實驗結果和修改后的程序代碼打印粘貼在實驗報告上。 2.在C語言中我們學過,printf()函數是用來在電腦屏幕上顯示格式化字符的,但是本實驗中卻是在ARM開發板上用來通過串口發送了一段字符串,這是什么原理?(自行百度) 實驗4 帶操作系統下的嵌入式開發原理初識 實驗目的: 1掌握在有操作系統下,如何開發嵌入式應用程序 2理解有沒有操作系統時嵌入式開發有什么區別 3理解有沒有操作系統時嵌入式系統的使用有什么區別 實驗原理: 嵌入式系統總體上是由硬件和軟件組成的,硬件是基礎,軟件是核心與靈魂。它們之間的關系如圖: 實驗儀器及資料: 1個人電腦(建議安裝winXP或win7-32b,更高版本系統可能導致安裝失敗) 2 FS210試驗箱 3 FS210試驗箱配套資料(12G) 實驗內容及步驟: - 完成實驗一未完成的環境搭建配置(去實驗室做第四次實驗之前要完成,否則時間不夠)
(1)tftp配置 ①打開終端輸入“cd /tftpboot”回車 ②輸入“ls”回車 ③輸入“cat test”回車,結果如圖, ④輸入“cd ~”回車,再輸入“tftp 127.0.0.1”回車,再輸入“get test”回車,結果如圖 ⑤輸入“q”回車,再輸入“ls”回車,再輸入“cat test”回車,結果如圖 如此表明tftp服務建立成功 所謂NFS是指開發板通過NFS掛載放在主機PC上的根文件系統。這樣的話主機在文件系統進行的操作就可以同步反映到開發板上;開發板上進行的操作也會同步反映到主機的根文件系統上。因此,在實際的高端嵌入式開發中,經常使用NFS方式掛在系統,這樣可以非常方便進行網絡調試。具體使用方法如下 ①打開終端,輸入“sudo vim /etc/exports”回車,會看到要求輸入密碼,密碼為“1”,回車,結果如圖 NFS允許掛載的目錄及權限在文件/etc/exports中,第一步就是用vim打開了這樣的文件。Vim是linux操作系統的一種文件編輯器,類似于windows系統里面的記事本這樣的小軟件,只是使用上有點麻煩。下圖便是vim打開了/etc/exports文件之后的界面,很像cmd命令。 ②可以看到上圖第12行的一串字符 其中/source/rootfs是要共享的目錄,*代表允許所有的網絡段訪問,rw代表可讀可寫權限,sync是指資料要同步寫入內存和硬盤,no_root_squash是NFS客戶端分享目錄使用者的權限。 其實本來第12行是需要同學們來輸入進去的,但是在制作虛擬機鏡像時已經操作過了,所以你們不用修改它。 ③在小寫狀態下打字“:q”回車,就可以退出vim編輯界面 ④重啟NFS服務:在終端輸入”sudo /etc/init.d/nfs-kernel-server restart”回車,結果如圖 上圖有一句帶有一個fail,在是不管他 (3)配置開發環境網絡 我們之前的NFS配置是為了通過有線網卡對開發板進行調試,而這一步就是為了配置有線網卡,具體步驟如下: ①打開終端,輸入“sudo vim /etc/network/interfaces”,回車,輸入密碼“1”回車,結果如圖所示 本次也是用到了,vim文件編輯器,還是不需要編輯他,已經編輯好了。 而且電腦和開發板是通過網線直接相連,不需要做過多的網絡配置。 ②把上圖用手機拍下來記住就可以了,然后在鍵盤上打字“:q”回車就可以已退出vim。 ③終端下輸入“sudo /etc/init.d/networking restart”回車,彈出信息如下 上圖表明網絡配置沒有問題了 ④查看網絡配置:終端里面輸入“ifconfig”回車,結果如圖 至此,網卡配置成功了 (4)配置交叉工具鏈 交叉工具是在個人電腦上開發嵌入式系統所使用的一系列軟件工具,交叉編譯器,交叉連接器,交叉調試器等都屬于交叉工具,交叉工具鏈是指把這些針對ARM-A8的交叉工具集成在一起從而開發特定的嵌入式系統。因此當然你把51單片機的編譯器和ARM的鏈接器組合在一起形成工具連是沒法使用的。具體操作如下: ①打開終端輸入“cd /usr/local/toolchain/”回車,再輸入“ls”回車,如圖 ②輸入“vim ~/.bashrc”回車,進入vim編輯界面,(這次要使用vim編輯器了),鼠標滾動至最下面,如圖 ③把光標放到第107行--小寫狀態下按一下字母“o”--按一下esc--再按一下“o”,結果多出兩行:108和109,如圖 此時輸入: “export PATH=$PATH:/usr/local/toolchain/toolchain-4.4.6/bin/”,按一下esc結束輸入(如果輸入錯誤,可以把光標移動到錯誤處按一下字母“R”然后就可以打字替換錯誤的字符了,也是按一下esc按鍵退出修改) 結果如下圖: ④打字“:wq”回車,就退出編輯了(其中“:”表示命令狀態,“w”表示保存修改,“q”表示退出vim編輯器) ⑤重啟配置:在終端下輸入“source ~/.bashrc”回車,如圖 ⑥工具連測試:輸入“arm-cortex_a8-linux-gnueabi-gcc -v”回車,結果如下圖: 出現上圖所示(注意倒數第二行版本號為4.4.6),表示交叉工具鏈已經配置好了 二、開始實驗四,操作系統下的各種文件編譯與下載(第四次實驗課上進行) (1)拷貝文件 把下圖所示資料路徑中的全部文件拷貝到之前第一個實驗時我們建立的共享文件夾中 (2)把共享目錄中需要下載的文件拷貝到tftp下載目錄中 ①拷貝u-boot.bin,zImage文件到虛擬機下的/tftpboot目錄下 :在中端輸入 “cp /mnt/hgfs/VM_ENJ/u-boot.bin /mnt/hgfs/VM_ENJ/zImage /tftpboot/”回車 注意:上面的命令中紅色的是我的共享目錄名,請根據自己的共享目錄名來輸入,不要全盤照抄 ②繼續輸入“ls /tftpboot/”回車,結果如圖 ③解壓文件系統,拷貝rootfs.tar.bz2文件到虛擬機ubuntu下的/source目錄下:輸入“cp /mnt/hgfs/VM_ENJ/rootfs.tar.bz2 /source/”回車 繼續輸入“ls /source/”回車 繼續輸入“cd /source”回車 繼續輸入“ls”回車,結果如下兩圖 ④解壓:輸入“tar xvf rootfs.tar.bz2”回車,結果如圖 結果彈出很多行內容,圖中最后幾行大致如此,說明解壓成功 (3)開始使用開發版 ①連接開發板,如圖所示連接(用到了串口線,網線,電源),此時開發板暫不上電 ②打開串口調試助手(打開方式如同實驗二方法,這里不再贅述) ③開發板上撥碼開關撥到1000,打開電源,在putty倒計時到0之前按下任意鍵,停留在如下圖所示狀態 ④修改開發板環境變量(通過putty) a.在putty中輸入“setenv serverip 192.168.100.192”回車 (上面的IP地址就是之前讓你們手機拍照記住的IP,這是主機的IP,也就是ubuntu里的IP) b.繼續輸入“setenv ipaddr 192.168.100.191”回車 (這是設定開發板的IP,原則上IP的最后一位是任意的,但不能和主機IP沖突) c.繼續輸入“saveenv ”回車,最后如圖所示 ⑤查看修改后的環境變量:輸入“print”回車,如圖 ⑥使用ping命令一下主機:輸入“ping 192.168.100.192”回車,如圖 (ping命令的作用是與某IP地址的主機進行連接,這句話的意思其實是讓開發板去ping一下主機,而不是主機通過putty串口ping開發板。當然最后開發板ping來的結果還是通過putty顯示到電腦上) 上圖倒數第二行顯示host 192.168.100.192 is alive,表示ping通了。 (4)燒寫uboot ①在putty中輸入“tftp 20008000 u-boot.bin”回車 ②繼續輸入“nand erase 0 100000”回車 ③繼續輸入“nand write 20008000 0 100000”回車 (注意上面三步不要少了0,或者空格),結果如圖 ④重啟開發板:開關關上再打開,如圖 (5)設置環境變量 ①依次輸入下面的內容 “setenv serverip 192.168.100.192”回車 “setenv ipaddr 192.168.100.191”回車 “setenv gatewayip 192.168.100.1”回車 “setenv bootcmd tftp 20008000 zImage\; go 20008000”回車 “setenv bootargs root=nfs nfsroot=192.168.100.192:/source/rootfs ip=192.168.100.191 init=/linuxrc.console=ttySAC0,115200”回車 “saveenv”回車,結果如圖 ②再次重啟開發板:開關關上再打開,(注意這次也會出現倒計時,但是不要按下任何按鍵),結果如圖 此時還沒有boot完成,請等待一段時間 最后彈出如下內容,表示開發板已經通過網線把PC機的文件加載完成 (6)制作SD卡啟動盤 ①把下圖路徑的文件夾拷貝到共享目錄下 ②在ubuntu終端里輸入“cd ~”回車 繼續輸入“cp /mnt/hgfs/VM_ENJ/sd_fusing/ ~ -a”回車 繼續輸入“ls”回車 ③繼續輸入“cd sd_fusing”回車 繼續輸入“make”回車 繼續輸入“chmod 777 sd_fusing.sh”回車 至此編譯完成 ④拔下開發板的SD卡,用讀卡器插在電腦上 ⑤在共享文件夾里新建一個文件夾命名為sd_out。 終端輸入“cp ~/sd_fusing/sd_fusing.sh /mnt/hgfs/VM_ENJ/sd_out/”回車,就把生成的sd_fusing.sh復制到了共享文件夾下的sd_out中 ⑥在windows下把第五步復制的文件拷貝到SD卡根目錄,然后把SD卡插入開發板 ⑦打開putty助手,撥碼開關撥成0110,啟動開發板,結果如圖 ⑧在putty中輸入“tftp 20008000 u-boot.bin”回車 繼續輸入“nand erase 0 100000”回車 繼續輸入“nand write 20008000 0 100000”回車 ⑨重啟開發板,設置環境參數 依次輸入下面的內容 “setenv serverip 192.168.100.192”回車 “setenv ipaddr 192.168.100.191”回車 “setenv gatewayip 192.168.100.1”回車 “setenv bootcmd tftp 20008000 zImage\; go 20008000”回車 “setenv bootargs root=nfs nfsroot=192.168.100.192:/source/rootfs ip=192.168.100.191 init=/linuxrc.console=ttySAC0,115200”回車 “saveenv”回車,結果如圖 ⑩再次重啟開發板:開關關上再打開,(注意這次也會出現倒計時,但是不要按下任何按鍵),結果如圖 實驗結束! 本次實驗到底在做什么? 主要是做SD卡的啟動,我們把需要運行的程序拷貝到了SD卡中,然后撥碼開關撥到0110,這樣uboot代碼自動判斷此時要求啟動SD卡,就會加載SD卡中的sd_fusing.sh,然后運行這個文件。就得到了上圖結果,雖然結果類似于網絡文件系統的啟動方式,但本質上啟動位置不同。之前的網絡啟動方式是把撥碼撥至1000,當然內部原理就不一樣了。 以后當大家深入學習之后,可能會把一個嵌入式linux系統鏡像燒寫到SD卡中,然后撥碼撥至0110,這樣,linux就會在開發板上啟動并且運行。如果把安卓鏡像燒進SD卡,就會啟動安卓系統。 再此還要說明一點,這個撥碼開關到底是什么,它是普通的CPU引腳連在開關上的。當系統上電,首先運行CPU內部的flash中的初始化以及系統加載代碼。這段代碼相當于個人電腦剛開機進入windows之前所運行的那段程序,因為我們電腦也可以裝多個操作系統,通過鍵盤選擇啟動哪一個。 CPU的flash中的代碼會判斷撥碼的狀態,今兒決定啟動誰。 至于flash中的啟動代碼的設計,有的由CPU制造商提供,也可以由嵌入式開發者自己設計。其設計的總體流程類似于開發沒有外部flash的51單片機,只是因為ARM-A8系統遠比51單片機復雜,所以用ARM匯編寫啟動代碼會高深一些。 思考題: 1.在linux系統下開發基于linux系統的嵌入式系統和開發裸機下嵌入式系統的區別有哪些?(兩點即可) 2.linux操作系統、驅動程序、應用程序之間的位置關系是什么? 實驗報告要求 1實驗名稱,實驗日期等 2實驗目的 3實驗原理 4實驗儀器與資料 5實驗內容與步驟(不必把完整的步驟都寫在實驗報告上,只需要總結一個大致過程即可) 6實驗最終現象(第一個實驗只要一個查看自己的ip地址和接口信息的截圖) 7思考題(有思考題的實驗必須要寫思考題,格式:問題加答案) (前5條可以簡寫。) (實驗現象或結果必須貼圖,思考題必須完成) 8 實驗體會與總結
完整的Word格式文檔51黑下載地址:
|