基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955.docx
- 文档编号:4027719
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:14
- 大小:150.18KB
基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955.docx
《基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955.docx》由会员分享,可在线阅读,更多相关《基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955.docx(14页珍藏版)》请在冰豆网上搜索。
基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955
广州大学
综合设计性实验
报告册
实验项目基于嵌入式实时操作系统的应用程序开发
学院物理与电子工程学院年级专业班电子132
姓名黎杰华学号1319200055成绩
实验地点电子楼618指导教师揭海
《综合设计性实验》预习报告
实验项目:
基于嵌入式实时操作系统的应用程序开发
一引言:
这次实验主要是基于ubuntu进行arm芯片的开发,目的是为了熟悉在linux环境下的程序开发,这次需要我们在arm开发板上运行一个led控制程序,并在LCD触摸屏上能够对LED进行控制,这需要我们熟悉linux下的程序编写与编译,和相关的QT编写。
二实验目的:
1.学习在VMware中的ubuntu中搭建好开发环境,配置好环境变量
2.学习交叉编译,学习基本linux命令。
3.学会用C语言编写驱动程序,以及驱动程序的编译和使用,学习qt界面编程
三实验原理:
交叉编译器可以将源代码编译成arm开发板上可以运行的程序。
使用带有lcd驱动的linux内核可以驱动开发板上3.5英寸的显示屏,nfs可以建立一个pc与开发板共享的目录,让pc上交叉编译好的程序很方便地在开发板上运行。
VMware虚拟机软件,是全球桌面到数据中心虚拟化解决方案的领导厂商。
全球不同规模的客户依靠VMware来降低成本和运营费用、确保业务持续性、加强安全性并走向绿色。
VMWare提供了三种工作模式,它们是bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。
要想在网络管理和维护中合理应用它们,就应该先了解一下这三种工作模式。
bridged(桥接模式)
在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。
在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。
同时,由于这个虚拟系统是局域网中的一个独立的主机系统,那么就可以手工配置它的TCP/IP配置信息,以实现通过局域网的网关或路由器访问互联网。
使用桥接模式的虚拟系统和宿主机器的关系,就像连接在同一个Hub上的两台电脑。
想让它们相互通讯,你就需要为虚拟系统配置IP地址和子网掩码,否则就无法通信。
如果你想利用VMWare在局域网内新建一个虚拟服务器,为局域网用户提供网络服务,就应该选择桥接模式。
host-only(主机模式)
在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模式。
在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。
提示:
在host-only模式下,虚拟系统和宿主机器系统是可以相互通信的,相当于这两台机器通过双绞线互连。
在host-only模式下,虚拟系统的TCP/IP配置信息(如IP地址、网关地址、DNS服务器等),都是由VMnet1(host-only)虚拟网络的DHCP服务器来动态分配的。
如果你想利用VMWare创建一个与网内其他机器相隔离的虚拟系统,进行某些特殊的网络调试工作,可以选择host-only模式。
⒈在虚拟机上安装操作系统的时候,系统的IP设置为192.168.0.99,DNS:
192.168.0.1
⒉修改虚拟机的VMnet1的ip为:
192.168.0.1
⒊在你可访问网络的那块网卡上设置Internet连接共享,具体设置方式为:
属性-->;;高级-->;;连接共享,然后选择VMnet1,将网络共享给它
⒋在本机上ping一下192.168.0.99,如果能ping通,就说明你设置正确了。
⒌进入你虚拟机中的linux操作系统,尽情的网上冲浪吧
NAT(网络地址转换模式)
使用NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。
也就是说,使用NAT模式可以实现在虚拟系统里访问互联网。
NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,无法进行手工修改,因此虚拟系统也就无法和本局域网中的其他真实主机进行通讯。
采用NAT模式最大的优势是虚拟系统接入互联网非常简单,你不需要进行任何其他的配置,只需要宿主机器能访问互联网即可。
如果你想利用VMWare安装一个新的虚拟系统,在虚拟系统中不用进行任何手工配置就能直接访问互联网,建议你采用NAT模式。
NFS(NetworkFileSystem)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。
在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
以下是NFS最显而易见的好处:
1.节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
2.用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
3.一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。
这可以减少整个网络上可移动介质设备的数量。
四实验内容:
设置window下的虚拟机运行环境,设置好虚拟机与arm开发板下的ubuntu系统,设置好nfs,运行LED程序。
五重点问题:
安装好虚拟机,并且熟悉基本linux命令,配置好开发环境。
六参考文献:
《嵌入式系统原理与应用》清华大学出版社
广州大学
实验原始数据记录表
实验项目基于嵌入式实时操作系统的应用程序开发
指导教师揭海
姓名黎杰华班别电子132学号1319200055
学院物理与电子工程学院专业电子信息科学与技术
实验进行时间2016年6月13日第16周星期一,08时至10时;
实验地点电子楼618
原始数据记录(自行设计记录表格):
注:
此表格必须附在《实验报告》内一并交给任课老师。
指导教师对学生情况记录:
《综合设计性实验》实验报告
实验名称:
基于嵌入式实时操作系统的应用程序开发
一引言:
这次实验主要是基于ubuntu进行arm芯片的开发,目的是为了熟悉在linux环境下的程序开发,这次需要我们在arm开发板上运行一个led控制程序,并在LCD触摸屏上能够对LED进行控制,这需要我们熟悉linux下的程序编写与编译,和相关的QT编写。
二实验要求:
设置window下的虚拟机运行环境,设置好虚拟机与arm开发板下的ubuntu系统,运行LED程序。
三实验仪器:
计算机(PC),GEC2410开发板,LCD触摸屏,串口线,交叉网线
四实验步骤:
1.安装VMwareTools
点击VMware菜单“虚拟机”,若显示菜单项“重新安装VMwareTools”则表示该VM已经安装过VMwareTools,否则点击菜单项“安装VMwareTools”进行安装。
在自动弹出显示的文件管理窗口(一般是光驱)中会显示VMwareTools-****.tar.gz文件(具体文件名星号内容可能有一点区别),将它复制到/tmp目录下。
打开终端窗口(Terminal)执行以下指令
umount/dev/cdrom(很重要)
cd/tmp
sudotar-zxvfVMwareTools-***.tar.gz(可能要求输入管理员密码)
cdvmware-tools-distrib
sudo./vmware-install.pl
接下来就是一直按回车。
最后一个选项是设置虚拟机模拟Ubuntu界面的窗口大小
最后就看到Enjoy
安装成功
reboot
安装完全结束。
2.网络设置
1、设置Ubuntu虚拟机网络连接为“桥接模式”(Bridge)
图1
图2
2、设置Windows、Ubuntu虚拟机和开发板的IP
确保它们在同一网段!
Ubuntu虚拟机中的设置如下:
图3
图4
设置好后,点击图3所示菜单中的Autoeth0,刷新一下。
开发板设置如下:
PC连接开发板串口,开发板上电,在超级终端中进入控制台,用命令ifconfig查看开发板网络参数。
例如:
eth0Linkencap:
EthernetHWaddr08:
90:
00:
A0:
90:
90
inetaddr:
192.168.2.230
若不符,vi修改/etc下的网络配置文件,重启即可。
用交叉网线连接PC和开发板,互相ping一下,看是否已经连通。
3.安装交叉编译器
将4.3.3.tar.bz2复制至某个目录,比如/mywork/to618,在终端中执行命令解压。
$tarxvjfarm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2
将路径/mywork/to618/4.3.3/bin加入/etc/environment文件中PATH环境变量。
注销后再次登录即可生效,输入命令
$arm-linux-gcc–v
若出现以下类似的信息表示编译器可用。
Usingbuilt-inspecs.
Target:
arm-none-linux-gnueabi
Configuredwith:
/scratch/maxim/arm-lite/src-4.3-arm-none-linux-gnueabi-lite/gcc-4.3/configure--build=i686-pc-linux-gnu--host=i686-pc-linux-gnu--target=arm-none-linux-gnueabi--enable-threads--disable-libmudflap--disable-libssp--disable-libstdcxx-pch--with-gnu-as--with-gnu-ld--with-specs='%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:
;:
-funwind-tables}'--enable-languages=c,c++--enable-shared--enable-symvers=gnu--enable-__cxa_atexit--with-pkgversion='SourceryG++Lite2009q1-176'--with-bugurl=--disable-nls--prefix=/opt/codesourcery--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc--with-build-sysroot=/scratch/maxim/arm-lite/install-4.3-arm-none-linux-gnueabi-lite/arm-none-linux-gnueabi/libc--with-gmp=/scratch/maxim/arm-lite/obj-4.3-arm-none-linux-gnueabi-lite/host-libs-2009q1-176-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--with-mpfr=/scratch/maxim/arm-lite/obj-4.3-arm-none-linux-gnueabi-lite/host-libs-2009q1-176-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr--disable-libgomp--enable-poison-system-directories--with-build-time-tools=/scratch/maxim/arm-lite/install-4.3-arm-none-linux-gnueabi-lite/arm-none-linux-gnueabi/bin--with-build-time-tools=/scratch/maxim/arm-lite/install-4.3-arm-none-linux-gnueabi-lite/arm-none-linux-gnueabi/bin
Threadmodel:
posix
gccversion4.3.3(SourceryG++Lite2009q1-176)
4.使用Linux内核
在终端下执行命令
tarxvjf……
将linux-2.6.22.6-for3inchLCD-test.tar.bz2解压至/mywork下某个目录。
5.设置和使用NFS
通过NFS可以很方便地将PC上交叉编译好的程序在开发板上运行。
PC端设置:
编辑NFS服务的配置文件/etc/exports,添加以下内容:
/mywork/to618*(rw,sync,no_root_squash)
修改完毕后,重启NFS服务(启动服务用start,关闭用stop)
$sudo/etc/init.d/nfs-kernel-serverrestart
开发板:
在终端中输入以下命令
cd/mnt
mkdirnfs_root
mount-onolock192.168.2.57:
/mywork/to618/mnt/nfs_root
其中192.168.2.57为Ubuntu实际的IP。
ls/mnt/nfs_root查看是否挂载成功
为了今后使用方便,可编写mount_mynfs脚本文件放在开发板的/usr/bin,内容如下
#!
/bin/sh
mount-onolock192.168.2.57:
/Ubuntu中设置的NFS目录/mnt/nfs_root
用命令
chmod744mount_mynfs
增加可执行权限
要挂接NFS时,可直接执行
mount_mynfs
确认不是处于nfs_root目录中,使用下面命令可以取消挂接
umount/mnt/nfs_root
此时,即可在开放板上访问到ubuntu上共享的nfs目录,/mywork/to618下存放了已经交叉编译好的程序,将该目录下的s3c24xx_leds_234.ko复制到开发板的/usr目录下,命令
cp/mywork/to618/s3c24xx_leds_234.ko/usr
再将该目录下的devCtrlve复制到/usr目录,命令
cp/mywork/to618/devCtrlve/usr
然后用命令
chmod744devCtrlve增加可执行权限,
输入./devCtrlve运行程序,
此时开发板上将会出现控制界面
五数据处理及实验结果表示:
点击LEDx按钮,对应LED亮灭;勾选流水灯,LED开始运行流水灯程序,此时调节旋钮可以改变流水灯的速度。
六实验结果分析:
如果一开始屏幕触摸功能使用不了,需要输入命令:
ts_calibrate校准画面
在终端输入./devCtrlve-qws运行程序,
此时开发板上将会出现以上控制界面
点击界面的led1,2,3,4可以控制各个led灯的亮灭,并且屏幕上会显示出led灯状态,
选择流水灯功能,可以实现led流水灯显示,此时旋钮可以控制流水灯转换的速度,最小100ms,最大5000ms。
七实验心得:
本人对linux系统比较熟悉,有过arm开发经验,但在Ubuntu下安装工具花费了很多时间,在LED驱动程序没有更深入的编写,对Qt的使用也有一定的了解,Qt4.5的编译安装要花费3个小时,这还是在正常顺利的情况下,而在Ubuntu14下更是bugs多多,然而坚持就是胜利,通过网上搜索解决问题,一步步提升自己的嵌入式开发水平。
八参考文献:
《嵌入式系统原理与应用》清华大学出版社
九附录(程序源代码等,应有适当的注释):
#include
#include
#include
#include
#include
#include
#include
#include
#defineDEVICE_NAME"leds"/*LED设备名称,设备加载后用命令cat/proc/devices可看到*/
#defineLED_MAJOR231/*主设备号,可以设为0,表示由内核自动分配主设备号*/
/*引脚输出电平定义*/
#defineIOCTL_LED_ON0
#defineIOCTL_LED_OFF1
/*设备使用到的引脚名称*/
staticunsignedlongled_table[]={
S3C2410_GPF4,
S3C2410_GPF5,
S3C2410_GPF6,
S3C2410_GPF7,
};
/*引脚配置为输出*/
staticunsignedintled_cfg_table[]={
S3C2410_GPF4_OUTP,
S3C2410_GPF5_OUTP,
S3C2410_GPF6_OUTP,
S3C2410_GPF7_OUTP,
};
/*应用程序对设备文件/dev/leds执行open()时,就会调用s3c24xx_leds_open函数
*/
staticints3c24xx_leds_open(structinode*inode,structfile*file)
{
inti;
for(i=0;i<4;i++){
//设置GPIO引脚的功能,本驱动中LED所涉及到的引脚设为输出功能
s3c2410_gpio_cfgpin(led_table[i],led_cfg_table[i]);
}
return0;
}
/*应用程序对设备文件/dev/leds执行ioclt()时,就会调用s3c24xx_leds_ioctl函数
*/
staticints3c24xx_leds_ioctl(
structinode*inode,
structfile*file,
unsignedintcmd,
unsignedlongarg)
{
if(arg>4){
return-EINVAL;
}
switch(cmd){
caseIOCTL_LED_ON:
//设置指定引脚的输出电平为0
s3c2410_gpio_setpin(led_table[arg],0);
return0;
caseIOCTL_LED_OFF:
//设置指定引脚的输出电平为1
s3c2410_gpio_setpin(led_table[arg],1);
return0;
default:
return-EINVAL;
}
}
/*这个结构是字符设备驱动程序的核心
*当应用程序操作设备文件时所调用的open、read、write等函数,
*最终会调用这个结构中的对应函数
*/
staticstructfile_operationss3c24xx_leds_fops={
.owner=THIS_MODULE,/*这是一个宏,指向编译模块时自动创建的__this_module变量*/
.open=s3c24xx_leds_open,
.ioctl=s3c24xx_leds_ioctl,
};
/*
*执行insmods3c24xx_leds.ko命令时就会调用这个函数
*/
staticint__inits3c24xx_leds_init(void)
{
intret;
/*注册字符设备驱动程序
*参数为主设备号、设备名称、file_operations结构
*这样,主设备号和具体的file_operations结构联系起来了
*操作主设备为LED_MAJOR的设备文件时,就会调用s3c24xx_leds_fops中的相关成员函数
*LED_MAJOR可以设为0,表示由内核自动分配主设备号
*/
ret=register_chrdev(LED_MAJOR,DEVICE_NAME,&s3c24xx_leds_fops);
if(ret<0){
printk(DEVICE_NAME"can'tregistermajornumber\n");
returnret;
}
printk(DEVICE_NAME"initialized\n");
return0;
}
/*
*执行rmmods3c24xx_leds.ko命令时就会调用这个函数
*/
staticvoid__exits3c24xx_leds_exit(void)
{
/*卸载驱动程序*/
unregister_chrdev(LED_MAJOR,DEVICE_NAME);
}
/*这两行指定驱动程序的初始化函数和卸载函数*/
module_init(s3c24xx_leds_init);
module_exit(s3c24xx_leds_exit);
/*描述驱动程序的一些信息,不是必须的*/
MODULE_AUTHOR("gzhu");//驱动程序的作者
MODULE_DESCRIPTION("S3C2410/S3C2440LEDDriver");//一些描述信息
MODULE_LICENSE("GPL");//遵循的协议
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 嵌入式 实时 操作系统 应用程序 开发 电子 132 黎杰华 131955