实验一 开发环境的熟悉
本小组成员:
- 20175209 王梓鸿
- 20175213 吕正宏
- 20175214 林郅聪
实验一 -1- 交叉编译环境-(使用自己笔记本电脑)
实验内容:
- 1、 可以使用自己的笔记本,也可以使用实验室台式机,使用实验室机器的不用做本题
- 2、安装老师提供的
software
目录中的“VMware-workstation-full-10.0.1-1379776.exe”
- 3、解压老师提供的
software
目录中的“Ubuntu1204.rar”
- 4、用
VMWare
打开Ubuntu
,用户名:linux
,口令:1
- 5、建立实验目录
"mkdir linux_组员1学号_组员2学号_组员3学号"
- 6、在实验目录中编写
“hello word”
程序,另外补充几行打印所有组员的学号姓名 - 7、参考
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
- 8、分别运行
linuxhello
,armhello
,有什么结果?提交截图并用file
命令分析原因。
实验步骤:
进入虚拟机,用
VMWare
打开Ubuntu
,用户名:linux
,口令:1
建立实验目录,
mkdir linux_20155209_20155213_20155214
。在实验目录中编写
“hello word”
程序,另外补充几行打印所有组员的学号姓名,实验代码为:
#include <stdio.h> int main() { printf("Hello world!"); printf("\n20155209王梓鸿\n20155213吕正宏\n20155214林郅聪\n"); return 0; }
- 然后先用
gcc
进行编译: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
结果如图:
结果分析:
linuxhello
是基于x86-64
架构生成的指令集,armhello
是基于ARM
架构生成的指令集。
实验一 -2- 开发环境的熟悉目标机宿主机联通
实验内容:
- 1、使用自己笔记本电脑的,解压超级终端软件
“windows7st(Windows).rar”
,并在桌面上建立快捷方式(这个不用在实验室做) - 2、使用自己笔记本电脑的,到实验室把
“USB转串口线”
的USB
口插入自己的电脑,把串口连到实验箱的COM0
- 3、参考视频配置超级终端,用超级终端作为实验箱的显示终端
- 4、用
ifconfig
在超级终端中查看实验箱IP(目标机)
,在Ubuntu(宿主机)
中用ifconfig
在命令行查看IP
- 5、用网线连接实验室台式机(或自己笔记本电脑)和
ARM
实验箱的网口NET1
(最大屏旁边的) - 6、用
ping
命令保证目标机和宿主机能互相ping通,提交ping通的截图
实验步骤:
准备工作:检查
pc
的以太网连接,检查两个虚拟机是否均已调为桥接模式,连接pc
和实验箱;- 打开虚拟机win7,在设备管理器查看
usb
连接哪个端口; - 开启超级终端,新建一个终端并进行配置(端口与之前查看的端口一致):
- 在属性中,将波特率设置为
115200
,其他值均为默认。
- 在属性中,将波特率设置为
在
login
处输入root
,然后输入ifconfig
查看实验箱的ip
;将
Ubuntu
和win7
设置为与实验箱属于同一ip
和网关;
- 尝试虚拟机和实验箱互
ping
,截图如下:
实验一 -3- 开发环境的熟悉目标机运行程序
实验内容:
- 1、在超级终端中用
“mkdir /arm_组员1学号_组员2学号_组员3学号”
建立实验箱中程序运行目录“arm_组员1学号_组员2学号_组员3学号”
; - 2、在超级终端中运行
“mount -t nfs -o nolock 宿主机IP:/home/linux/linux_组员1学号_组员2学号 /arm_组员1学号_组员2学号__组员3学号”
通过NFS
把宿主机中的“linux_组员1学号_组员2学号”
映射到目标机中的“/arm_组员1学号_组员2学号_组员3学号”
- 3、超级终端中运行
"cd /arm_组员1学号_组员2学号_组员3学号"
- 4、超级终端中运行
"./armhello"
, 提交运行截图,并深入理解交叉编译
实验步骤:
首先需挂载文件
- 打开Ubuntu命令行终端,配置
/etc/exports
sudo vim /etc/exports
- NFS允许挂载的目录及权限在文件
/etc/exports
中进行了定义。根据题目我们要将ubuntu下建立的目录共享出来,在/etc/exports
文件末添加如下一行:
/home/linux_20165318_20165322_20165326 *(rw,sync,no_root_squash,no_subtree_check)
- 保存并退出后重启一下服务
sudo /etc/init.d/nfs-kernel-server restart
在超级终端中用
mkdir /arm_20155209_20155213_201552114
建立实验箱中程序运行目录arm_20155209_20155213_20155214
在超级终端中运行
mount -t nfs -o nolock 192.168.0.230:/home/linux/linux_20155209_20155213_20155214 /arm_20155209_20155213_20155214
通过NFS把宿主机中的linux_20155209_20155213_20155214
映射到目标机中的/arm_20155209_20155213_20155214
运行:超级终端中运行
cd /arm_20155209_20155213_20155214
,然后在超级终端中运行./armhello
运行成功后截图:
实验中的知识点:
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
tftp --TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
交叉编译:简单地说,就是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。
实验中遇到的问题
- 问题一:
Ubuntu
中修改ip
时,对/etc/network/interfaces
的修改无法保存 解决方法:未进入管理员模式,输入
su
,并输入密码即可。- 问题二:
Ubuntu
中修改ip
后,使用指令/etc/init.d/networking restart
重启网卡失败 解决过程:文档中
iface eth0 inet static
后面存在空格,删除空格后重启成功- 问题三:超级终端无法输入
解决过程:连接问题,重启实验箱并重新连接,打开设备管理器,查看
usb
连接的是哪个端口,并在超级端口新建连接时设置对应端口,待系统启动成功后,在login
处输入root
即可