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