基于Linux下载文件的功能设计实现分析Word格式.docx
《基于Linux下载文件的功能设计实现分析Word格式.docx》由会员分享,可在线阅读,更多相关《基于Linux下载文件的功能设计实现分析Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
如彩灯实验,数码管显示,音乐盒播放设计,键盘输入,模拟量的输入、输出,数模转换及电机正反转等。
上述实验都不需要扩展硬件,该板上将提供全部接口和器件。
同时为了强调学生的动手能力,在设计该实验板时,我们把AT89C51单片机的所有控制线、地址线和数据线经驱动后,将全部引入一排接线端子上,这就给系统的扩展提供了便利条件,我们可以在面包板上设计自己的接口电路,由单片机来控制实现。
如存储器的扩充、键盘/显示接口芯片的扩展等、若连续做的话,可以使每个同学在自己占用的实验板上,设计成一个独立的应用系统。
这对于同学们的实际工作能力,将会有一个很大的促进和提高。
1.2课题研究现状
嵌入式系统作为一个的热门领域,涵盖了微电子技术、电子信息技术、计算机软件和硬件等多项技术领域的应用。
随着后PC时代来临,嵌入式应用呈现系统复杂化,应用多样化,硬件集约化、软件平台化等特点。
行业发展现状与趋势:
目前,在地区,嵌入式系统开发涉及的行业众多,水平参差不齐,大多数停留在8位单片机开发这个层面上,一部分单位开始采用32位机,并采用了实时操作系统。
而具有能够同时进行软件设计和芯片设计的SOC系统设计的系统级高端人才几乎没有,国际上领先的多核嵌入式系统设计,可重构嵌入式系统设计在市的应用还停留在少数研究单位的研究中。
2.系统总体方案设计及功能模块介绍
2.1系统概述及总体方案设计
2.1.1系统概述
通过u-boot,核,根文件系统的移植实现文件的下载。
2.1.2总体方案设计
1.通过SD启动开发板;
2.将u-boot下载到开发板的存中,并将u-boot烧写到开发板的EMMC上;
3.重新启动开发板,(从EMMC启动);
4.将核下载到开发板的存中;
网络传输(tftp服务器和客户端,tftp为文件传输协议);
5.将虚拟机中的一个叫做nfsdir的目录挂载到开发板的根目录;
挂载:
nfsdir这个目录下的容,虚拟机可以和开发板实现共享;
通过nfs服务器实现;
6.最终实现下载文件程序的运行。
3.系统软件设计与实现
3.1主程序设计与实现
系统移植与实现
1、新建/tftpboot目录,若有则不用新建
2、将u-boot-fs4412.bin、uImage与exynos4412-origen.dtb拷贝到tftpboot目录下
3、修改tftpboot目录权限
sudochmod-R777/tftpboot
4、新建/source目录,若有则不用新建
5、将nfsdir压缩包拷贝到该目录下,解压sudotar-xfnfsdir.ok.tar
6、修改source目录权限
sudochmod-R777/source
7、检查tftp与nfs服务器是否安装
apt-cachepolicytftpd-hpa
apt-cachepolicynfs-kernel-server
如果没有安装,则在终端输入sudoapt-getinstalltftpd-hpa
sudoapt-getinstallnfs-kernel-server进行安装
8、修改配置文档:
tftp服务器:
1、sudovim/etc/default/tftpd-hpa
#/etc/default/tftpd-hpa
TFTP_USERNAME="
tftp"
TFTP_DIRECTORY="
/tftpboot"
TFTP_ADDRESS="
0.0.0.0:
69"
TFTP_OPTIONS="
-l-c-s"
保存退出
2、查看tftp服务器状态
sudoservicetftpd-hpastatus
若为正在运行,则重启:
sudoservicetftpd-hparestart
若停止,则启动:
sudoservicetftpd-hpastart
nfs服务器:
1、sudovim/etc/exports
/source/nfsdir*(rw,sync,no_subtree_check,no_root_squash)
2、查看nfs服务器状态
sudoservicenfs-kernel-servicestatus
sudoservicenfs-kernel-serverrestart
sudoservicenfs-kernel-serverstart
9、启动开发板
设置参数:
setenvipaddr192.168.100.200
setenvserverip192.168.100.2
saveenv
tftp41000000u-boot-fs4412.bin
moviwriteu-boot41000000
重启开发板,重新设置参数:
setenvipaddr192.168.100.200
setenvbootcmdtftp41000000uImage\;
tftp42000000exynos4412-origen.dtb\;
bootm41000000-42000000
setbootargsnoinitrdroot=/dev/nfsnfsroot=192.168.100.2:
/source/nfsdirrwrootwaitconsole=ttySAC2,115200n8init=/linuxrcip=192.168.100.200clk_ignore_unused
saveenv
3.2服务器端程序设计与实现
3.2.1服务器端主流程图(如图1)
图1
3.2.2服务器端主代码
intmain()
{
structsockaddr_inservAddr;
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
intcliFd=socket(PF_INET,SOCK_STREAM,0);
if(-1==cliFd)
perror("
socketerror!
"
return-1;
}
//printf("
socketok!
\n"
//connect
intret=connect(cliFd,(structsockaddr*)&
servAddr,sizeof(servAddr));
if(-1==ret)
perror("
connecterror!
close(cliFd);
return-1;
printf("
connectok!
//send/recv
intfd=open("
2.txt"
O_RDONLY);
if(-1==fd)
openerror"
charbuf[100];
memset(buf,0,sizeof(buf));
while
(1)
intret=read(fd,buf,sizeof(buf));
if(0==ret)
break;
send(cliFd,buf,sizeof(buf),0);
//close
close(cliFd);
return0;
3.3客户端程序设计与实现
3.3.1客户端流程图(如图2)
图2
3.3.2客户端主代码
intservFd=socket(PF_INET,SOCK_STREAM,0);
if(-1==servFd)
socketerror"
socketok"
//bind
intret=bind(servFd,(structsockaddr*)&
binderror!
close(servFd);
bindok!
//listen
ret=listen(servFd,10);
listenerror!
close(servFd);
listenok!
//accept
intconnFd=accept(servFd,NULL,NULL);
if(-1==connFd)
accepterror!
printf("
acceptok!
intsevc=recv(connFd,buf,sizeof(buf),0);
if(0==sevc)
write(fd,buf,sizeof(buf));
puts(buf);
recvfromserver%ssuccess!
buf);
close(connFd);
4.系统测试
4.1系统软件测试
Server端运行结果如下图所示
图3
Client端运行如下图所示
图4
4.2系统硬件测试
程序在虚拟机上运行结果如下所示
图5
程序在开发板上运行如下所示
图6
5.总结和展望
在嵌入式的学习过程中,让我了解了什么是嵌入式系统。
它就是以应用为中心,以计算机技术为基础,软硬件可定制,适用于不同应用场合,对功能、可靠性、成本、体积、功耗有严格要求的计算机系统。
他一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统、用户应用程序四个部分组成,用于实现对其他设备的控制、监视或管理功能。
嵌入式系统已经应用于科学研究、工业控制、军事技术、交通通信、医疗卫生、消费娱乐等领域,人们日常使用的手机、PDA、汽车、智能家电、GPS等均是嵌入式系统的典型代表。
老师在讲解过程中,首先交给我们的是一些简单的命令应用,Linux具有很丰富的命令,绝大多数命令具有大量的参数。
在学习命令的过程中,只要你认真的看着老师操作还有认真听着他讲,你就会发现有些命令的操作还是很简单的,不过在操作的过程中,我也有遇到有些困难,会出现你按照书上学习的例子,将命令输入终端时会出现你不想要的结果,也就是错误的结果。
这是问问旁边的同学或是懂的同学就可以解决了。
在对于这部分的学习中,让我知道了命令对于嵌入式的重要性。
它是linux的重要容,linux中所有的功能都是通过命令执行。
在实际应用中,为了减少系统开销,经常不使用图形界面,此时,对系统的所有操作都需要以命令方式来执行。
在嵌入式系统开发过程中,由于目标机的性能和配置比较低,因此,一般情况下目标机仅具有命令窗口而没有图形界面,对目标机的所有操作都通过命令来实现。
6.参考文献
《Linux设备驱动开发详解(第2版)》——华见嵌入式培训中心宋老师著
《Cortex-M3+uC/OS-IT嵌入式系统开发入门与应用》——华见嵌入式培训中心著
《精通Linux设备驱动程序开发》——华见嵌入式培训中心宋老师翻译
《Linux核修炼之道》——华见嵌入式培训中心任桥伟老师著
《Linux那些事儿》——华见嵌入式培训中心任桥伟老师著