重庆大学倪晓嵌入式作业.docx
《重庆大学倪晓嵌入式作业.docx》由会员分享,可在线阅读,更多相关《重庆大学倪晓嵌入式作业.docx(25页珍藏版)》请在冰豆网上搜索。
重庆大学倪晓嵌入式作业
嵌入式系统
基于浏览器的远程电机运转控制设计
指导教师:
倪晓
学院:
自动化学院
学生:
学号:
2013、1
基于浏览器的远程电机运转控制设计
摘要:
本设计构建基于ARM的嵌入式web服务器,通过互联网、远端计算机通过浏览器浏览试验箱网页,试验箱网页上的控制按钮能够控制试验箱电机的运转和停止。
利用网页的表单与CGI技术相结合,最终实现使用浏览器远程控制电机的运转。
由于本次课程设计任务量较大,为了方便学习和更好地完成任务,我和田正民、瑞娜组成小组,每个人都做了分工,平时相互学习、讨论。
大部分工作是我们一起完成的,我主要负责文件系统的制作,Busybox的移植,CGI脚本的制作。
1嵌入式系统开发环境
1.1硬件开发环境介绍
像计算机,嵌入式系统应该有:
在硬件方面:
中央处理器CPU,RAM,ROM(Flash),端口,总线,用户界面和输入输出设备,等等。
在软件方面:
BIOS,Boot-loader,操作系统,文件系统和用户应用程序,等等。
开发主机:
它是标准计算机,其上可运行交叉工具链来开发用户代码。
用户代码可以从开发主机通过JTAG口或串口下载到目标板,然后再对代码进行调试。
目标机:
具有特定处理器的开发板。
目标重定向机:
因为通常目标机没有键盘和显示器,目标机的输入和输出通过串口被重定向到另外一台计算机,开发人员通过运行特定的软件(如windows的超级终端或Linux的minicom)在重定向机上操作目标板上的软件运行。
本次课程设计采用的是一款基于ARM2410试验箱。
板载以太网口,因此可以满足课程设计的需要。
串口作为终端输入与输出,USBDevice接口配合DNW用于下载程序。
基本开发模型示意图如图1.1所示:
图1.1嵌入式基本开发模型示意图
ARM2410试验箱如图1.2所示:
图1.2ARM2410试验箱
1.2虚拟机中安装红帽企业版
安装Vmware8.0虚拟机
其安装方法和其他软件类似,运行其安装程序,按照提示一步一步进行下去就是了。
安装好后运行此程序,如下:
安装RedHatEnterpriseLinux5(RHEL5)
起动Vmare后,点击“CreateaNewVirtualMachine”,选择用户自定义安装:
按照提示,到加载ISO镜像这步:
在网络类型处,选择Usebridgednetworking。
最后,完成NewVirtualMachineWizard:
点击Finish后,将安装刚才的RHL5,安装如下步骤:
1.选择安装方式(这里我选择图形界面安装)。
2.回车后继续。
3.点击Next继续。
4.这里要求选择安装过程中所用的语言,默认的为英文,我选择该选项,点击Next继续。
5.这里选择键盘类型,使用默认的,点击Next继续。
6.由于该Linux版本为REDHATENTERPRISELINUX5.1Server,在此要求输入序列号,该步骤可以跳过不输入序列号(不输入序列号有些软件包不会被安装,但在进入系统后可自己添加软件包),输入序列号确认无误后,点击Next继续。
7.选择YES,点击Next继续。
8.这里建立分区,有三种方案可供选择。
9.根据实际情况是否保留原有分区或者数据选择,这里选择在选定的驱动器上移除LINUX分区,并由系统自动分区,比较有经验的可以自定义分区,点击Next继续。
10.确认在选定的驱动器上移除所有的LINUX分区后,点击Next继续。
11.这里可以看到系统各分区的类型和大小(要在第9步中将Reviewandmodifypartitioninglayout前的复选框勾上),点击Next继续。
12.这里配置引导装载程序的安装位置和相关信息,使用默认即可,点击Next继续。
13.这里可以设置BootLoader的密码,以防止单用户进入系统时不需要密码,点击Next继续。
14.这里配置IP的相关信息,可以自动从DHCP服务器获得,也可自己配置,点击Next继续。
15.这里可以设置主机名及DNS相关信息,点击Next继续。
16.这里选择时区,点击Next继续。
17.这里设置根用户的密码,也即超级用户密码,设定好后,点击Next继续。
18.这里选择软件包的安装方式,为了减少麻烦,可以自定义安装,将所有的软件包都装上,点击Next继续。
19.左边是软件包的类型,右边是相应的软件包,将其都选上,所有的软件包依次如下所示。
20.到此在安装前所有的配置完成,这也是最后反悔的机会,点击Next将开始安装系统。
21.开始格式化/文件系统,接着是/boot文件系统。
22.传输安装映像到硬盘。
23.开始安装进程。
24.稍等一会儿,系统继续安装。
25.以下是在安装过程中的几个时间段,所用安装时间取决于硬件配置和存的大小。
26.安装完成系统重启。
27.系统重新启动时的界面。
28.可以看到系统启动时的个进程的详细信息。
29.第一次启动系统时要做相应的配置,会有如下的配置向导。
30.点击Forward继续。
31.同意许可协议,点击Forward继续。
32.如果要添加端口,可以详细的配置,同时在TrustedServices右侧可以选择可信任的服务,配置好后,点击Forward继续。
33.点击YES,然后点击Forward继续。
34.点击Forward继续。
34.该选项可以不选,点击Forward继续。
35.OK后,点击Forward继续。
36.选了Kdump后,在这一步需要重启系统,OK后,系统重;若没有选择Kdump,点击Forward继续。
37.这里设置日期和时间,设定好好,点击Forward继续。
38.这里暂时不注册系统的相关信息,选择以后注册后点击Forward继续。
39.在上一步骤中可以选择WhyshouldIIconnectRAN……?
,出现上图的界面,点击Forward继续。
40.这里选择以后,点击Forward继续。
41.点击Forward继续。
42.创建普通用户的相关信息后,点击Forward继续。
43.如果需要网络登录,也可以配置相关的用户信息,配置好后,点击Forward继续。
44.配置声卡相关信息,配置好后,点击Forward继续。
45.如不需要插入CD,点击Finish完成所用相关信息的配置,至此整个系统的安装初始配置完成。
46.重启系统,使刚才的相关设置生效。
启动界面如下。
47.默认进入图形登录界面,这里输入用户名和密码后,终于进入了图形桌面。
48.按Ctrl+Alt+Fn(n=1,2,3,4,5,6)可进入命令行操作界面,也即真正的终端,按Ctrl+Alt+F7可返回到图形界面。
49.输入用户名和密码后登录了系统,这里在输入密码时没有任何显示。
50.执行几个命令。
51.图形桌面下的菜单。
52.图形界面下的命令行窗口,即虚拟终端。
53.关闭系统时个进程依次终止。
54.完毕。
安装vmware-tools
为了方便编译,为了更好的解决虚拟机与主机的共享问题,VMware公司有一个VMWare-tools,来实现文件共享。
VMWare-tools步骤如下:
1.启动并进入Linux系统。
2.然后选择虚拟机菜单中的“虚拟机/安装VMware-Tools”,此时就会有把VMware-tools文件映像到CD-ROM中(就是将VM安装目录下的linux.iso镜像加载到虚拟系统的光驱中,如果提示VM安装目录没有linux.iso文件,需要自己下载一个放到该目录下)。
3.进入linux操作系统,/mnt/cdrom/目录下就可以看到安装文件了,把VMwareTools-文件复制到自己的需要的位置中,。
4.解压#tar-zxvfVMwareTools-。
5.进入cdVMtool/vmware-tools-distrib目录中。
6.输入./vmware-install.pl进行安装,在安装过程中根据提示进行选择,在此我一路选择回车即可。
经过以上安装,最终ware环境下的Linux系统开发环境如下图:
2交叉工具链的安装
在Vmware虚拟机开发环境下,我们要把交叉编译工具链安装到:
$CROSSDIR目录下,安装步骤如下:
把工具代码包arm-linux-gcc-.tar拷贝到/tmp/目录下,运行vmware,执行命令cd/tmp/,进入tmp文件夹,然后执行,解压压缩包,具体指令如下:
#tar-jxvfarm-linux-gcc-.tar.bz2
解压过程需要一段时间,解压后的文件形成了usr/local/文件夹,vmware中操作如图3.1。
进入该文件夹,将arm文件夹拷贝到/usr/local/下#cdusr/local/
#cp-rvarm/usr/local/
现在交叉编译程序集都在/usr/local/arm//bin下面了。
vmware中操作如图3.2所示。
修改环境变量,把交叉编译器的路径加入到PATH。
(有三种方法,强烈推荐使用法一)
方法一:
修改/etc/bash.bashrc文件
#vim/etc/bash.bashrc
在最后加上:
exportPATH=$PATH:
/usr/local/arm//bin(如果不能编辑,先修改相关文件的权限使用chmod命令。
)
方法二:
修改/etc/profile文件:
#vim/etc/profile
增加路径设置,在末尾添加如下,保存/etc/profile文件:
exportPATH=$PATH:
/usr/local/arm//bin
方法三:
#exportPATH=注:
(这只能在当前的终端下才是有效的!
)。
本实验用的是方法3,vmware中操作如图3.3
3)立即使新的环境变量生效,不用重启电脑:
对应方法一:
#source/root/.bashrc
对应方法二:
#source/etc/profile
4)检查是否将路径加入到PATH:
#echo$PATH
显示的容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。
至此,交叉编译环境安装完成。
5)测试是否安装成功
#arm-linux-gcc-v
上面的命令会显示arm-linux-gcc信息和版本。
本实验测试结果如图3.4.
图3.1解压压缩包arm-linux-gcc-.tar
图3.2将arm文件夹拷贝到/usr/local/下
图3.3修改环境变量
图3.4测试是否安装成功
3核的编译
1.首先从.kernel.org/pub/linux/kernel/v2.6/获得最新的核的版本。
tarzxvflinux-.tar.gz
ln-slinux-linux(创建软连接,方便查找文件)
cdlinux
makeclean
清除之前的核编译残留的源代码树上的所有文件
makemrproper
在源代码目录树的顶层擦除所有的.config文件
2.配置核
一般开发板都给了默认的配置文件,使用默认的即可。
将其命名为“.config”。
执行makemenuconfig,编译指令见图3.1,出现配置核界面见图3.2。
图3.1编译指令结果
图3.2核配置界面
这时不用做任何更改,在主菜单里选择退出,这样做是为了生成相应配置的头文件。
3.编译核
1)修改Makefile中的CPU体系结构和交叉编译工具。
ARCH?
=arm
CROSS_COMPILE?
=arm-linux-
添加对NandFlash的支持
修改arch/arm/plat-s3c24xx/common-smdk.c
修改结构体smdk_default_nand_part[]
修改为:
staticstructmtd_partitionsmdk_default_nand_part[]={
[0]={
.name=“Clover_Board_uboot”
.offset=0x00000000,
.size=0x00040000,
},
[1]={
.name=“Clover_Board_Kernel”,
.offset=0x00200000,
.size=0x00200000,
},
[2]={
.name=“Clover_Board_yaffs2”,
.offset=0x00400000,
.size=0x03BF8000,
}
};
添加对yaffs2文件系统的支持
b)cdcvs/yaffs2
c)./patch-ker.shc/opt/linux-.4/
制作配置单
由于S3C2440与S3C2410有很多相同的地方,因此可以在S3C2410的基础上修改
导入arch/arm/configs/s3c2410_defconfig
在SystemType->S3C2440Machines中将SMDK2440与SMDK2440withS3C2440CPUmodule选中。
添加NandFlash驱动
在DeviceDrivers->MemoryTechnologyDevice(MTD)Support中选中NANDFlashsupportforS3C2410/S3C2440SoC
添加对yaffs2文件系统的支持
在Filesystems->Miscellaneousfilesystems中分别选中YAFFS2filesystemsupport,Autoselectyaffs2format,CacheshortnamesinRAM
添加交叉编译器的支持
在KernelFeatures中选中usetheARMEABItocomilethekernel
5)然后执行makezImage编译核。
编译结束后,会在arch/arm/boot目录下生成linux核映象文件:
zImage。
4制作yaffs2文件系统
文件系统的制作主要由我完成。
文件系统是对一个存储设备上的数据和元数据进行组织的机制。
与其他linux开发一样,制作文件系统是必要的。
其实文件系统的制作已经差不多模式化,从网上可以搜索到很多资料,关键是跟自己的核,busybox等环境相适应,还要考虑到移植及使用方便。
1)编译BusyBox
可以在
首先创建一个名字为root_的文件夹,在其中创建如下文件夹
etcbinvardevhomelibmntprocrootsbinsystmpusropt共14个文件夹。
然后解压BusyBox:
#tarjxvfbusybox-.tar.bz2–C/opt
进入源目录,修改Makefile
第164行,CROSS_COMPILE=arm-linux-
第190行,ARCH=arm
编译安装:
#make;#makeinstall
然后就会在上一级目录下生成rootfs文件夹,里面包含几个文件夹/bin/sbin/usrlinuxrc把这些文件全部复制到刚建好的root_目录下,
#cp–rf*../root_
在dev目录下,创建两个设备节点:
#mknodconsolec51
#mknodnullc13
然后进入自己建立的etc目录,拷贝Busybox-/examples/bootfloopy/etc/*到当前目录下。
#cp-r../../busybox-/examples/bootfloopy/etc/*./
包括文件:
fstabinit.dinittabprofile
拷贝/etc/passwd,/etc/group,/etc/shadow到当前目录下。
#cp/etc/passwd./
#cp/etc/group./
#cp/etc/shadow./
2)构建文件系统
1.新建文件系统目录:
#mkdirroot_web
2.复制_install中的bin,sbin,usr,linuxrc到root_web
3.在root_web中新建dev、etc、home、lib、mnt、opt、proc、root、sys、tmp、var、
4.在各个目中添加相应容。
5busybox的移植
这部分主要由我和田正民同学完成。
busybox的配置程序和linux核菜单配置方式简直一模一样.在前面已经用make menuconfig方式配置linux的核,所以很容易上手。
1)Busybox是一个轻型的linux命令工具集,在此使用的是busybox-版本。
用户可以从其官方下载最新版本()。
2)解压:
#tarzxvfboa-.tar.gz–C/opt
3)生成配置文件:
#./configure
修改Makefile:
viMakefile
将CC=gcc和CPP=gcc–E修改为:
CC=arm-linux-gccCPP=arm-linux-g++-E
4)修改src/boa.c
注释掉:
if(setuid(0)!
=-1){
DIE(“ickyLinuxkernelbug!
”);
}
修改src/compat.h
将#defineTIMEZONE_OFFSET(foo)foo##->tm_gmtoff
修改为:
#defineTIMEZONE_OFFSET(foo)foo->tm_gmtoff
5)编译并优化
#make,#arm-linux-stripboa
6)移植cgic库
a)解压:
b)修改Makefile:
viMakefile
将:
CC=gccAR=arRANLIB=ranlib
修改为CC=arm-linux-gccAR=arm-linux-arRANLIB=arm-linux-ranlib
将install:
libcgic.a
cplibcgic.a/usr/local/lib
cpcgic.h/usr/local/include
修改为
install:
libcgic.a
cplibcgic.a/opt/arm-2011.03/arm-none-linux-gnueabi/libc/armv4t/lib
cpcgic.h/opt/arm-2011.03/arm-none-linux-gnueabi/libc/usr/include
7)编译并优化
#make,#arm-linux-stripcapture
配置web服务器
修改boa.conf
主要修改容:
Userroot
Grouproot
ServerNameClover
DocumentRoot/web
DirectoryIndexindex.html
ScriptAlias/cgi-bin//web/cgi-bin/
8)配置cgic库
在root_web中新建目录:
mkdirweb;cdweb;mkdircgi-bin
复制cgic库:
cp/opt/cgic205/capture/opt/root_web/web/cgi-bin
6嵌入式web服务器boa的移植
6.1Boa的编译
1.下载Boa源码
下载地址:
.boa.org/,或者
最新发行版本:
下载,注意:
从boa上下载的是,解压方式一样
解压:
2.生成Makefile文件
直接运行src/configure文件
3.修改Makefile文件
a、修改CC=gcc
为CC=arm-linux-gcc
b.修改CPP=gcc–E
为CPP=arm-linux-gcc–E
4.编译
#make
出现一个错误:
gcc-g-O2-pipe-Wall-I.-c-outil.outil.c
util.c:
100:
1:
error:
pasting"t"and"->"doesnotgiveavalidpreprocessingtokenmake:
***[util.o]Error1
解决方法:
修改src/compat.h
找到
#defineTIMEZONE_OFFSET(foo)foo##->tm_gmtoff
修改成
#defineTIMEZONE_OFFSET(foo)(foo)->tm_gmtoff
重新执行make指令,得到名为boa的可执行文件。
#arm-linux-stripboa
arm-linux-strip处理过后,将去掉其中的调试信息,执行文件大小也将小很多。
6.2Boa的配置
Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。
在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。
1.Group的修改
修改Groupnogroup为Group0由于在/etc/group文件中没有nogroup组,所以设成0。
另外在/etc/passwd中有nobody用户,所以Usernobody不用修改。
2.ScriptAlias的修改
修改ScriptAlias/cgi-bin//usr/lib/cgi-bin/
为ScriptAlias/cgi-bin//var//cgi-bin/
3.ServerName的设置
修改#ServerName
为ServerName.your.org.here
注意:
该项默认为未打开,执行Boa会异常退出,提示“gethostbyname:
:
Nosuchfileordirectory”,所以必须打开。
其它默认设置即可。
6.3Boa的执行
成功配置以后,还需要创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/,将静态网页存入该目录下(可以将主机/usr/share/doc/HTML/目录下的index.html文件和img目录复制到/var/www目录下),创建CGI脚本所在录/var//cgi-bin,将cgi的脚本存放在该目录下。
另外还要将mime.types文件复制/etc目录下,通常可以从linux主机的/etc目录下直接复制即可。
实际运行时,可以将index.html文件、img目录和mime.types文件放到CF卡目录下,建立目录后,拷贝至相应目录。
制作run.sh
mkdir/etc/boa
cp/cf/boa/boa.conf/etc/boa/
mkdir/var/log
mkdir