Linux与嵌入式系统实验指导书春 0424 1Word文件下载.docx
- 文档编号:20966176
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:42
- 大小:1,022.95KB
Linux与嵌入式系统实验指导书春 0424 1Word文件下载.docx
《Linux与嵌入式系统实验指导书春 0424 1Word文件下载.docx》由会员分享,可在线阅读,更多相关《Linux与嵌入式系统实验指导书春 0424 1Word文件下载.docx(42页珍藏版)》请在冰豆网上搜索。
cd/mnt
cpVMwareTools-5.5.0-18463.tar.gz/tmp
cd/tmp
umount/dev/cdrom
tarzxvfVmwareTools-5.5.0-18463.tar.gz
cdvmware-tools-distrib
./vmware-install.pl
一路回车
虚拟机->
虚拟机设置->
选项->
共享文件夹->
添加(名称d,主机文件夹D:
\,名称e,主机文件夹E:
\),确定
reboot
4、验证是否安装成功
1)鼠标是否能方便地在Windows和虚拟机之间切换
2)在Linux中能否通过目录/mnt/hgfs访问Windows下的文件
5、FedoraCore4Linux发行版的安装(或者安装redflag版本,过程一样,自己选择)
在VMware软件中,新建虚拟机->
下一步,选择典型->
下一步,选择linux->
下一步,选择linux安装的位置->
下一步,使用桥接网络->
下一步,完成。
编辑虚拟机->
设置,选择cdrom1,使用iso映像,选中FC4-i386-disc1.iso,确定
启动此虚拟机,进入linux安装界面,选择skip,跳过光盘检测,按next,选择简体中文,按next,下一步,安装类型选择定制,下一步;
选择手工分区,下一步,弹出警告框,选择是;
新建,选择文件类型为swap,大小为1000MB,确定。
新建,选择文件类型为ext3,挂载点为/,大小为“使用全部可用空间”,确定,分区结果如下图所示:
下一步,下一步,选择无防火墙,弹出警告框,点击继续
下一步,设置用户口令,输入两次,必须相同,至少为6个字符
下一步,选择软件包组界面,选择全部(7G左右,保证硬盘空间充足,避免今后使用时出现一些问题)
按照提示,点击下一步,开始安装
第一张盘FC4-i386-disc1.iso安装完后,有提示音
设置,选择cdrom1,使用iso映像,选中FC4-i386-disc2.iso,确定,继续第二张盘的安装
完成四张盘的安装后,自动重启,进入系统
按提示点击下一步,设置自己的用户名,系统默认有个超级用户root
在提示输入用户名时,可以输入自己设置的用户名和密码(进入系统后,使用用户权限,安全),也可以输入root用户,密码为在第11步里设置的(进入系统后,使用超级用户权限)
五、思考题
虚拟机的工作原理?
怎样完成和windows文件的共享?
六、预习要求
虚拟机的配置,Linux的基本操作。
实验二LINUX相关命令及makefile文件的编写
了解Linux系统中的用户管理;
掌握Linux系统中用户管理相关的常用命令;
了解Linux系统中的文件和目录管理;
掌握Linux系统中文件和目录管理相关的常用命令;
掌握Linux系统中其它的一些常用命令;
掌握文本编辑器vi的使用方法;
了解makefile的编写规则;
通过make命令和makefile文件实现自动化编译。
Linux的基本操作;
C语言的基础知识、程序调试的基础知识和方法。
PC机操作系统FedoraCore4Linux(或者REDflag)+MINICOM(或超级终端)+ARM-LINUX开发环境
1、Linux是一个支持多用户的操作系统,其中root用户必不可少,root用户具有超级管理权限。
其他用户具有一般权限,Linux还支持用户组管理。
2、最常使用的一些命令:
who命令:
显示系统中当前有哪些用户在线,显示的了用户ID,终端,登录IP,上线时间,停留时间,CPU使用量,动作等等。
passwd命令:
用来更改用户的密码
su命令:
从一般用户切换到root用户,需要输入密码
useradd命令:
添加新用户
userdel命令:
删除用户
usermod命令:
修改用户账号
groupadd命令:
增加新的用户组
groupdel命令:
删除用户组
groupmod命令:
修改用户组
gpasswd命令:
管理组成员
last命令:
显示系统开机以来或是从每月初登录用户的信息
3、练习
1)、在Linux下将root用户的密码修改为Linux#1
2)、创建用户user01,user02,user03,创建用户组group1,group2
3)、将用户user01、user02划归group1组,将用户user03划归group2组
4、Linux系统中的目录及各个目录的大致作用:
/:
根目录
/bin:
存放必要的命令
/boot:
存放内核以及启动所需的文件等
/dev:
存放设备文件
/etc:
存放系统的配置文件
/home:
用户文件的主目录,用户数据存放在其主目录中
/lib:
存放必要的运行库
/mnt:
存放临时的映射文件系统,我们常把软驱和光驱挂装在这里的floppy和cdrom子目录下。
/proc:
存放存储进程和系统信息
/root:
超级用户的主目录
/sbin:
存放系统管理程序
/tmp:
存放临时文件的目录
/usr:
包含了一般不需要修改的应用程序,命令程序文件、程序库、手册和其它文档。
/var:
包含系统产生的经常变化的文件,例如打印机、邮件、新闻等假脱机目录、日志文件、格式化后的手册页以及一些应用程序的数据文件等等。
5、Linux系统中的文件类型:
文本文件、C语言源文件、二进制的可执行文件、shell文件。
目录文件设备文件,如软驱A为/dev/fd0
6、常用命令
1、cat命令:
将文件输出或重定向到其它文件
2、cd命令:
切换工作目录
3、cp命令:
复制文件或目录
4、mv命令:
将一个文件移至另一文件,或将数个文件移至另一目录
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、chown命令:
改变文件或目录的所有者
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、文件系统
1、fdisk命令:
查看或创建磁盘分区
2、df命令:
显示文件系统的状况
3、dd命令:
把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。
4、fsck命令:
检查与修复文件系统
5、mkfs命令:
在特定的分区上建立文件系统
6、mount命令:
将文件系统挂在目录的某个位置之上。
这个命令可以被用来挂上任何的文件系统,甚至可以用-oloop选项将某个一般的文件当成硬盘分区挂载。
这对于ramdisk或是ISO9660的镜像文件之解读非常实用。
10、系统管理
1、clear命令:
清除屏幕
2、export命令:
用于设置或显示环境变量
3、halt命令:
关闭系统
4、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[文件名称],如果该文件在当前目录不存在,则vi创建之。
5)、退出vi
14、假设一个程序由test1.c,test2.c两个源文件组成,test1.c文件需要包含头文件test1.h,test2.c需要包含test2.h
15、编写一个简单的makefile文件如下:
Test:
test1.otest2.o
Gcc–otesttest1.otest2.o
Test1.o:
test1.ctest1.h
Gcc–c–otest1.otest1.c
Test2.o:
test2.ctest2.h
Gcc–c–otest2.otest2.c
Clean:
Rm–f*.o
16、在shell环境下,运行make,则自动编译程序,生成可执行程序test
17、根据以上实例和makefile的编写规则,编写多个c语言程序,并使用make来实现自动编译。
Makefile是如何工作的?
其中的宏定义分别是什么意思?
C语言的基础知识、程序调试的基础知识和方法,Linux的基本操作。
实验三多线程应用程序设计
了解Linux下多线程程序设计的基本原理;
学习pthread库函数的使用。
读懂pthread.c的源代码,熟悉几个重要的PTHREAD库函数的使用。
掌握共享锁和信号量的使用方法。
进入/arm2410cl/exp/basic/02_pthread目录,运行make产生pthread程序,使用NFS方式连接开发主机进行运行实验。
1.多线程程序的优缺点
多线程程序作为一种多任务、并发的工作方式,有以下的优点:
1)提高应用程序响应。
这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(timeconsuming)置于一个新的线程,可以避免这种尴尬的情况。
2)使多CPU系统更加有效。
操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
3)改善程序结构。
一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
LIBC中的pthread库提供了大量的API函数,为用户编写应用程序提供支持。
2.实验源代码与结构流程图
本实验为著名的生产者-消费者问题模型的实现,主程序中分别启动生产者线程和消费者线程。
生产者线程不断顺序地将0到1000的数字写入共享的循环缓冲区,同时消费者线程不断地从共享的循环缓冲区读取数据。
流程图如图2.2.1所示:
本实验具体代码如下:
/************************************************
*Theclassicproducer-consumerexample.
*Illustratesmutexesandconditions.
*byZoujianguo<
ah_zou@>
*2003-12-22
*************************************************/
#include<
stdio.h>
stdlib.h>
time.h>
#include"
pthread.h"
#defineBUFFER_SIZE16
/*设置一个整数的圆形缓冲区*/
structprodcons{
intbuffer[BUFFER_SIZE];
/*缓冲区数组*/
pthread_mutex_tlock;
/*互斥锁*/
intreadpos,writepos;
/*读写的位置*/
pthread_cond_tnotempty;
/*缓冲区非空信号*/
pthread_cond_tnotfull;
/*缓冲区非满信号*/
};
/*--------------------------------------------------------*/
/*初始化缓冲区*/
voidinit(structprodcons*b)
{
pthread_mutex_init(&
b->
lock,NULL);
pthread_cond_init(&
notempty,NULL);
notfull,NULL);
readpos=0;
writepos=0;
}
/*向缓冲区中写入一个整数*/
voidput(structprodcons*b,intdata)
pthread_mutex_lock(&
lock);
/*等待缓冲区非满*/
while((b->
writepos+1)%BUFFER_SIZE==b->
readpos){
printf("
waitfornotfull\n"
);
pthread_cond_wait(&
notfull,&
/*写数据并且指针前移*/
buffer[b->
writepos]=data;
writepos++;
if(b->
writepos>
=BUFFER_SIZE)b->
/*设置缓冲区非空信号*/
pthread_cond_signal(&
notempty);
pthread_mutex_unlock(&
/*从缓冲区中读出一个整数*/
intget(structprodcons*b)
intdata;
/*等待缓冲区非空*/
while(b->
writepos==b->
waitfornotempty\n"
notempty,&
/*读数据并且指针前移*/
data=b->
readpos];
readpos++;
readpos>
/*设置缓冲区非满信号*/
notfull);
returndata;
#defineOVER(-1)
structprodconsbuffer;
void*producer(void*data)
intn;
for(n=0;
n<
1000;
n++){
put-->
%d\n"
n);
put(&
buffer,n);
buffer,OVER);
producerstopped!
\n"
returnNULL;
void*consumer(void*data)
intd;
while
(1){
d=get(&
buffer);
if(d==OVER)break;
%d-->
get\n"
d);
consumerstopped!
intmain(void)
pthread_tth_a,th_b;
void*retval;
init(&
pthread_create(&
th_a,NULL,producer,0);
th_b,NULL,consumer,0);
/*等待生产者和消费者结束*/
pthread_join(th_a,&
retval);
pthread_join(th_b,&
return0;
3.主要函数分析:
下面我们来看一下,生产者写入缓冲区和消费者从缓冲区读数的具体流程,生产者首先要获得互斥锁,并且判断写指针+1后是否等于读指针,如果相等则进入等待状态,等候条件变量notfull;
如果不等则向缓冲区中写一个整数,并且设置条件变量为notempty,最后释放互斥锁。
消费者线程与生产者线程类似,这里就不再过多介绍了。
流程图如下:
4.实验步骤
1、阅读源代及编译应用程序
进入exp/basic/02_pthread目录,使用vi编辑器或其他编辑器阅读理解源代码。
运行make
产生pthread可执行文件。
2、下载和调试
切换到minicom终端窗口,使用NFSmount开发主机的/arm2410cl到/host目录。
注:
/host在ARM端如果不存在,请选择/mnt/nfs目录挂载
进入/host/exp/basic/pthread目录,运行pthread,观察运行结果的正确性。
运行程序最后一部分结果如下:
waitfornotempty
put-->
994
995
996
997
998
999
993-->
get
994-->
995-->
996-->
997-->
998-->
999-->
[/host/exp/basic/02_pthread]
1.加入一个新的线程用于处理键盘的输入,并在按键为ESC时终止所有线程。
2.线程的优先级的控制。
实验四嵌入式WEB服务器设计
掌握在ARM开发板实现一个简单WEB服务器的过程。
学习在ARM开发板上的SOCKET网络编程。
学习Linux下的signal()函数的使用。
C语言的基础知识、程序调试的基础知识和方法,Linux环境下常用命令和Vi编辑
器的操作。
HTTP1.0协议的基本知识。
SOCKET编程的几个基本函数的使用方法。
PC机操作系统Fedor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux与嵌入式系统实验指导书春 0424 Linux 嵌入式 系统 实验 指导书