2019-2020-1 20175302_20175314_20175316 《信息安全系统设计基础》实验一 开发环境的熟悉
一、实验内容
- 交叉编译环境
- 目标机宿主机联通
- 目标机运行程序
- 目标机模块分解
- 清理工作
二、实验步骤
(一)交叉机编译环境
- 安装老师提供的software目录中的“VMware-workstation-full-10.0.1-1379776.exe”
- 解压老师提供的software目录中的“Ubuntu1204.rar”
- 用VMWare打开Ubuntu,用户名:linux,口令:1
- 建立实验目录
mkdir linux_20175302_20175314_20175316
- 在实验目录中编写hello world程序,另外补充几行打印所有组员的学号姓名
#include <stdio.h>
int main(){
printf("HelloWorld!\n");
printf("20175302_20175314_20175316\n");
return 0;
}
用gcc编译hello.c
gcc -o linuxhello hello.c
用交叉编译器"arm-none-linux-gnuenbi-gcc"编译hello.c
/usr/local/toolchain/toolchain4.3.2/bin/arm-none-linux-gnuenbi-gcc hello.c -o armhello
(二)目标机宿主机联通
- 在实验室把“USB转串口线”的USB插入实验室电脑
- 用超级终端(Win7虚拟机中)作为实验箱的显示终端
- 用ifconfig在超级终端中查看实验箱IP(目标机):192.168.0.232,在Ubuntu中(宿主机)中用ifconfig在命令行中查看IP:192.168.0.230
- 用网线连接实验室台式机和ARM实验箱的网口NET1
- 在超级终端中输入
ping 192.168.0.230
(UbuntuIP),在Ubuntu命令行中输入ping 192.168.0.232
(超级终端IP),用ping命令保证目标机和宿主机能互相ping通
(三)目标机运行程序
- 在超级终端中运行
mount -t nfs -o nolock 192.168.0.230:/home/linux/exp /exp
通过NFS把宿主机中的/home/linux/exp 映射到目标机中的/exp - 在超级终端中
cd /exp
- 在超级终端中
./armhello
运行armhello
(四)目标机模块分解
- 在目标机上重现系统调用版myod
- 以静态库或共享库的方式在目标机上重现myod
(五)清理工作
- 实验结束后,把实验室原来的网线插回
三、实验过程中遇到的问题和解决方案
-
问题1:
bash: /usr/local/toolchain/toolchain4.3.2/bin/arm-none-linux-gnuenbi-gcc: 没有那个文件或目录
-
解决方案:
②将arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2拷贝至虚拟机/usr/local文件夹执行以下命令
cd /usr/local
tar -jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
③配置环境变量使其生效
sudo vim /etc/bash.bashrc
选择文件末行(64行),按键盘上的o键,在光标所在行下新增一行(65行)插入
export PATH=$PATH:/usr/local/arm-2014.05/bin/
最后执行
source /etc/bash.bashrc
④测试,输入
arm-none-linux-gnueabi-gcc -v1
如果出现: No such file or directory,则是因为64位Ubuntu与32位软件不相容,输入
sudo apt-get install lib32z1 lib32ncurses5 libbz2-1.0:i386 lib32stdc++6 12
重新输入
arm-none-linux-gnueabi-gcc -v
⑤编译,输入
arm-none-linux-gnueabi-gcc -static -o armhello hello.c
-
问题2:登陆终端error,win7虚拟机和实验箱ping不通
-
解决方案:接口差错,实验箱连接modo1
四、实验体会与总结
交叉编译:
- 搭建交叉编译环境,即安装、配置交叉编译环境变量。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。
- 交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码,简单来说,就是在一个平台上生成另一个平台上的可执行代码。
- gcc和arm-linux-gcc的区别是:gcc是linux下的C语言编译器,编译出来的程序在Ubuntu虚拟机上执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。
宿主机与目标机
- 在嵌入式开发过程中,宿主机是执行编译、链接嵌入式软件的计算机。
- 目标机是运行嵌入式软件的硬件平台。通常宿主机就是PC机,而本次实验中的目标机是ARM实验箱。
- 在宿主机上编译链接生成的可执行程序需要放到目标机上运行通过串口、网络、USB下载到目标机上,运行程序armhello。
NFS(Network File system)
- 网络文件系统:使我们能够达到文件在不同系统间的共享。当用户想使用远程文件时只要用“mount”命令就可把远程文件系统挂接在自己的文件系统之下,使远程的文件与使用本地计算机上的文件一样。
- 在计算机A上,执行命令mount B的IP地址:
/home/linux/exp /exp
,把计算机B上的/home/linux/exp
挂接到A上的/exp
。 - 当客户机挂接一个目录或文件时,并不是说复制服务器上的这一个目录或文件到本地的计算机上,而是在使用时从服务器上读取文件到本地的内存中,因此,可以用cd进入这一个挂接到的目录,就如同进入本地的目录一样。
超级终端
- 计算机显示终端,是计算机系统的输入、输出设备。
file命令
- file用来探测指定文件的类型,在终端中输入file exe.c:
- 语法:file
选项
参数
- 选项:
-b:列出辨识结果时,不显示文件名称;
-c:详细显示指令执行过程,便于排错或分析程序执行的情形;
-f<名称文件>:指定名称文件,其内容有一个或多个文件名称时,让file依序每列一个文件名称辨识这些文件;
-L:直接显示符号连接所指向的文件类别;
-m<魔法数字文件>:指定魔法数字文件;
-v:显示版本信息;
-z:解读压缩文件的内容。
- 参数:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。