2019-2020-1 20175203 20175206 实验一 开发环境的熟悉

1-交叉编译环境

  1. 安装老师提供的software目录中的VMware-workstation-full-10.0.1-1379776.exe
  2. 解压老师提供的software目录中的Ubuntu1204.rar
  3. 用VMWare打开Ubuntu,用户名:linux,口令:1
  4. 建立实验目录mkdir linux_20175203_20175206
  5. 在实验目录中编写“hello word”程序,另外补充几行打印所有组员的学号姓名
#include <stdio.h>

int main()
{
    printf("hello world\n");
    printf("20175203马羽达\n");
    printf("20175206李得琛\n");
}
  1. 参考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
  2. 运行结果如下
    代码运行截图:

    不能执行armhello的原因:
    (file命令查看两个执行文件位数不一样,armhello为32位,linux运行的是64位,所以不能实现在Ubuntu中运行armhello的可执行文件,需映射到超级终端上面。)

2-目标机宿主机联通

  1. 使用自己笔记本电脑的,解压超级终端软件“windows7st(Windows).rar”,并在桌面上建立快捷方式(这个不用在实验室做)
  2. 使用自己笔记本电脑的,到实验室把“USB转串口线”的USB口插入自己的电脑,把串口连到实验箱的COM0,用网线连接实验室台式机(或自己笔记本电脑)和ARM实验箱的网口NET1
  3. 参考视频配置超级终端,用超级终端作为实验箱的显示终端
  4. 新建一个终端并进行配置,在属性中,将波特率设置为115200,其他值均为默认。
  5. ifconfig在超级终端中查看实验箱I目标机),在Ubuntu中(宿主机)中用ifconfig在命令行查看IP
  6. ping命令使目标机和宿主机能互相ping通,ping通的截图如下:
    虚拟机ping超级终端:

    超级终端ping虚拟机:

3-目标机运行程序

学习资源中第五周的“ARM实验箱实验指导书”的第二章,理解tftpnfs的作用:

    TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
    TFTP是一个传输文件的简单协议,它基于UDP协议而实现。此协议设计的时候是进行小文件传输的。它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有两种模式:netascii(8位的ASCII码形式),另一种是octet(8位源数据类型)
    网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(pressentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。
    NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送。
  1. 在超级终端中用mkdir /arm_20175203_20175206建立实验箱中程序运行目录arm_20175203_20175206
  2. 在超级终端中运行mount -t nfs -o nolock 宿主机IP:/home/linux/linux_20175203_20175206 /arm_20175203_20175206通过NFS把宿主机中的linux_20175203_20175206 映射到目标机中的“/arm_20175203_20175206”
  3. 超级终端中运行cd /arm_20175203_20175206
  4. 超级终端中运行./armhello, 提交运行截图如下:

实验遇到的问题及总结

1.对于不能在ubuntu中执行armhello的问题:
用file armhello查看文件类型是32位的执行文件,但linux是64位的,要在超级终端上运行。
2.如何使得目标机与主机可以相互ping通:
首先要将两台主机的网络连接改为桥接模式:

然后使用vim /etc/network/interfaces打开网络配置文件:

进行端口的配置,配置ip为192.168.0.130(网关与超级终端一致即可,win7系统中进行相同的操作)
然后输入命令/etc/init.d/network restart将网络重启更新
结束后即可双机ping通
特别注意:
interfaces文件中第二行中后面有空格会对网络ping通造成相当的影响,建议将空格去掉!!!

还有就是com的端口一定要与设置的保持一致,否则也会影响网络的ping通。
3.关于目标机与宿主机之间的文件映射问题:
在超级终端上能看到虚拟机上的armhello的原因是因为将ubuntu下建立的目录共享出来,即映射到win7超级终端上进行执行,那么我们现在就要对需要共享的文件进行赋予权限:
打开Ubuntu命令行终端,配置/etc/exports:
sudo vim /etc/exports
在文件/etc/exports中进行了允许挂载权限的定义,在/etc/exports文件末添加如下一行:
/home/linux/linux_20175203_20175206 *(rw,sync,no_root_squash,no_subtree_check)

然后使用权限更新命令sudo /etc/init.d/nfs-kernel-server restart来重启服务
权限即可赋予,然后我们在超级终端中建立实验箱中程序运行目录
mkdir /arm_20175203_20175206
把宿主机中的程序运行目录映射到目标机中,在超级终端中运行
mount -t nfs -o nolock 192.168.0.130:/home/linux/linux_20175203_20175206 /arm_20175203_20175206
即可得到实验三的结果,由于位数的更替,其中的文字被变成了乱码,如果是字母形式则不会。

posted @ 2019-11-09 16:30  20175206ldc  阅读(178)  评论(0编辑  收藏  举报