基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955Word格式.docx

上传人:b****4 文档编号:16943780 上传时间:2022-11-27 格式:DOCX 页数:14 大小:150.18KB
下载 相关 举报
基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955Word格式.docx_第1页
第1页 / 共14页
基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955Word格式.docx_第2页
第2页 / 共14页
基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955Word格式.docx_第3页
第3页 / 共14页
基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955Word格式.docx_第4页
第4页 / 共14页
基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955Word格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955Word格式.docx

《基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955Word格式.docx》由会员分享,可在线阅读,更多相关《基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955Word格式.docx(14页珍藏版)》请在冰豆网上搜索。

基于嵌入式实时操作系统的应用程序开发电子132黎杰华131955Word格式.docx

使用桥接模式的虚拟系统和宿主机器的关系,就像连接在同一个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为:

⒊在你可访问网络的那块网卡上设置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

原始数据记录(自行设计记录表格):

注:

此表格必须附在《实验报告》内一并交给任课老师。

指导教师对学生情况记录:

《综合设计性实验》实验报告

实验名称:

二实验要求:

设置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

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

/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<

linux/module.h>

linux/kernel.h>

linux/fs.h>

linux/init.h>

linux/delay.h>

asm/irq.h>

asm/arch/regs-gpio.h>

asm/hardware.h>

#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);

caseIOCTL_LED_OFF:

//设置指定引脚的输出电平为1

s3c2410_gpio_setpin(led_table[arg],1);

default:

/*这个结构是字符设备驱动程序的核心

*当应用程序操作设备文件时所调用的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;

initialized\n"

*执行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"

//遵循的协议

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1