1、Linux与嵌入式系统实验指导书春 0424 1 Linu与嵌入式系统实验指导书计算机与通信学院兰州理工大学2016年目录实验一 虚拟机及linux系统的安装 1实验二 LINUX相关命令及makefile文件的编写 4实验三 多线程应用程序设计 8实验四 嵌入式WEB服务器设计 15实验五 点阵式LED实验 21实验一 虚拟机及linux系统的安装一、实验目的熟悉Linux开发环境,掌握虚拟机软件VMware的安装方法,掌握Fedora Core 4 Linux发行版的安装。了解VMware tools的用途;掌握VMware tools的安装方法;初步了解部分Linux命令的使用。二、实验
2、原理虚拟机的配置,Linux的安装与基本命令的操作。三、实验仪器及器件硬件:UP-NETARM2410-S嵌入式实验平台、PC机。软件:PC机操作系统Fedora Core 4 Linux(或者Red flag)MINICOMARM-LINUX开发环境或超级终端。四、实验内容和步骤本次实验使用Fedora Core 4 Linux(或者Red flag)操作系统环境。1、准备如下安装文件:VMware.Workstation.5.5中文版(虚拟机)带注册机FC4-i386-disc1.isoFC4-i386-disc2.isoFC4-i386-disc3.isoFC4-i386-disc4.i
3、soFC4-i386-rescuecd.iso2、VMware软件的安装双击安装文件,按照提示进行下一步需要输入注册码时,运行注册机目录下的keygen.exe,点击generate,serial框中的即为注册码。安装完成后,运行汉化补丁目录下的HF_Vmware5.5进行汉化VMvare tools的用途:在Linux中方便地访问Windows系统下的文件(通过目录/mnt/hgfs)增强桌面图形性能,屏幕分辨率鼠标可以在Windows系统和虚拟机之间方便切换3、VMware tools的安装打开VMware软件,启动已安装的Linux系统,通过菜单虚拟机-安装vmware工具,点击inst
4、all,在Linux桌面上,点鼠标右键,打开终端,输入以下命令:mount t iso9660 /dev/cdrom /mntcd /mntcp VMwareTools-5.5.0-18463.tar.gz /tmp cd /tmpumount /dev/cdromtar zxvf VmwareTools-5.5.0-18463.tar.gzcd vmware-tools-distrib./vmware-install.pl一路回车虚拟机-虚拟机设置-选项-共享文件夹-添加(名称d,主机文件夹D:,名称e,主机文件夹E:),确定reboot4、验证是否安装成功 1)鼠标是否能方便地在Windo
5、ws和虚拟机之间切换 2)在Linux中能否通过目录/mnt/hgfs访问Windows下的文件5、Fedora Core 4 Linux发行版的安装(或者安装red flag 版本,过程一样,自己选择)在VMware软件中,新建虚拟机-下一步,选择典型-下一步,选择linux-下一步,选择linux安装的位置-下一步,使用桥接网络-下一步,完成。编辑虚拟机-设置,选择cdrom1,使用iso映像,选中FC4-i386-disc1.iso,确定启动此虚拟机,进入linux安装界面,选择skip,跳过光盘检测,按next,选择简体中文,按next,下一步,安装类型选择定制,下一步;选择手工分区,
6、下一步,弹出警告框,选择是;新建,选择文件类型为swap,大小为1000MB,确定。新建,选择文件类型为ext3,挂载点为/,大小为“使用全部可用空间”,确定,分区结果如下图所示:下一步,下一步,选择无防火墙,弹出警告框,点击继续下一步,设置用户口令,输入两次,必须相同,至少为6个字符下一步,选择软件包组界面,选择全部(7G左右,保证硬盘空间充足,避免今后使用时出现一些问题)按照提示,点击下一步,开始安装第一张盘FC4-i386-disc1.iso安装完后,有提示音编辑虚拟机-设置,选择cdrom1,使用iso映像,选中FC4-i386-disc2.iso,确定,继续第二张盘的安装完成四张盘的
7、安装后,自动重启,进入系统按提示点击下一步,设置自己的用户名,系统默认有个超级用户root在提示输入用户名时,可以输入自己设置的用户名和密码(进入系统后,使用用户权限,安全),也可以输入root用户,密码为在第11步里设置的(进入系统后,使用超级用户权限)五、思考题虚拟机的工作原理?怎样完成和windows文件的共享?六、预习要求虚拟机的配置,Linux的基本操作。实验二 LINUX相关命令及makefile文件的编写一、实验目的了解Linux系统中的用户管理;掌握Linux系统中用户管理相关的常用命令;了解Linux系统中的文件和目录管理;掌握Linux系统中文件和目录管理相关的常用命令;掌
8、握Linux系统中其它的一些常用命令;掌握文本编辑器vi的使用方法;了解makefile的编写规则;通过make命令和makefile文件实现自动化编译。二、实验原理Linux的基本操作;C语言的基础知识、程序调试的基础知识和方法。 三、实验仪器及器件硬件:UP-NETARM2410-S嵌入式实验平台、PC机。软件:PC机操作系统Fedora Core 4 Linux(或者RED flag)MINICOM(或超级终端)ARM-LINUX开发环境四、实验内容和步骤1、Linux是一个支持多用户的操作系统,其中root用户必不可少,root用户具有超级管理权限。其他用户具有一般权限,Linux还支
9、持用户组管理。2、最常使用的一些命令:who命令:显示系统中当前有哪些用户在线,显示的了用户ID,终端,登录IP,上线时间,停留时间,CPU使用量,动作等等。passwd命令:用来更改用户的密码su命令:从一般用户切换到root用户,需要输入密码useradd命令:添加新用户userdel命令:删除用户usermod命令:修改用户账号groupadd命令:增加新的用户组groupdel命令:删除用户组groupmod命令:修改用户组gpasswd命令:管理组成员last命令:显示系统开机以来或是从每月初登录用户的信息3、练习 1)、在Linux下将root用户的密码修改为Linux#1 2)、
10、创建用户user01,user02,user03,创建用户组group1,group23)、将用户user01、user02划归group1组,将用户user03划归group2组4、Linux系统中的目录及各个目录的大致作用: / :根目录 /bin: 存放必要的命令 /boot :存放内核以及启动所需的文件等 /dev: 存放设备文件 /etc :存放系统的配置文件 /home :用户文件的主目录,用户数据存放在其主目录中 /lib: 存放必要的运行库 /mnt: 存放临时的映射文件系统,我们常把软驱和光驱挂装在这里的floppy和cdrom子目录下。 /proc: 存放存储进程和系统信息
11、 /root: 超级用户的主目录 /sbin: 存放系统管理程序 /tmp: 存放临时文件的目录 /usr: 包含了一般不需要修改的应用程序,命令程序文件、程序库、手册和其它文档。 /var: 包含系统产生的经常变化的文件,例如打印机、邮件、新闻等假脱机目录、日志文件、格式化后的手册页以及一些应用程序的数据文件等等。 5、Linux系统中的文件类型:文本文件、C语言源文件、二进制的可执行文件、shell文件。目录文件设备文件,如软驱A为/dev/fd06、常用命令 1、cat命令:将文件输出或重定向到其它文件 2、cd命令:切换工作目录 3、cp命令:复制文件或目录 4、mv命令:将一个文件移
12、至另一文件,或将数个文件移至另一目录 5、rm命令:删除文件或目录 6、ls命令:显示指定目录下的内容 7、mkdir命令:建立目录 8、rmdir命令:删除空的目录 9、touch命令:创建空文件 10、wc命令:该命令统计给定文件中的字节数、字数、行数11、pwd命令:显示当前所在目录的绝对路径名称12、more命令:类似cat,不过会一页一页地显示13、find命令:在指定的目录及子目录中查找匹配条件的文件14、grep命令:文本搜索命令,支持正则表达式15、ln命令:创建软链接或硬链接16、chgrp命令:更改文件或目录的所属群组17、chmod命令:更改文件或目录的权限18、chow
13、n命令:改变文件或目录的所有者7、网络管理: 1、ifconfig命令:配置或查看网络接口参数 2、ping命令:测试本地到目的主机是否连通 3、netstat命令:显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况 4、traceroute命令:显示数据包到主机间的路径 5、route命令:查看并编辑IP路由表 6、mesg命令:打开或关闭其他用户对自己登录终端的广播功能 7、write命令:向指定的用户发送信息8、进程管理 1、ps命令:显示当前运行进程的状态 2、kill命令:发送特定信号给id为pid的进程 3、top命令:实时显示进程的动态9
14、、文件系统 1、fdisk命令:查看或创建磁盘分区 2、df命令:显示文件系统的状况 3、dd命令:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。 4、fsck命令:检查与修复文件系统 5、mkfs命令:在特定的分区上建立文件系统 6、mount命令:将文件系统挂在目录的某个位置之上。这个命令可以被用来挂上任何的文件系统,甚至可以用-o loop选项将某个一般的文件当成硬盘分区挂载。这对于ramdisk或是ISO9660的镜像文件之解读非常实用。10、系统管理 1、clear命令:清除屏幕 2、export命令:用于设置或显示环境变量 3、halt命令:关闭系统 4
15、、init命令:所有进程的父进程,改变运行层级 5、shutdown命令:关机程序 6、reboot命令:重新启动11、备份压缩 1、tar命令:对文件或目录进行打包或解包 2、gzip/gunzip命令:压缩和解压缩 3、bzip2/bunzip2命令:比gzip压缩效率更高的压缩和解压缩12、其它 1、cal命令:显示日历 2、at命令:可以让用户指定在特定时刻执行某个程序或命令13、vi的三种工作模式:1)、命令模式:执行相关文本编辑命令2)、输入模式:输入文本3)、末行模式:实现查找、替换、保存、多文件操作等等功能4)、进入vi,直接在Shell提示符下键入vi 文件名称,如果该文件在
16、当前目录不存在,则vi创建之。5)、退出vi14、假设一个程序由test1.c,test2.c两个源文件组成,test1.c文件需要包含头文件test1.h,test2.c需要包含test2.h15、编写一个简单的makefile文件如下: Test:test1.o test2.o Gcc o test test1.o test2.o Test1.o:test1.c test1.h Gcc c o test1.o test1.c Test2.o:test2.c test2.h Gcc c o test2.o test2.c Clean: Rm f *.o16、在shell环境下,运行make,
17、则自动编译程序,生成可执行程序test17、根据以上实例和makefile的编写规则,编写多个c语言程序,并使用make来实现自动编译。 五、思考题Makefile是如何工作的?其中的宏定义分别是什么意思?六、预习要求C语言的基础知识、程序调试的基础知识和方法,Linux的基本操作。实验三 多线程应用程序设计一、实验目的了解 Linux 下多线程程序设计的基本原理;学习 pthread 库函数的使用。二、实验原理Linux的基本操作;C语言的基础知识、程序调试的基础知识和方法。 三、实验仪器及器件硬件:UP-NETARM2410-S嵌入式实验平台、PC机。软件:PC机操作系统Fedora Co
18、re 4 Linux(或者RED flag)MINICOM(或超级终端)ARM-LINUX开发环境四、实验内容和步骤读懂 pthread.c 的源代码,熟悉几个重要的PTHREAD 库函数的使用。掌握共享锁和信号量的使用方法。进入/arm2410cl/exp/basic/02_pthread 目录,运行make 产生pthread 程序,使用NFS方式连接开发主机进行运行实验。1多线程程序的优缺点多线程程序作为一种多任务、并发的工作方式,有以下的优点:1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而
19、使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。2) 使多CPU 系统更加有效。操作系统会保证当线程数不大于CPU 数目时,不同的线程运行于不同的CPU 上。3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。LIBC 中的pthread 库提供了大量的API 函数,为用户编写应用程序提供支持。2实验源代码与结构流程图本实验为著名的生产者消费者问题模型的实现,主程序中分别启动生产者线程和消费者线程。生产者线程不断顺序地将0 到1000 的数字写入共享的循环缓冲区,同时消
20、费者线程不断地从共享的循环缓冲区读取数据。流程图如图2.2.1 所示:本实验具体代码如下:/* The classic producer-consumer example.* Illustrates mutexes and conditions.* by Zou jian guo * 2003-12-22*/#include #include #include #include pthread.h#define BUFFER_SIZE 16/* 设置一个整数的圆形缓冲区 */struct prodcons int bufferBUFFER_SIZE; /* 缓冲区数组 */pthread_mu
21、tex_t lock; /* 互斥锁 */int readpos, writepos; /* 读写的位置*/pthread_cond_t notempty; /* 缓冲区非空信号 */pthread_cond_t notfull; /*缓冲区非满信号 */;/*-*/*初始化缓冲区*/void init(struct prodcons * b)pthread_mutex_init(&b-lock, NULL);pthread_cond_init(&b-notempty, NULL);pthread_cond_init(&b-notfull, NULL);b-readpos = 0;b-writ
22、epos = 0;/*-*/* 向缓冲区中写入一个整数*/void put(struct prodcons * b, int data)pthread_mutex_lock(&b-lock);/*等待缓冲区非满*/while (b-writepos + 1) % BUFFER_SIZE = b-readpos) printf(wait for not fulln);pthread_cond_wait(&b-notfull, &b-lock);/*写数据并且指针前移*/b-bufferb-writepos = data;b-writepos+;if (b-writepos = BUFFER_SI
23、ZE) b-writepos = 0;/*设置缓冲区非空信号*/pthread_cond_signal(&b-notempty);pthread_mutex_unlock(&b-lock);/*-*/*从缓冲区中读出一个整数 */int get(struct prodcons * b)int data;pthread_mutex_lock(&b-lock);/* 等待缓冲区非空*/while (b-writepos = b-readpos) printf(wait for not emptyn);pthread_cond_wait(&b-notempty, &b-lock);/* 读数据并且指
24、针前移 */data = b-bufferb-readpos;b-readpos+;if (b-readpos = BUFFER_SIZE) b-readpos = 0;/* 设置缓冲区非满信号*/pthread_cond_signal(&b-notfull);pthread_mutex_unlock(&b-lock);return data;/*-*/#define OVER (-1)struct prodcons buffer;/*-*/void * producer(void * data)int n;for (n = 0; n %dn, n);put(&buffer, n);put(&
25、buffer, OVER);printf(producer stopped!n);return NULL;/*-*/void * consumer(void * data)int d;while (1) d = get(&buffer);if (d = OVER ) break;printf( %d-getn, d);printf(consumer stopped!n);return NULL;/*-*/int main(void)pthread_t th_a, th_b;void * retval;init(&buffer);pthread_create(&th_a, NULL, produ
26、cer, 0);pthread_create(&th_b, NULL, consumer, 0);/* 等待生产者和消费者结束 */pthread_join(th_a, &retval);pthread_join(th_b, &retval);return 0;3主要函数分析:下面我们来看一下,生产者写入缓冲区和消费者从缓冲区读数的具体流程,生产者首先要获得互斥锁,并且判断写指针+1 后是否等于读指针,如果相等则进入等待状态,等候条件变量notfull;如果不等则向缓冲区中写一个整数,并且设置条件变量为notempty,最后释放互斥锁。消费者线程与生产者线程类似,这里就不再过多介绍了。流程图如
27、下:4.实验步骤1、阅读源代及编译应用程序进入 exp/basic/02_pthread 目录,使用vi 编辑器或其他编辑器阅读理解源代码。运行make产生pthread 可执行文件。2、下载和调试切换到 minicom 终端窗口,使用NFS mount 开发主机的/arm2410cl 到/host 目录。注:/host 在ARM 端如果不存在,请选择/mnt/nfs 目录挂载进入/host/exp/basic/pthread 目录,运行pthread,观察运行结果的正确性。运行程序最后一部分结果如下:wait for not emptyput-994put-995put-996put-997
28、put-998put-999producer stopped!993-get994-get995-get996-get997-get998-get999-getconsumer stopped!/host/exp/basic/02_pthread五、思考题1加入一个新的线程用于处理键盘的输入,并在按键为ESC 时终止所有线程。2线程的优先级的控制。六、预习要求C语言的基础知识、程序调试的基础知识和方法,Linux的基本操作。实验四 嵌入式WEB服务器设计一、实验目的掌握在 ARM 开发板实现一个简单WEB 服务器的过程。 学习在 ARM 开发板上的SOCKET 网络编程。 学习 Linux 下的signal()函数的使用。二、实验原理C 语言的基础知识、程序调试的基础知识和方法,Linux 环境下常用命令和Vi 编辑器的操作。HTTP1.0 协议的基本知识。SOCKET 编程的几个基本函数的使用方法。三、实验仪器及器件硬件:UP-NETARM2410-S嵌入式实验平台、PC机。软件:PC机操作系统Fedor
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1