2018-2019-1 20165202 20165210 20165214 实验一 开发环境的熟悉
一、实验内容
- 交叉编译环境
- 目标机宿主机联通
- 目标机运行程序
- 目标机模块分解
- 清理工作
二、实验步骤
-
交叉机编译环境
- 安装老师提供的software目录中的“VMware-workstation-full-10.0.1-1379776.exe”
- 解压老师提供的software目录中的“Ubuntu1204.rar”
- 用VMWare打开Ubuntu,用户名:linux,口令:1
- 建立实验目录
mkdir linux_20165202_20165210_20165214
- 在实验目录中编写
hello world
程序,另外补充几行打印所有组员的学号姓名
#include <stdio.h> int main(){ printf("HelloWorld! "); printf("20165202_20165210_20165214 "); 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插入实验室电脑
- 用超级终端作为实验箱的显示终端
- 用
ifconfig
在超级终端中查看实验箱IP(目标机):192.168.0.232
,在Ubuntu中(宿主机)中用ifconfig
在命令行中查看IP192.168.0.230
- 用网线连接实验室台式机和ARM实验箱的网口NET1
- 在超级终端中输入
ping 192.168.0.230
(ping UbuntuIP),在Ubuntu命令行中输入ping 192.168.0.232
(ping 超级终端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:目标机与宿主机ping不通
- 问题1解决方案:关闭防火墙,顺利ping通目标机和宿主机。
四、实验体会与总结
本次实验学习了新的知识点和命令
- 交叉编译:
- 搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。
- 交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。
- 简单来说,就是在一个平台上生成另一个平台上的可执行代码。
- 本次实验中
gcc
和arm-linux-gcc
的区别是:gcc
是linux下的C语言编译器,编译出来的程序在Ubuntu虚拟机上执行,而arm-linux-gcc
用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。
- 宿主机与目标机
- 在嵌入式开发过程中,宿主机是执行编译、链接嵌入式软件的计算机。
- 目标机是运行嵌入式软件的硬件平台。通常我们用的PC机就是宿主机,而我们本次实验用的ARM实验箱则是目标机。
- 我们在宿主机上编译链接生成的可执行程序需要放到目标机上运行通过串口、网络、USB下载到目标机上,运行程序
armhello
。
- NFS
- NFS是Network File system的缩写,即网络文件系统。
- 使我们能够达到文件在不同系统间的共享。当用户想使用远程文件时只要用“mount”命令就可把远程文件系统挂接在自己的文件系统之下,使远程的文件与使用本地计算机上的文件一样。
- 在计算机A上,想要把计算机B上的
/home/linux/exp
挂接到A上的/exp
,执行命令mount B的IP地址:/home/linux/exp /exp
- 当客户机挂接一个目录或文件时,并不是说复制服务器上的这一个目录或文件到本地的计算机上,而是在使用时从服务器上读取文件到本地的内存中,因此,可以用cd进入这一个挂接到的目录,就如同进入本地的目录一样。
- 超级终端
- 计算机显示终端,是计算机系统的输入、输出设备。
- file命令
- ````file
用来探测指定文件的类型,我在终端中输入
file exe.c```: - 语法
file (选项) (参数)
- 选项:
-b:列出辨识结果时,不显示文件名称; -c:详细显示指令执行过程,便于排错或分析程序执行的情形; -f<名称文件>:指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称; -L:直接显示符号连接所指向的文件类别; -m<魔法数字文件>:指定魔法数字文件; -v:显示版本信息; -z:尝试去解读压缩文件的内容。
- 参数:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
- ````file