《基于Linux文件的功能設計與實現.doc》由會員分享,可在線閱讀,更多相關《基于Linux文件的功能設計與實現.doc(13頁珍藏版)》請在裝配圖網上搜索。
1、
信息工程學院
嵌入式系統(tǒng)設計課程設計報告
題目
:
基于Linux的文件下載功能的設計與實現
學號
:
學生姓名
:
專業(yè)名稱
:
計算機科學與技術
班級
:
目錄
1. 課題研究意義和現狀 - 1 -
1.1 課題研究意義 - 1 -
1.2 課題研究現狀 - 1 -
2. 系統(tǒng)總體方案設計及功能模塊介紹 - 2 -
2.1 系統(tǒng)概述及總體方案設計 - 2 -
3. 系統(tǒng)軟件設計與實現 - 2 -
3.1 主程序設計與實現 - 2 -
3.2 服務器端程序設計與實現 - 3 -
3.
2、3 客戶端程序設計與實現 - 5 -
4. 系統(tǒng)測試 - 8 -
4.1 系統(tǒng)軟件測試 - 8 -
4.2 系統(tǒng)硬件測試 - 8 -
5. 總結和展望 - 9 -
6. 參考文獻 - 10 -
信息工程學院嵌入式系統(tǒng)設計課程設計
1. 課題研究意義和現狀
1.1 課題研究意義
隨著微機技術的不斷發(fā)展,在許多工程領域單片機的應用日趨廣泛,已逐漸取代了單板機。為了適應這一新形勢的變化,目前許多高校及一些中等專科學校已不再開設以單板機為主的“微機原理、接口及應用”課程,而直接講授單片機及有關技術。但是目前缺少相應的實驗設備及教材。鑒于這種情況,從教學和科研兩個角度出發(fā),我們
3、此次的畢業(yè)設計嘗試設計一種單片機教學實驗板,來滿足有關單片機教學實驗的要求。從教學實驗的角度出發(fā),該實驗板可適用于電類專業(yè)和非電類專業(yè)不同層次單片機教學實驗的要求,如:自動化,儀器儀表,電子技術,電子測量,計算機應用,機電一體化等各專業(yè),及機械專業(yè)。利用該板可以做各種編程實驗,和一些簡單的輸入輸出接口實驗。如彩燈實驗,數碼管顯示,音樂盒播放設計,鍵盤輸入,模擬量的輸入、輸出,數模轉換及電機正反轉等。上述實驗都不需要擴展硬件,該板上將提供全部接口和器件。同時為了強調學生的動手能力,在設計該實驗板時,我們把AT89C51單片機的所有控制線、地址線和數據線經驅動后,將全部引入一排接線端子上,這就給系
4、統(tǒng)的擴展提供了便利條件,我們可以在面包板上設計自己的接口電路,由單片機來控制實現。如存儲器的擴充、鍵盤/顯示接口芯片的擴展等、若連續(xù)做的話,可以使每個同學在自己占用的實驗板上,設計成一個獨立的應用系統(tǒng)。這對于同學們的實際工作能力,將會有一個很大的促進和提高。
1.2 課題研究現狀
嵌入式系統(tǒng)作為一個的熱門領域,涵蓋了微電子技術、電子信息技術、計算機軟件和硬件等多項技術領域的應用。隨著后PC時代來臨,嵌入式應用呈現系統(tǒng)復雜化,應用多樣化,硬件集約化、軟件平臺化等特點。
行業(yè)發(fā)展現狀與趨勢: 目前,在上海地區(qū),嵌入式系統(tǒng)開發(fā)涉及的行業(yè)眾多, 水平參差不齊, 大多數停留
5、在8位單片機開發(fā)這個層面上, 一部分單位開始采用32位機,并采用了實時操作系統(tǒng)。而具有能夠同時進行軟件設計和芯片設計的SOC系統(tǒng)設計的系統(tǒng)級高端人才幾乎沒有, 國際上領先的多核嵌入式系統(tǒng)設計, 可重構嵌入式系統(tǒng)設計在上海市的應用還停留在少數研究單位的研究中。
2. 系統(tǒng)總體方案設計及功能模塊介紹
2.1 系統(tǒng)概述及總體方案設計
2.1.1系統(tǒng)概述
通過u-boot,內核,根文件系統(tǒng)的移植實現文件的下載。
2.1.2 總體方案設計
1.通過SD啟動開發(fā)板;
2.將u-boot下載到開發(fā)板的內存中,并將u-boot燒寫到開發(fā)板的EMMC上;
3.重新啟動開發(fā)板,(從E
6、MMC啟動);
4.將內核下載到開發(fā)板的內存中;
網絡傳輸(tftp服務器和客戶端,tftp為文件傳輸協(xié)議);
5.將虛擬機中的一個叫做nfsdir的目錄掛載到開發(fā)板的根目錄;
掛載:nfsdir這個目錄下的內容,虛擬機可以和開發(fā)板實現共享;
掛載:通過nfs服務器實現;
6.最終實現下載文件程序的運行。
3. 系統(tǒng)軟件設計與實現
3.1 主程序設計與實現
系統(tǒng)移植與實現
1、新建/tftpboot目錄,若有則不用新建
2、將u-boot-fs4412.bin、uImage與exynos4412-origen.dtb拷貝到tftpb
7、oot目錄下
3、修改tftpboot目錄權限
sudo chmod -R 777 /tftpboot
4、新建/source目錄,若有則不用新建
5、將nfsdir壓縮包拷貝到該目錄下,解壓sudo tar -xf nfsdir.ok.tar
6、修改source目錄權限
sudo chmod -R 777 /source
7、檢查tftp與nfs服務器是否安裝
apt-cache policy tftpd-hpa
apt-cache policy nfs-kernel-server
如果沒有安裝,則在終端輸入sudo apt-get i
8、nstall tftpd-hpa
sudo apt-get install nfs-kernel-server進行安裝
8、修改配置文檔:
tftp服務器:
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服務器狀態(tài)
sudo service tftpd-hpa status
若為正在運行,則重啟:sudo service tftpd-hpa restart
若停止,則啟動:sudo service tftpd-hpa start
nfs服務器:
1、sudo vim /etc/exports
/source/nfsdir *(rw,sync,no_subtree_check,no_
10、root_squash)
2、查看nfs服務器狀態(tài)
sudo service nfs-kernel-service status
若為正在運行,則重啟:sudo service nfs-kernel-server restart
若停止,則啟動:sudo service nfs-kernel-server start
9、啟動開發(fā)板
設置參數: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
重啟開發(fā)板,重新設置參數:
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 服務器端程序設計與實現
開始
3.2.1服務器端主流程圖(如圖1)
socket
connect
recv/send
close
13、 結束
圖1
3.2.2服務器端主代碼
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 客戶端程序設計與實現
16、
3.3.1客戶端流程圖(如圖2)
開始
socket
bind
listen
accept
結束
圖2
3.3.2客戶端主代碼
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)測試
4.1 系統(tǒng)軟件測試
Server端運行結果如下圖所示
圖3
Client端運行如下圖所示
圖4
4.2 系統(tǒng)硬件測試
21、
程序在虛擬機上運行結果如下所示
圖5
程序在開發(fā)板上運行如下所示
圖6
5. 總結和展望
在嵌入式的學習過程中,讓我了解了什么是嵌入式系統(tǒng)。它就是以應用為中心,以計算機技術為基礎,軟硬件可定制,適用于不同應用場合,對功能、可靠性、成本、體積、功耗有嚴格要求的計算機系統(tǒng)。他一般由嵌入式微處理器、外圍硬件設備、嵌入式操
22、作系統(tǒng)、用戶應用程序四個部分組成,用于實現對其他設備的控制、監(jiān)視或管理功能。嵌入式系統(tǒng)已經應用于科學研究、工業(yè)控制、軍事技術、交通通信、醫(yī)療衛(wèi)生、消費娛樂等領域,人們日常使用的手機、PDA、汽車、智能家電、GPS等均是嵌入式系統(tǒng)的典型代表。
老師在講解過程中,首先交給我們的是一些簡單的命令應用,Linux具有很豐富的命令,絕大多數命令具有大量的參數。在學習命令的過程中,只要你認真的看著老師操作還有認真聽著他講,你就會發(fā)現有些命令的操作還是很簡單的,不過在操作的過程中,我也有遇到有些困難,會出現你按照書上學習的例子,將命令輸入終端時會出現你不想要的結果,也就是錯誤的結果。這是問問旁邊的同學或是
23、懂的同學就可以解決了。在對于這部分的學習中,讓我知道了命令對于嵌入式的重要性。它是linux的重要內容,linux中所有的功能都是通過命令執(zhí)行。在實際應用中,為了減少系統(tǒng)開銷,經常不使用圖形界面,此時,對系統(tǒng)的所有操作都需要以命令方式來執(zhí)行。在嵌入式系統(tǒng)開發(fā)過程中,由于目標機的性能和配置比較低,因此,一般情況下目標機僅具有命令窗口而沒有圖形界面,對目標機的所有操作都通過命令來實現。
6. 參考文獻
《Linux設備驅動開發(fā)詳解(第2版)》——華清遠見嵌入式培訓中心宋老師著
《Cortex-M3+uC/OS-IT嵌入式系統(tǒng)開發(fā)入門與應用》——華清遠見嵌入式培訓中心著
《精通Linux設備驅動程序開發(fā)》——華清遠見嵌入式培訓中心宋老師翻譯
《Linux內核修煉之道》——華清遠見嵌入式培訓中心任橋偉老師著
《Linux那些事兒》——華清遠見嵌入式培訓中心任橋偉老師著
- 10 -