基于Linux文件的功能設(shè)計(jì)與實(shí)現(xiàn).doc
《基于Linux文件的功能設(shè)計(jì)與實(shí)現(xiàn).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于Linux文件的功能設(shè)計(jì)與實(shí)現(xiàn).doc(13頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 信息工程學(xué)院 嵌入式系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)報(bào)告 題目 : 基于Linux的文件下載功能的設(shè)計(jì)與實(shí)現(xiàn) 學(xué)號(hào) : 學(xué)生姓名 : 專(zhuān)業(yè)名稱(chēng) : 計(jì)算機(jī)科學(xué)與技術(shù) 班級(jí) : 目錄 1. 課題研究意義和現(xiàn)狀 - 1 - 1.1 課題研究意義 - 1 - 1.2 課題研究現(xiàn)狀 - 1 - 2. 系統(tǒng)總體方案設(shè)計(jì)及功能模塊介紹 - 2 - 2.1 系統(tǒng)概述及總體方案設(shè)計(jì) - 2 - 3. 系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn) - 2 - 3.1 主程序設(shè)計(jì)與實(shí)現(xiàn) - 2 - 3.2 服務(wù)器端程序設(shè)計(jì)與實(shí)現(xiàn) - 3 - 3.
2、3 客戶(hù)端程序設(shè)計(jì)與實(shí)現(xiàn) - 5 - 4. 系統(tǒng)測(cè)試 - 8 - 4.1 系統(tǒng)軟件測(cè)試 - 8 - 4.2 系統(tǒng)硬件測(cè)試 - 8 - 5. 總結(jié)和展望 - 9 - 6. 參考文獻(xiàn) - 10 - 信息工程學(xué)院嵌入式系統(tǒng)設(shè)計(jì)課程設(shè)計(jì) 1. 課題研究意義和現(xiàn)狀 1.1 課題研究意義 隨著微機(jī)技術(shù)的不斷發(fā)展,在許多工程領(lǐng)域單片機(jī)的應(yīng)用日趨廣泛,已逐漸取代了單板機(jī)。為了適應(yīng)這一新形勢(shì)的變化,目前許多高校及一些中等專(zhuān)科學(xué)校已不再開(kāi)設(shè)以單板機(jī)為主的“微機(jī)原理、接口及應(yīng)用”課程,而直接講授單片機(jī)及有關(guān)技術(shù)。但是目前缺少相應(yīng)的實(shí)驗(yàn)設(shè)備及教材。鑒于這種情況,從教學(xué)和科研兩個(gè)角度出發(fā),我們
3、此次的畢業(yè)設(shè)計(jì)嘗試設(shè)計(jì)一種單片機(jī)教學(xué)實(shí)驗(yàn)板,來(lái)滿(mǎn)足有關(guān)單片機(jī)教學(xué)實(shí)驗(yàn)的要求。從教學(xué)實(shí)驗(yàn)的角度出發(fā),該實(shí)驗(yàn)板可適用于電類(lèi)專(zhuān)業(yè)和非電類(lèi)專(zhuān)業(yè)不同層次單片機(jī)教學(xué)實(shí)驗(yàn)的要求,如:自動(dòng)化,儀器儀表,電子技術(shù),電子測(cè)量,計(jì)算機(jī)應(yīng)用,機(jī)電一體化等各專(zhuān)業(yè),及機(jī)械專(zhuān)業(yè)。利用該板可以做各種編程實(shí)驗(yàn),和一些簡(jiǎn)單的輸入輸出接口實(shí)驗(yàn)。如彩燈實(shí)驗(yàn),數(shù)碼管顯示,音樂(lè)盒播放設(shè)計(jì),鍵盤(pán)輸入,模擬量的輸入、輸出,數(shù)模轉(zhuǎn)換及電機(jī)正反轉(zhuǎn)等。上述實(shí)驗(yàn)都不需要擴(kuò)展硬件,該板上將提供全部接口和器件。同時(shí)為了強(qiáng)調(diào)學(xué)生的動(dòng)手能力,在設(shè)計(jì)該實(shí)驗(yàn)板時(shí),我們把AT89C51單片機(jī)的所有控制線、地址線和數(shù)據(jù)線經(jīng)驅(qū)動(dòng)后,將全部引入一排接線端子上,這就給系
4、統(tǒng)的擴(kuò)展提供了便利條件,我們可以在面包板上設(shè)計(jì)自己的接口電路,由單片機(jī)來(lái)控制實(shí)現(xiàn)。如存儲(chǔ)器的擴(kuò)充、鍵盤(pán)/顯示接口芯片的擴(kuò)展等、若連續(xù)做的話,可以使每個(gè)同學(xué)在自己占用的實(shí)驗(yàn)板上,設(shè)計(jì)成一個(gè)獨(dú)立的應(yīng)用系統(tǒng)。這對(duì)于同學(xué)們的實(shí)際工作能力,將會(huì)有一個(gè)很大的促進(jìn)和提高。 1.2 課題研究現(xiàn)狀 嵌入式系統(tǒng)作為一個(gè)的熱門(mén)領(lǐng)域,涵蓋了微電子技術(shù)、電子信息技術(shù)、計(jì)算機(jī)軟件和硬件等多項(xiàng)技術(shù)領(lǐng)域的應(yīng)用。隨著后PC時(shí)代來(lái)臨,嵌入式應(yīng)用呈現(xiàn)系統(tǒng)復(fù)雜化,應(yīng)用多樣化,硬件集約化、軟件平臺(tái)化等特點(diǎn)。 行業(yè)發(fā)展現(xiàn)狀與趨勢(shì): 目前,在上海地區(qū),嵌入式系統(tǒng)開(kāi)發(fā)涉及的行業(yè)眾多, 水平參差不齊, 大多數(shù)停留
5、在8位單片機(jī)開(kāi)發(fā)這個(gè)層面上, 一部分單位開(kāi)始采用32位機(jī),并采用了實(shí)時(shí)操作系統(tǒng)。而具有能夠同時(shí)進(jìn)行軟件設(shè)計(jì)和芯片設(shè)計(jì)的SOC系統(tǒng)設(shè)計(jì)的系統(tǒng)級(jí)高端人才幾乎沒(méi)有, 國(guó)際上領(lǐng)先的多核嵌入式系統(tǒng)設(shè)計(jì), 可重構(gòu)嵌入式系統(tǒng)設(shè)計(jì)在上海市的應(yīng)用還停留在少數(shù)研究單位的研究中。 2. 系統(tǒng)總體方案設(shè)計(jì)及功能模塊介紹 2.1 系統(tǒng)概述及總體方案設(shè)計(jì) 2.1.1系統(tǒng)概述 通過(guò)u-boot,內(nèi)核,根文件系統(tǒng)的移植實(shí)現(xiàn)文件的下載。 2.1.2 總體方案設(shè)計(jì) 1.通過(guò)SD啟動(dòng)開(kāi)發(fā)板; 2.將u-boot下載到開(kāi)發(fā)板的內(nèi)存中,并將u-boot燒寫(xiě)到開(kāi)發(fā)板的EMMC上; 3.重新啟動(dòng)開(kāi)發(fā)板,(從E
6、MMC啟動(dòng)); 4.將內(nèi)核下載到開(kāi)發(fā)板的內(nèi)存中; 網(wǎng)絡(luò)傳輸(tftp服務(wù)器和客戶(hù)端,tftp為文件傳輸協(xié)議); 5.將虛擬機(jī)中的一個(gè)叫做nfsdir的目錄掛載到開(kāi)發(fā)板的根目錄; 掛載:nfsdir這個(gè)目錄下的內(nèi)容,虛擬機(jī)可以和開(kāi)發(fā)板實(shí)現(xiàn)共享; 掛載:通過(guò)nfs服務(wù)器實(shí)現(xiàn); 6.最終實(shí)現(xiàn)下載文件程序的運(yùn)行。 3. 系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn) 3.1 主程序設(shè)計(jì)與實(shí)現(xiàn) 系統(tǒng)移植與實(shí)現(xiàn) 1、新建/tftpboot目錄,若有則不用新建 2、將u-boot-fs4412.bin、uImage與exynos4412-origen.dtb拷貝到tftpb
7、oot目錄下 3、修改tftpboot目錄權(quán)限 sudo chmod -R 777 /tftpboot 4、新建/source目錄,若有則不用新建 5、將nfsdir壓縮包拷貝到該目錄下,解壓sudo tar -xf nfsdir.ok.tar 6、修改source目錄權(quán)限 sudo chmod -R 777 /source 7、檢查tftp與nfs服務(wù)器是否安裝 apt-cache policy tftpd-hpa apt-cache policy nfs-kernel-server 如果沒(méi)有安裝,則在終端輸入sudo apt-get i
8、nstall tftpd-hpa sudo apt-get install nfs-kernel-server進(jìn)行安裝 8、修改配置文檔: tftp服務(wù)器: 1、 sudo vim /etc/default/tftpd-hpa # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS="0.0.0.0:69"
9、 TFTP_OPTIONS="-l -c -s"0 保存退出 2、查看tftp服務(wù)器狀態(tài) sudo service tftpd-hpa status 若為正在運(yùn)行,則重啟:sudo service tftpd-hpa restart 若停止,則啟動(dòng):sudo service tftpd-hpa start nfs服務(wù)器: 1、sudo vim /etc/exports /source/nfsdir *(rw,sync,no_subtree_check,no_
10、root_squash) 2、查看nfs服務(wù)器狀態(tài) sudo service nfs-kernel-service status 若為正在運(yùn)行,則重啟:sudo service nfs-kernel-server restart 若停止,則啟動(dòng):sudo service nfs-kernel-server start 9、啟動(dòng)開(kāi)發(fā)板 設(shè)置參數(shù):setenv ipaddr 192.168.100.200 setenv serverip 192.168.100.2
11、 saveenv tftp 41000000 u-boot-fs4412.bin movi write u-boot 41000000 重啟開(kāi)發(fā)板,重新設(shè)置參數(shù): setenv ipaddr 192.168.100.200 setenv serverip 192.168.100.2 setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-origen.dtb\;bootm 41000000 - 42000000 set
12、bootargs noinitrd root=/dev/nfs nfsroot=192.168.100.2:/source/nfsdir rw rootwait console=ttySAC2,115200n8 init=/linuxrc ip=192.168.100.200 clk_ignore_unused saveenv 3.2 服務(wù)器端程序設(shè)計(jì)與實(shí)現(xiàn) 開(kāi)始 3.2.1服務(wù)器端主流程圖(如圖1) socket connect recv/send close
13、 結(jié)束 圖1 3.2.2服務(wù)器端主代碼 int main() { struct sockaddr_in servAddr; memset(&servAddr,0,sizeof(servAddr)); servAddr.sin_family=PF_INET; servAddr.sin_port=htons(8888); servAddr.sin_addr.s_addr=inet_addr("192.168.100.200"); //socket int cliFd=socket(PF_I
14、NET,SOCK_STREAM,0); if(-1==cliFd) { perror("socket error!"); return -1; } //printf("socket ok!\n"); //connect int ret=connect(cliFd,(struct sockaddr*)&servAddr,sizeof(servAddr)); if(-1==ret) { perror("connect error!"); close(cliFd); return -1; } printf("connect ok!\n"); //send/r
15、ecv int fd=open("2.txt",O_RDONLY); if(-1==fd) { perror("open error"); return -1; } char buf[100]; memset(buf,0,sizeof(buf)); while(1) { int ret=read(fd,buf,sizeof(buf)); if(0==ret) { break; } send(cliFd,buf,sizeof(buf),0); } //close close(cliFd); return 0; } 3.3 客戶(hù)端程序設(shè)計(jì)與實(shí)現(xiàn)
16、 3.3.1客戶(hù)端流程圖(如圖2) 開(kāi)始 socket bind listen accept 結(jié)束 圖2 3.3.2客戶(hù)端主代碼 int main() { struct sockaddr_in servAddr; memset(&servAddr,0,sizeof(servAddr)); servAddr.sin_family=PF_INET; servA
17、ddr.sin_port=htons(8888); servAddr.sin_addr.s_addr=inet_addr("192.168.100.200"); //socket int servFd=socket(PF_INET,SOCK_STREAM,0); if(-1==servFd) { perror("socket error"); return -1; } printf("socket ok"); //bind int ret=bind(servFd,(struct sockaddr*)&servAddr,sizeof(servAddr)); if(-1==
18、ret) { perror("bind error!"); close(servFd); return -1; } printf("bind ok!\n"); //listen ret=listen(servFd,10); if(-1==ret) { perror("listen error!\n"); close(servFd); return -1; } printf("listen ok!\n"); //accept int connFd=accept(servFd,NULL,NULL); if(-1==connFd) { perror
19、("accept error!"); close(servFd); return -1; } printf("accept ok!\n"); //send/recv int fd=open("2.txt",O_RDONLY); if(-1==fd) { perror("open error"); return -1; } char buf[100]; memset(buf,0,sizeof(buf)); while(1) { int sevc=recv(connFd,buf,sizeof(buf),0); if(0==sevc) { break
20、; } write(fd,buf,sizeof(buf)); puts(buf); printf("recv from server %s success!\n",buf); } //close close(servFd); close(connFd); return 0; } 4. 系統(tǒng)測(cè)試 4.1 系統(tǒng)軟件測(cè)試 Server端運(yùn)行結(jié)果如下圖所示 圖3 Client端運(yùn)行如下圖所示 圖4 4.2 系統(tǒng)硬件測(cè)試
21、 程序在虛擬機(jī)上運(yùn)行結(jié)果如下所示 圖5 程序在開(kāi)發(fā)板上運(yùn)行如下所示 圖6 5. 總結(jié)和展望 在嵌入式的學(xué)習(xí)過(guò)程中,讓我了解了什么是嵌入式系統(tǒng)。它就是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可定制,適用于不同應(yīng)用場(chǎng)合,對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的計(jì)算機(jī)系統(tǒng)。他一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操
22、作系統(tǒng)、用戶(hù)應(yīng)用程序四個(gè)部分組成,用于實(shí)現(xiàn)對(duì)其他設(shè)備的控制、監(jiān)視或管理功能。嵌入式系統(tǒng)已經(jīng)應(yīng)用于科學(xué)研究、工業(yè)控制、軍事技術(shù)、交通通信、醫(yī)療衛(wèi)生、消費(fèi)娛樂(lè)等領(lǐng)域,人們?nèi)粘J褂玫氖謾C(jī)、PDA、汽車(chē)、智能家電、GPS等均是嵌入式系統(tǒng)的典型代表。 老師在講解過(guò)程中,首先交給我們的是一些簡(jiǎn)單的命令應(yīng)用,Linux具有很豐富的命令,絕大多數(shù)命令具有大量的參數(shù)。在學(xué)習(xí)命令的過(guò)程中,只要你認(rèn)真的看著老師操作還有認(rèn)真聽(tīng)著他講,你就會(huì)發(fā)現(xiàn)有些命令的操作還是很簡(jiǎn)單的,不過(guò)在操作的過(guò)程中,我也有遇到有些困難,會(huì)出現(xiàn)你按照書(shū)上學(xué)習(xí)的例子,將命令輸入終端時(shí)會(huì)出現(xiàn)你不想要的結(jié)果,也就是錯(cuò)誤的結(jié)果。這是問(wèn)問(wèn)旁邊的同學(xué)或是
23、懂的同學(xué)就可以解決了。在對(duì)于這部分的學(xué)習(xí)中,讓我知道了命令對(duì)于嵌入式的重要性。它是linux的重要內(nèi)容,linux中所有的功能都是通過(guò)命令執(zhí)行。在實(shí)際應(yīng)用中,為了減少系統(tǒng)開(kāi)銷(xiāo),經(jīng)常不使用圖形界面,此時(shí),對(duì)系統(tǒng)的所有操作都需要以命令方式來(lái)執(zhí)行。在嵌入式系統(tǒng)開(kāi)發(fā)過(guò)程中,由于目標(biāo)機(jī)的性能和配置比較低,因此,一般情況下目標(biāo)機(jī)僅具有命令窗口而沒(méi)有圖形界面,對(duì)目標(biāo)機(jī)的所有操作都通過(guò)命令來(lái)實(shí)現(xiàn)。 6. 參考文獻(xiàn) 《Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解(第2版)》——華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心宋老師著 《Cortex-M3+uC/OS-IT嵌入式系統(tǒng)開(kāi)發(fā)入門(mén)與應(yīng)用》——華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心著 《精通Linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)》——華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心宋老師翻譯 《Linux內(nèi)核修煉之道》——華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心任橋偉老師著 《Linux那些事兒》——華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心任橋偉老師著 - 10 -
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康及健康的影響因素課件
- 補(bǔ)氣中藥專(zhuān)題知識(shí)講座
- 冠芥蒂防備治療康復(fù)課件
- (精品)第一節(jié)音樂(lè)能告訴我們什么
- 廣告管理的要決
- 團(tuán)區(qū)委X年工作總結(jié)
- 藥品公共安全事件典型案例回顧
- (精品)理想從這里啟程
- 第05講--真空中的麥克斯韋方程組-山東-大學(xué)-物理-學(xué)院-電動(dòng)力學(xué)-課件
- 高一英語(yǔ)人教版必修一Unit2writing課件
- 依法保護(hù)未成年人的合法權(quán)益-PPT課件
- 精益生產(chǎn)豐田生產(chǎn)方式七大浪費(fèi)_
- 人教版八年級(jí)英語(yǔ)下冊(cè)Unit-2-Gra課件
- 好習(xí)慣養(yǎng)成主題班會(huì)課件
- 5章投資管理A