20145221 《信息安全系统设计基础》实验一 开发环境的熟悉
实验报告封面
实验内容
- 熟悉 linux 开发环境,学会基于 S3C2410 的 linux 开发环境的配置和使用。使用linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。
- 本次实验使用 Redhat Linux 9.0 操作系统环境,安装 ARM-Linux 的开发库及编译器。 创建一个新目录,并在其中编写 hello.c 和 Makefile 文件。学习在 Linux 下的编程和编译 过程,以及 ARM 开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。
实验步骤
Step1:连接 arm 开发板
- 将 arm 开发板电源线接好,保持开发板开关处于闭合状态。再分别将串口线、并口线和网线与 pc 机连接好。
Step2:建立超级终端
- 运行 windows XP 系统下“开始”、“所有程序”、“附件”、“通讯”、“超级终端”。
- 新建一个通信终端,取名为 arm。在属性对话框中,将波特率设为 115200,数据位设为 8,无奇偶校验,停止位为 1,无数据流控制。另存为在桌面。
Step3:启动实验平台
- 打开超级终端,打开 arm 机电源开关。等待一分钟,arm 机的信息会显示在超级终端的窗口中。
- 继续等待,直至出现如图 6 所示界面。输入 ifconfig 命令,记录下 arm 机的 ip 为:
192.168.0.121
。
Step4:保证XP和redhat虚拟机与arm试验箱在同一个网段
- 分别修改PC机中XP系统与redhat系统的IP
- 本次实验中将pc机的ip设为
192.168.0.55
,redhat虚拟机ip为192.168.0.234
。 - 注意:
- redhat虚拟机IP更改后须重启虚拟机才能达到预期;
- 该步骤是后续步骤能否实现的关键所在,只有将三者的IP设在同一个网段,才能正常的进行后续步骤,所以设置完毕后,需分别在
cmd
、Teminal
、超级终端
尝试连接(ping)其余两者的IP,只有互相连通,才能进行后续步骤。
Step5:安装 arm 编译器
- 在 pc 机中“开始”、“运行”,输入虚拟机的 ip
\192.168.0.234
,输入用户名 bc,密码 123456 然后确定,就可以访问虚拟机的文件了。然后把所需文件解压缩拷贝到共享文件夹 bc 中。 - 文件夹bc在此处的作用就是起到将主机与虚拟机共享连接的作用(前提是二者能互相ping通)
- 进入虚拟机,在命令行中输入./install.sh,安装脚本程序将会自动建立目录,配置编译环境。
Step6:配置环境变量
- 类似于windows中的cmd,要想虚拟机终端能直接识别编译指令
armv4l-unknown-linux-gcc
,必须先为虚拟机配置好环境变量。 - 配置步骤如下:
- 在虚拟机中使用 vi 修改/root/.bash_profile 文件中的 PATH 变量为
PATH=$PATH:$HOME/bin:/opt/host/armv4l/bin/
(因为该文件为隐藏系统文件,所以使用 ls 命令不可见) - 存盘后执行: source /root/.bash_profile,则以后
armv4l-unknown-linux-gcc
会自动搜索到,可以在终端上输入。
- 在虚拟机中使用 vi 修改/root/.bash_profile 文件中的 PATH 变量为
Step7:建立 hello.c 文件并编译
- 在虚拟机中进入文件夹/root/bc,在此目录下编写 hello.c 文件。利用命令armv4l-unknown-linux-gcc 对 hello.c 进行编译,生成 hello 可执行文件。
- 编译命令:
armv4l-unknown-linux-gcc hello.c -o hello
Step8:下载调试
- 在超级终端中将共享文件夹挂载好,建立开发板与虚拟机之间的通讯。
- 输入命令
mount -t nfs -o nolock 192.168.0.234:/home/bc /host
- 在超级终端中运行编译通过的 hello 可执行文件。
Step9:编译运行结果如下图所示:
实验过程中遇到的问题及解决过程
编译hello.c文件后无法在超级终端中执行
-
错误界面:
-
解决过程:
- 通过阅读错误提示:
bash: ./hello: can not execute binary file
,可知无法执行hello
这个二进制可执行文件 - 通过前几行代码可知,编译过程应无问题,不然会报错,排除编译错误
- 那是不是可能便宜成功了,但挂载失败了,所以又再次在虚拟机与arm实验箱之间ping,结果显示连接正常,能顺利读取返回包,排除连接错误
- 那最后就要考虑这个二进制文件是否存在当前目录下,打开redhat的资源管理器,果然没有在bc文件夹下发现hello文件,再看编译指令,明显是将编译后的文件挂载到bc目录下的
host
文件夹下,找到症结
- 通过阅读错误提示:
-
解决办法:
- 途径一:
cd
到host
目录下,再执行命令:./hello
; - 途径二:直接执行命令:
./host/hello
即可。
- 途径一:
实验过程的理解
为什么需要交叉编译?如何安装交叉编译环境?
- 概念:指编译器在某一个平台下能够编译出另外一个平台下运行的程序,主要是为了多平台应用程序使用的
- 为什么:
- 有时目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;
- 有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;
- 有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。
- 如何安装:
- 先通过共享文件夹将编译工具拷贝到虚拟机中
- 在虚拟机中通过
./install.sh
命令安装好arm编译器 - 在为其配置好环境,就可以在虚拟机的终端中直接执行arm的编译指令了
实验箱、虚拟机Redhat、WinXP之间的IP需要满足什么关系?如何配置?为什么?
- 在前文已经提到,三者IP之间必须满足在同一网段,只有这样才能在没有路由的前提下实现网络通信,无线连接,做到Redhat与WinXP之间文件共享,Redhat与ARM实验箱之间交叉编译。
- 配置方式:
- 通过
ifconfig
获取ARM实验箱的IP - 将Redhat与WinXP的IP配置与实验箱在同一个网段
- 注意:这里,需要参考子网掩码才好确定网络号和主机号,才能正确配置同一网段下的IP地址。
- 通过
实验中mount命令中每个选项什么意思?
- mount命令:
mount -t nfs -o nolock 192.168.0.234:/root/bc /host
- 挂接命令(mount)
mount [-t vfstype] [-o options] device dir
-t vfstype
指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用的参数有:- 光盘或光盘镜像:iso9660
- DOS fat16文件系统:msdos
- Windows 9x fat32文件系统:vfat
- Windows NT ntfs文件系统:ntfs
- Mount Windows文件网络共享:smbfs
- UNIX(LINUX) 文件网络共享:nfs
-o options
主要用来描述设备或档案的挂接方式。 常用的参数有:- loop:用来把一个文件当成硬盘分区挂接上系统
- ro:采用只读方式挂接设备
- rw:采用读写方式挂接设备
- iocharset:指定访问文件系统所用字符集
device
要挂接(mount)的设备。dir
设备在系统上的挂接点(mount point)。
实验体会
20145221高其
- 在完成本次实验之前对ARM实验箱、虚拟机Redhat、WinXP的理解不够直观,甚至还很模糊,但完成了实验之后,加上实验的思考题对本次实验三者的关系有了大致的了解。
- 主机的作用主要是提供虚拟机运行的环境,并把arm编译工具共享给linux虚拟机,在linux虚拟机下用arm编译工具编译
hello.c
文件,将生成的可执行文件挂接到arm实验箱上,即可在实验箱的终端上进行操作,最终达到了虽然没有在arm实验箱中编译,但可以在arm上运行的效果。 - 这次实验是小组完成,与小组同伴一起完成了本次实验,并尝试了一种新的不同的编译体验。
20145326蔡馨熤:
- 实验一其实不难,照着娄老师给的教程走就好了。在此次实验中,我们学习了如何搭建开发环境以运行可执行文件,第一次配置环境难免会有不熟练,相信以后几次实验中我们会做的更快更好。搭建好环境之后,接下来的任务就变得简单了,我们此次已经完成了实验一、实验二和实验四,还是比较高效的。我和高其同学也是经常组队实验,现在已经很默契了。我们会继续努力,争取在第二次实验课上把剩下的实验题目都做完!