linux嵌入式实验指导书2012嵌
入
式
系
统
设
计
实
验
指
导
书
作者:张俊文
2011-4-26
实验一、嵌入式 Linux开发环境的建立
试验目的
1、掌握如何在 WINDOWS下安装虚拟机,
2、在虚拟机中安装 LINXUX操作系统;
3、熟悉linux基本行命令
预备知识
绝大多数Linux 软件开发都是以native 方式进行的,即本机(HOST)开发、调试,本机运行的方式。这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板...
嵌
入
式
系
统
设
计
实
验
指
导
书
作者:张俊文
2011-4-26
实验一、嵌入式 Linux开发环境的建立
试验目的
1、掌握如何在 WINDOWS下安装虚拟机,
2、在虚拟机中安装 LINXUX操作系统;
3、熟悉linux基本行命令
预备知识
绝大多数Linux 软件开发都是以native 方式进行的,即本机(HOST)开发、调试,本机运行的方式。这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板子上系统)运行开发工具和调试工具。通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。交叉编译调试环境建立在宿主机(即一台PC 机)上,对应的开发板叫做目标板。
运行Linux 的 PC【宿主机】开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行),然后把可执行文件下载到目标机上运行。调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器提供的支持作出选择。宿主机和目标板的处理器一般不相同,宿主机为Intel 处理器,而目标板如 UP-NetARM2410-S开发板为三星S3c2410.GNU 编译器提供这样的功能,在编译器编译时可以选择开发所需的宿主机和目标
实验步骤:
一 预备知识
Mware虚拟机安装Linux系统
VMware软件安装
使用VMware虚拟机可以在Windows系统下面再安装其他的操作系统,而不会对原有的操作系统造成任何影响。本小节将讲述在Windows XP上安装VMware虚拟软件。
安装好VMvare软件以后,可以使用VMware建立一个虚拟计算机。在建立虚拟机时,需要注意虚拟硬件的设置。下面的步骤可以建立一个虚拟机
新建了虚拟机以后,需要注意VMware使用方法。本小节将介绍VMware中常用工具的使用方法。常用工具提供了虚拟机的管理功能。启动虚拟机系统以后,在虚拟机中的操作与本地计算机的操作是相似的。
在VMware安装Linux系统时,对硬盘的分区、格式化操作,都是在虚拟硬盘上进行的。对硬盘上的数据没有任何影响。在学习Linux安装时,可以使用VMware虚拟机进行练习。本小节将在VMware虚拟机上安装Red Hat Linux 9.0系统。
完成光盘完整性检查以后,Red Hat Linux 9.0的图形安装界面如图
选择软件包组
完成安装
是Red Hat Linux 9.0的用户桌面
3、熟悉linux 基本行命令
常用LINUX 命令的使用
以下均以REDHAT LINUX 为例说明。
一、基本命令
ls:显示当前目录下的所有文件和目录。
ls -a:可以看到隐藏的文件,如以.开头的文件。
pwd:显示当前目录路径。
ps:列举当前TTY 下所有进程
ps -A:列举所有
cd 目录名:进入目录
mkdir 目录名:创建目录
rmdir 目录名:删除空目录
rm -rf 目录名:强行删除整个目录内容(无法恢复),其中f 表示强制不进行提示,
r 表示目录递归。
注:LINUX 下的文件和目录是区分大小写的。
二、TAB 文件目录匹配搜索的使用
例如/usr/arm2410s,假设/目录下没有其它以arm 字符开头的其它目录和文件,则要
进入这个目录,只需敲入:
cd /usr/arm
然后按下TAB 键,则SHELL 会自动匹配找到/usr/arm2410s 目录,这样就不必完全
键入剩余的2410s 字符,这个功能在访问名字很长的文件和目录时非常有效,可以大大提
供键盘输入的速度,极为方便。
三、编程时获取帮助man
man,即manunal,是UNIX 系统手册的电子版本。根据习惯,UNIX 系统手册通常
分为不同的部分(或小节,即section),每个小节阐述不同的系统内容。目前的小节划分
如下:
命令:普通用户命令
系统调用:内核接口
函数库调用:普通函数库中的函数
特殊文件:/dev 目录中的特殊文件
文件格式和约定:/etc/passwd 等文件的格式
游戏。
杂项和约定:
文件系统布局、手册页结构等杂项内容
系统管理命令。
内核例程:非标准的手册小节。
手册页一般保存在/usr/man 目录下,其中每个子目录(如man1,man2, ..., manl, mann)
包含不同的手册小节。使用man 命令查看手册页。
man 命令行例子:
man rpm
四、压缩/解压缩
LINUX 的软件一般是以.gz 或.tar 或者.tar.gz 结尾的。前者是由gzip 压缩的,后者
是先用tar 归档,在用gzip 压缩而成的。
1、以.gz 结尾的为压缩文件,用命令:gzip -d filename 来解压,得到的文件在当前目
录中,但已没有了.gz。
2、以.tar 结尾的为归档文件,用命令:tar -xvf filename 来展开,生成的文件与源文
件在同一目录中,只是少了.tar。
3、以.tar.gz 结尾的文件最常见,可直接用命令:gzip -cd filename| tar xfv 来解开。
tar 的用法:
解压:x 参数表示解压
tar xzf linux-2.4.x.tgz
把一个目录linux-2.4.x 压缩成一个文件:linux-2.4.x.tgz
tar czf linux-2.4.x.tgz linux-2.4.x
c 参数表示压缩。
解压缩bz2 格式压缩包
tar -xjf linux.bz2
建立bz2 格式压缩包
tar -cjf linux-2.4.x.tar.bz2 /develop/linux-2.4.x
软、硬盘及光驱的使用
在Linux 中对其他硬盘逻辑分区、软盘,光盘的使用与我们通常在DOS与Windows 中
的使用方法是不一样的,不能直接访问,因为在Linux 中它们都被视为文件,因此在访问
使用前必须使用装载命令mount 将它们装载到系统的/mnt 目录中来,使用结束,必须进
行卸载。命令格式如下:
mount -t 文件系统类型设备名装载目录
设备名是指要装载的设备的名称,如软盘、硬盘、光盘等,软盘一般为/dev/fd0 fd1,
硬盘一般为/dev/hda hdb ,硬盘逻辑分区一般为期hda1 hda2 等等,光盘一般为/dev/hdc。
在装载前一般要在/dev/mnt 目录下建立一个空的目录,如软盘为floppy,硬盘分区为其盘
符如c、d 等等,光盘为cd-rom,使用命令:
mount -t msdos /dev/fd0 /mnt/floppy
装载一个mddos 格式的软盘
mount -t ext2 /dev/fd0 /mnt/floppy
装载一个Linux 格式的软盘
mount -t vfat /dev/hda1 /mnt/c
装载Windows98 格式的硬盘分区
mount -t iso9660 /dev/hdc /mnt/cd-rom
装载一个光盘
装载完成之后便可对该目录进行操作,在使用新的软盘及光盘前必须退出该目录,使
用卸载命令进行卸载,方可使用新的软盘及光盘,否则系统不会承认该软盘的,光盘在卸
载前是不能用光驱面板前的弹出键退出的。
实验二、LinuxC程序
实验目的
1、Vi编辑器的使用
2、gcc编译器的使用,编译Linux C程序
实验内容
一:设计一个程序,要求在屏幕上输出“这是第一个Linux c程序!”。
操作步骤:
步骤 1:设计编辑源程序代码
此程序中主函数体内只有一个输出语句,printf是c语言中的输出函数。双引号内的字条串原样输出。“\n”是换行符。即在输出“这是第一个Linux c程序!”后回车换行。语句最后用分号结束。编辑程序只需要用文本编辑器,Linux下最常用的文本编辑器是vim,编辑程序在终端中输出如下。
[root@localhost root]#vim 1-1.c
接着依次按ESC键→i键→输入文字内容,输入程序代码如下:
/*1-1.c程序:在屏幕上输出“这是第一个Linux c程序!”*/
#include
/*文件预处理,包含标准输入输出库*/
int main () /*C程序的主函数,开始入口*/
{
printf("这是第一个Linux c程序!\n"); /*C程序的内容,在屏幕上打印输出*/
}
其中/*、*/之间的内容为注释,凡是介于/*和*/之间的文字,c的编译程序均会忽略,不予编译。设计程序时,最好养成写注释的习惯,便于他人或自己以后阅读。
其中“#include”指定程序中用到的系统函数包含的库文件,“stdio.h”是标准输入输出库。Main表示“主函数”,每人个c程序都必须有一个main函数,函数主体用大括弧{}括起来,语句都用分号“;”结束。
输入完Linux c程序后的界面如图1.1所示。
图1.1 输入完Linux c程序后的界面
特别提示:输入完成后存盘:按ESC键→输入“:wq”回车,输入后如果不想存盘:按ESC键→输入“:q!”回车。
注意:若读者的终端不能正常输入或显示中文,而要在vim中编辑和正确显示中文,请先设置一下终端的字体,点击终端的菜单“编辑”→“当前配置文件(U)……”,打开“编辑配置文件”对话框,勾选“与其他应用程序使用相同的字体大小”即可。如果显示中文还有问,点击对话框“常规”选项卡中的字体处的按钮,弹出“选择终端字体”对话框,选择“AR PL KaitiM GB”字体,设置好字体后,点击“确定”就可以在vim中正常显示和输入简体中文了。
步骤 2:编译程序
编译程序前,最好请确认c源程序文件的存在,打开Linux终端输入“ls”命令,查看当前目录下是否有1-1.c文件,界面如图1.2所示。
图1.2 查看当前目录下的文件
接着输入如下命令,将1-1.c程序编译成可执行文件。
[root@localhost root]#gcc 1-1.c
若编译时没有出现错误信息,说明程序编译成功,界面如图1.3所示。
图1.3 用gcc编译程序
步骤 3:运行程序
编译好1-1.c程序后,默认生成的可执行文件是a.out,可以看到当前目录下就新生成了a.out,若要执行这个可执行文件,输入如下:
[root@localhost root]#./a.out
此时系统会出现运行结果,输出“这是第一个Linux c程序!”,终端中的显示如图1.4所示。
图1.4 运行程序
由第一个简单的Linux c程序可知,在Linux环境下的c程序设计,主要用到的工具是文本编辑器和编译器软件。Linux下的文本编辑器软件主要有vim、gedit和Emacs,Linux下的c编译器中,gcc是功能最强大、使用最广泛的软件。
二、GDB调试例程
用gcc 编译它:gcc – o greet greeting.c
程序显示示结果如下:
从结果可以看出。输出的第一行是正确的, 但第二行打印出的东西并不是我们所期望的, 我们期望的结果是:the string printed backward is ereht olleh
毫无疑问, my_print2函数没有正常工作。 现在, 让我们用gdb看看问题究竟出在哪能,先输入如下命令:
再输入gdb greeting
如果输入命令时忘记了把要调试的程序作为参数传给gdb, 可以在gdb提示符下用file 命令加载它:(gdb)file greeting
现在我们可以用gdb的run命令来运行greeting, 当它运行在gdb中时, 结果大约会像这样:
(gdb ) run
这时输出的结果与外面运行的结果一样, 可是, 为什么没有反序打印呢?为找出问题所在, 我们可以在my_pring2函数的for语句后没一个断点。 具体的做法是在gdb提示符下执行三次list命令, 列出源程序
(gdb)list
(gdb)list
(gdb)list
第一次执行list命令的输出如下所示
第二次
第三次
根据列出的源程序, 可设断点在21行, 在gdb命令行提示符下输入如下命令。设置断点:
(gdb)break 21
Gdb会做出如下响应:
再执行run 将产生如下结果
可以通过设置一个观察string2[size -i]变量值的观察点来找出错误的产生原因, 做法是键入如下语句:watch string2[size -i]
Gdb将做出如下反映
现在可以用netx 命令一步步的执行循环语句:
(gdb) next
经过第一次循环后, gdb 告诉我们string2[size -i]的值是‘h’ gdb显示的信息如下:
这个值是正确的, 后来的数次循环的结果也都是正确的, 当i=10时, 表达式等于‘e’
Size –i的值等于1, 最后一个字符已经拷贝到新字符串去了,
如果再执行下去, 会看到已经没有值分配给string2[0]了, 而它是新字符串的第一个字符, 因为malloc函数在分配内存时把它们初始化为空字符。 这就是为什么string2没有任何输出的原因。
找出问题所在, 修正这个错误也就会变得更容易, 可以在代码里写入string2的第一个字符的偏移量为size -1而不是size, 这是因为string2 的大小为12,但起始偏移量为0,串内的字符从偏移量10, 偏移量11为空字符保留。
实验三、Shell程序设计
(一)、实验目的及要求:
1、正确理解shell编程
2、学会如何编写shell程序。
(二)、实验内容:
结合示例,编写shell程序, 理解shell程序在程序设计上与C程序的异同。
Shell编程
1、区分变量的使用,使用VIM编辑器编写示例4-1
#!/bin/bash
#bianliang 4.2.sh
a=123
b=1.23
c=xyz
d=efgh xyz
e='efgh xyz'
echo $a
echo $b
echo $c
echo $d
echo $e
修改文件权限chmod +x 4.2.sh
在终端中输入命令“./4.2.sh”,运行shell程序, 结果。
例2.在系统配置文件中定义环境变量
上一小节定义的环境变量,只在当前运行的所有进行中有效,并没有保存到系统的文件中。系统重启以后就没法再访问这些环境变量。可以在系统配置中配置这些环境变量。
环境变量的系统配置文件是/etc/profile。用下面的步骤在系统文件中查看和配置环境变量。
①打开一个终端.在终端中输入并执行下面的命令
②文本编辑器会打开系统环境变量配置文件可以在文件中发现, 有下面这样的语句输出了环境变量.
③在文件的最后一行输入下面的代码, 添加两个环境变量.
Export A1=hello
Export A2=123456
④单击文本编辑器的文件|保存,保存这个文件.
⑤重启计算机以后, 系统中会产生上面所设置的两个环境变量
例3位置变量的应用示例,shell程序如下
#!/bin/bash
#4.3.sh
echo $1;
echo $2;
echo $3;
echo $4;
保存为4.3.sh
执行./4.3.sh Beijing is a beautiful city
显示结果为
例4运算符的使用示例,shell程序如下
#!/bin/bash
#4.4.sh
s=0
t=`expr $1**$2`
t=$[t*3]
s=$[s+t]
t=$[$1**2]
t=$[t*4]
s=$[s+t]
t=`expr $2*5`
s=$[s+t]
s=$[s+6]
echo $s
执行./4.4.sh
显示结果为
例4 until语句,shell程序如下
#!/bin/bash
#4.10.sh
sum=0
i=1
until [ $i -gt 100 ]
do
echo $i
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum
例5文件重定向的例子
①在终端中输入下面的命令, 查看当前文件夹把结果保存到文件a.txt中. Ls >a.txt
②按回车后, 命令没有显示结果, 在终端中输入“vim a.txt”发现文件中有上一命令的文件列表.
③将上一步的输出结果作为命令输入 read Ab.txt
⑥按回车键后, 输入vim b.txt查看文件b.txt发现文件中的所有字母都变在了大写.
例6条件语句示例
示例
#!/bin/bash
#4.7.sh
i=$[ $1 % 2 ]
echo $i
if test $i -eq 0
then echo oushu
else
echo jishu
fi
运行结果:
例7if语句应用实例
· #!/bin/bash
· #4.7.sh
· if test -w $1
· then echo "writeable"
· else
· echo "unwriteable"
· fi
· if test -x $1
· then echo "excuteable"
· else
· echo "unexcuteable"
· fi
例8for语句示例
#!/bin/bash
#4.10.sh
for char in a s d f g
do
echo $char
done
当for语句后边省略了in关键字时, 将接受输入命令时的参数作为循环变量集如下例所示
#!/bin/bash
#4.12.sh
for str
do
echo $str
Done
在终端中输入下面的命令运行这个程序
./4.12.sh a s d f
运行结果是
实验四、熟悉 Linux交叉开发环境配置和使用
试验目的:
1挂载光盘文件
2 linux网络配置
3 linux 串口配置
预备知识
对于嵌入式LINUX,宿主机上的操作系统一般要求为 REDHAT LINUX。嵌入式开发通常要求宿主机配置有网络,支持NFS(为交叉开发时mount 所用)。然后要在宿主机上建立交叉编译调试的开发环境。环境的建立需要许多的软件模块协同工作,这将是一个比较繁杂的工作,但现在已通过博创嵌入式教学套件中光盘的安装而自动完成了。 开发工具软件的安装与配置
实验步骤:
1.开发工具软件的安装
将博创兴业科技有限公司提供的附带开发工具光盘插入CDROM,然后执行以下命令:
mount /dev/cdrom /mnt
若系统不识别/dev/cdrom 的话,可以用如下命令,假设CDROM为从盘,即为/dev/hdb,则: mount –t iso9660 /dev/hdb /mnt
安装脚本程序将自动建立/arm2410s目录,并将所有开发软件包安装到/arm2410s目录下,
同时自动配置编译环境,建立合适的符号连接。
2.开发环境配置
配置网络,包括配置 IP地址、NFS服务、防火墙。网络配置主要是要安装好以太网卡,对于一般常见的RTL8139 网卡,REDHAT9.0 可以自动识别并自动安装好,完全不要用户参与,因此建议使用该网卡。然后配置宿主机 IP为192.168.0.121。如果是在有多台计算机使用的局域网环境使用此开发设备,IP地址可以根据具体情况设置。如图 1.4.1所示:
图 1.4.1 网络配置
双击设备 eth0的蓝色区域,进入以太网设置界面,如图1.4.2,1.4.3所示:
图 1.4.2 以太网常规设置界面
图 1.4.3 以太网路由设置界面
对于REDHAT9.0,它默认的是打开了防火墙,因此对于外来的IP 访问它全部拒绝,这样其它网络设备根本无法访问它,即无法用 NFS mount 它,许多网络功能都将无法使用。因此网络安装完毕后,应立即关闭防火墙。操作如下:点击红帽子开始菜单,选择安全级别设置,选中无防火墙。如图 1.4.4所示:
图 1.4.4 安全级别设置
在系统设置菜单中选择服务器设置菜单,再选中服务菜单,将 iptables服务的勾去掉,并确保 nfs选项选中。 配置 NFS:
点击主菜单运行系统设置->服务器设置->NFS服务器(英文为:SETUP->SYSTEM
SERVICE->NFS),点击增加出现如下在界面,在目录(Drictory):中填入需要共享的路径,在主机(Hosts):中填入允许进行连接的主机 IP地址。并选择允许客户对共享目录的操作为只读(Read-only)或读写(Read/write)。如图 1.4.5所示:
图 1.4.5 NFS基本设置
图 1.4.6是对客户端存取服务器的一些其他设置,一般不需要设置,取默认值。
图 1.4.6 NFS用户访问设置
当将远程根用户当作本地根用户时, 对于操作比较方便,但是安全性较差。最后退出时则完成 NFS 配置。配置好后,界面应显示如图 1.4.7所示:
图 1.4.7 远程根用户当作本地根用户
图 1.4.8配置好的 NFS
我们也可以手工编写/etc/exports文件,其格式如下:
共享目录 可以连接的主机(读写权限,其他参数)
例如:
表示将本机的/arm2410s目录共享给 ip地址为192.168.0.1-192.168.0.254的所有计算
机,可以读取和写入。
配置完成后,可用如下办法简单测试一下NFS 是否配置好了:在宿主机上自己mount 自己,看是否成功就可以判断NFS 是否配好了。例如在宿主机/目录下执行:
其中 192.168.0.10应为主机的 IP地址。
然后到/mnt/目录下看是否可以列出/arm2410s目录下的所有文件和目录,可以则说明
mount 成功,NFS 配置成功。
3.配置 MINICOM:
1 .在 linux操作系统 Xwindow界面下建立终端(在桌面上点击右键 ——>新建终端),在终端的命令行提示符后输入 minicom,回车,你就会看到 minicom的启动画面(见图1.4.9)
若没有启动 Xwindow则在命令行提示符后直接输入 minicom即可。
图 1.4.9 minicom启动画面
2 .minicom启动后,先按 Ctrl+A键,再按 Z键(注意不是连续按, Ctrl+A松开后才按 Z),
进入主配置界面(见图 1.4.10)。
图 1.4.10主配置界面
按“O”进入配置界面,如图 1.4.11配置界面
图 1.4.11配置界面
按上下键选择Serial port setup,进入端口设置界面,这里有几个重要选项改为如下值(见
图1.4.12):
(在Change which setting 后按哪个字母就进入哪项的配置,如按A 进行端口号配置。)
A————Serial Device :/dev/ttyS0 (端口号使用串口1)
E————BPS/par/bits :/115200 8N1 (波特率)
F,E 硬件流,软件流都改为NO,若要使用PC 机的串口2 来接板子的串口1 做监
控,改为:/dev/ttyS1 即可。
3.选好后按ESC 键退出到图1.4.11 所示画面,选择Save setup as df1 保存退出,以后只要
启动minicom 就是该配置,无需再做改动。
4.配置完成后,用串口线连接好pc 机和2410-S,启动2410-S,即可在minicom 上看到启
动信息,并可以执行操作控制。
图1.4.12 端口设置界面
Linux 开发软件的安装目录结构
表格1.4.1 均以/arm2410s 目录为起点:
编译器安装路径说明如表1.4.2 所示:
上述诸多程序的源代码都在光盘中提供.
在安装完成LINUX 后,就是对LINUX 的网络环境的配置,最主要是配置NFS 服务器。
实验五Makefile文件的编写
实验目的
1、正确理解Makefile文件
2、学会使用Vi编写Makefile文件
实验内容
本次实验使用 Redhat Linux 9.0操作系统环境,安装 ARM-Linux的开发库及编译器。创建
一个新目录,并在其中编写 hello.c和 Makefile文件。学习在Linux下的编程和编译过程,
以及 ARM开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。
三、 实验步骤
1、建立工作目录
[root@zxt smile]# mkdir hello
[root@zxt smile]# cd hello
2、编写程序源代码
实际的 hello.c源代码较简单,如下:
我们可以是用下面的命令来编写 hello.c的源代码,进入 hello目录使用 vi命令来编辑代
码:
[root@zxt hello]# vi hello.c
按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按 Esc键进入命令状态,再
用命令“:wq”保存并退出。这样我们便在当前目录下建立了一个名为 hello.c的文件。
3、编写 Makefile
要使上面的 hello.c程序能够运行,我们必须要编写一个 Makefile文件,Makefile文件
定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要
重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个“make”
命令整个工程就可以实现自动编译,当然我们本次实验只有一个文件,它还不能体现出使
用 Makefile的优越性,但当工程比较大文件比较多时,不使用 Makefile几乎是不可能的。
下面我们介绍本次实验用到的 Makefile文件。
下面我们来简单介绍这个 Makefile文件的几个主要部分:
CC 指明编译器
EXEC 表示编译后生成的执行文件名称
OBJS 目标文件列表
CFLAGS 编译参数
LDFLAGS 连接参数
. all:编译主入口
. clean:清除编译结果
与上面编写 hello.c的过程类似,用 vi来创建一个 Makefile文件并将代码录入其中
4、编译应用程序
在上面的步骤完成后,我们就可以在 hello目录下运行 “make”来编译我们的程序了。如果进行了修改,重新编译则运行:
[root@zxt hello]# make clean
[root@zxt hello]# make
注意:编译、修改程序都是在宿主机(本地 PC机)上进行,不能在 MINICOM下进行。
5、下载调试
在宿主 PC计算机上启动 NFS服务,并设置好共享的目录,具体配置请参照前面第一章第四节中关于嵌入式 Linux环境开发环境的建立。在建立好 NFS共享目录以后,我们就可以进入 MINICOM中建立开发板与宿主 PC机之间的通讯了。
如果不想使用我们提供的源码的话,可以再建立一个 NFS共享文件夹。如/root/share,我
们把我们自己编译生成的可执行文件复制到该文件夹下,并通过 MINICOM挂载到开发板上。
再进入/host目录运行刚刚编译好的 hello程序,查看运行结果。
六、思考题
1.Makefile是如何工作的?其中的宏定义分别是什么意思?
六、多线程应用程序设计
一、实验目的
了解多线程程序设计的基本原理。
学习 pthread 库函数的使用。
二、实验内容
读懂 pthread.c 的源代码,熟悉几个重要的PTHREAD 库函数的使用。掌握共享锁和信号量
的使用方法。
进入/arm2410s/exp/basic/02_pthread 目录,运行make 产生pthread 程序,使用NFS 方
式连接开发主机进行运行实验。
、实验原理及代码分析
1. 多线程程序的优缺点
多线程程序作为一种多任务、并发的工作方式,有以下的优点:
1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系
统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,
将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。
2) 使多CPU 系统更加有效。操作系统会保证当线程数不大于CPU 数目时,不同的线程运行
于不同的CPU 上。
3) 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立
的运行部分,这样的程序会利于理解和修改。
LIBC 中的pthread 库提供了大量的API 函数,为用户编写应用程序提供支持。
2.实验源代码与结构流程图
本实验为著名的生产者-消费者问题模型的实现,主程序中分别启动生产者线程和消费者
线程。生产者线程不断顺序地将0 到1000 的数字写入共享的循环缓冲区,同时消费者线程
不断地从共享的循环缓冲区读取数据。流程图如图2.2.1 所示:
本实验具体代码如下:
六、实验步骤
1、阅读源代及编译应用程序
进入exp/basic/02_pthread 目录,使用vi 编辑器或其他编辑器阅读理解源代码。运行make
产生pthread 可执行文件
2、下载和调试
切换到minicom 终端窗口,使用NFS mount 开发主机的/arm2410s 到/host 目录。
进入/host/exp/basic/pthread 目录,运行pthread,观察运行结果的正确性。运行程序最
后一部分结果如下:
七、简单嵌入式WEB 服务器实验
一、实验目的
掌握在 ARM 开发板实现一个简单WEB 服务器的过程。
学习在 ARM 开发板上的SOCKET 网络编程。
学习 Linux 下的signal()函数的使用。
二、实验内容
学习使用 socket 进行通讯编程的过程,了解一个实际的网络通讯应用程序整体设计,阅读
HTTP 的相关内容,学习几个重要的网络函数的使用方法。
读懂HTTPD.C 源代码。在此基础上增加一些其他功能。在PC 计算机上使用浏览器测试嵌入
式WEB 服务器的功能。
五、实验原理
七、实验步骤
1、阅读理解源码
进入/arm2410s/exp/basic/09_httpd 目录,使用vi 编辑器或其他编辑器阅读理解源代码
2、编译应用程序
运行make 产生可执行文件httpd
3、下载调试
使用NFS 服务方式将HTTPD 下载到开发板上,并拷贝测试用的网页进行调试,本例中用的
是index 测试网页。
4、本机测试
在台式机的浏览器中输入http://192.168.0.111(111 为UP-AMR2410-S 实验板的IP 地址),
观察在客户机的浏览器中的连接请求结果(如图2.7.8)和在开发板上的服务器的打印信
息。
本文档为【linux嵌入式实验指导书2012】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。