20155312 20155325 2017-2018 1 《信息安全系统设计基础》实验一
实验目的及步骤
实验一-1-交叉编译环境-(使用自己笔记本电脑)
- 实验两人一组,最多三人一组
- 可以使用自己的笔记本,也可以使用实验室台式机,使用实验室机器的不用做本题
- 安装老师提供的software目录中的“VMware-workstation-full-10.0.1-1379776.exe”
- 解压老师提供的software目录中的“Ubuntu1204.rar”
- 用VMWare打开Ubuntu,用户名:linux,口令:1
- 建立实验目录"mkdir linux_组员1学号_组员2学号"
- 在实验目录中编写“hello word”程序,另外补充几行打印所有组员的学号姓名
- 参考bocsd目录中的脚本armc.sh, 分别用gcc和交叉编译器arm-none-linux-gnuenbi-gcc编译hello.c,用gcc编译的可执行文件命名linuxhello:gcc hello.c -o linuxhello; 用arm-none-linux-gnuenbi-gcc编译的命名为armhello: /usr/local/toolchain/toolchain4.3.2/bin/arm-none-linux-gnuenbi-gcc hello.c -o armhello
- 分别运行linuxhello,armhello,有什么结果?提交截图并用file命令分析原因。
以下为各步骤的特别注释:
7.编译命令应该是“/usr/local/toolchain/toolchain4.3.2/bin/arm-none-linux-gnueabi-gcc hello.c -o armhello”
实验一 开发化境的熟悉-2-目标机宿主机联通
- 使用实验室机器不用安装软件,桌面上有相应图标
- 使用自己笔记本电脑的,解压超级终端软件“windows7st(Windows).rar”,并在桌面上建立快捷方式(这个不用在实验室做)
- 使用自己笔记本电脑的,到实验室把“USB转串口线”的USB口插入自己的电脑,把串口连到实验箱的COM0
- 参考视频配置超级终端,用超级终端作为实验箱的显示终端
- 用ifconfig在超级终端中查看实验箱IP(目标机),在Ubuntu中(宿主机)中用ifconfig在命令行查看IP
- 用网线连接实验室台式机(或自己笔记本电脑)和ARM实验箱的网口NET1(最大屏旁边的)
- 用ping命令保证目标机和宿主机能互相ping通,提交ping通的截图
以下为各步骤的特别注释:
2.串口线是蓝色的两头插口不一样的线,网线连接主机和第一个网线端口,打开实验箱电源和右下区域的开关(有一块显示屏的区域),只有当显示区打开后超级终端数据开始滚动。然后输入“root”获取权限再查看IP
实验一 开发化境的熟悉-3-目标机运行程序
- 学习资源中第五周的“ARM实验箱实验指导书”的第二章,理解tftp和nfs的作用
- 在超级终端中用“mkdir /arm_组员1学号_组员2学号” 建立实验箱中程序运行目录“arm_组员1学号_组员2学号”
- 在超级终端中运行“mount -t nfs -o nolock 宿主机IP:/home/linux/linux_组员1学号_组员2学号 /arm_组员1学号_组员2学号”通过NFS把宿主机中的“linux_组员1学号_组员2学号” 映射到目标机中的“/arm_组员1学号_组员2学号”
- 超级终端中运行"cd /arm_组员1学号_组员2学号"
- 超级终端中运行"./armhello", 提交运行截图,并深入理解交叉编译
实验一 开发化境的熟悉-5-清理工作(只有用实验室机器的小组做)
实验结束后,把实验室原来的网线插回,否则以后做实验的同学无法开机,提交插好网线的照片。
实验截图
1
2
3
5
遇见的问题
- 问题1:在实验一-1的时候,输入
/usr/local/toolchain/toolchain4.3.2/bin/arm-none-linux-gnuenbi-gcc hello.c -o armhello
一直找不到目标文件夹。
于是我想索性一层层进入直到/usr/local/toolchain/toolchain4.3.2/bin/,发现没有“arm-none-linux-gnuenbi-gcc”
,而是“arm-none-linux-gnueabi-gcc”。
编译之后,想要运行,却无法运行这个二进制文件,于是去查了资料。看到file里armfile和linuxfile分别显示的32和64,还有资料说是当前环境是64位的,在下载安装ia32-libs或者其他某些软件后
就可以运行
无法执行二进制文件
; Linux下ARM程序的编译运行及调试
然而
查询之后说我要修改设置,按照这个链接 E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
做了,然而还是没有用。然后就上课了。做完实验回头想想,才更加理解了交叉编译环境使得在x64 inter的环境下编译出在arm环境下运行的armhello。
- 问题2:在做第二个实验的时候一直无法ping通,确认所有操作都没有问题。实在是没时间了,就换成实验室主机。在经历了虚拟化(虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。),重装软件(电脑原本的虚拟机软件并不支持给的Ubuntu系统)等……
- 问题3:正准备做实验三的时候突然超级终端屏幕只剩光标没有内容,重启实验箱,重开超级终端等均无效……匆忙换机子。
知识点
-
交叉编译
简单地说,就是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。
常见的交叉编译例子如下:
1、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。
2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。
3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。
-
宿主机与目标机
宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。(本实验宿主机是X86 inter)
目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。(本实验目标机是实验箱)
-
file命令
file命令用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
-b:列出辨识结果时,不显示文件名称;
-c:详细显示指令执行过程,便于排错或分析程序执行的情形;
-f<名称文件>:指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称;
-L:直接显示符号连接所指向的文件类别;
-m<魔法数字文件>:指定魔法数字文件;
-v:显示版本信息;
-z:尝试去解读压缩文件的内容。
[root@localhost ~]# file install.log install.log: UTF-8 Unicode text
[root@localhost ~]# file -b install.log <== 不显示文件名称 UTF-8 Unicode text
[root@localhost ~]# file -i install.log <== 显示MIME类别。 install.log: text/plain; charset=utf-8
[root@localhost ~]# ls -l /var/mail lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail
[root@localhost ~]# file /var/mail /var/mail: symbolic link to `spool/mail'
[root@localhost ~]# file -L /var/mail /var/mail: directory
[root@localhost ~]# file /var/spool/mail /var/spool/mail: directory
[root@localhost ~]# file -L /var/spool/mail /var/spool/mail: directory
-
超级终端
超级终端是一个通用的串行交互软件,很多嵌入式应用的系统有与之交换的相应程序,通过这些程序,可以通过超级终端与嵌入式系统交互,使超级终端成为嵌入式系统的“显示器”。
-
NFS
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
-
mount命令(挂载命令)
单指令解析
“mount -t nfs -o nolock”
-t vfstype 指定文件系统的类型;
nfs -- UNIX(LINUX) 文件网络共享。所以是指定的UNIX文件网络共享
tftp --TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
-o options 主要用来描述设备或档案的挂接方式。
-o nolock
文件锁文件锁定是多用户、多任务操作系统中一个非常重要的组成部分。程序经常需要共享数据,而这通常是通过文件
来实现的。
文件锁是一种文件读写机制,在任何特定的时间只允许一个进程访问一个文件。
参考链接1;参考链接2; 参考链接3
感想
开始实验一-1是用各自的笔记本做的,后来笔记本总也无法ping通,然后挪到实验室的机子,各种“开关机挪个文件要很久”“需要虚拟化”“实验机的VM版本不支持拷的ubuntu”……非常急了2333一口老血。
感谢提供帮助的大佬们❤❤❤❤❤❤