20145221 《信息安全系统设计基础》实验一 开发环境的熟悉

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设在同一个网段,才能正常的进行后续步骤,所以设置完毕后,需分别在cmdTeminal超级终端尝试连接(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会自动搜索到,可以在终端上输入。

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文件夹下,找到症结
  • 解决办法:

    • 途径一:cdhost目录下,再执行命令:./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蔡馨熤:

  • 实验一其实不难,照着娄老师给的教程走就好了。在此次实验中,我们学习了如何搭建开发环境以运行可执行文件,第一次配置环境难免会有不熟练,相信以后几次实验中我们会做的更快更好。搭建好环境之后,接下来的任务就变得简单了,我们此次已经完成了实验一、实验二和实验四,还是比较高效的。我和高其同学也是经常组队实验,现在已经很默契了。我们会继续努力,争取在第二次实验课上把剩下的实验题目都做完!

参考资料

posted @ 2016-11-05 23:56  20145221高其  阅读(552)  评论(0编辑  收藏  举报