2017-2018-1 20155225 20155229 实验一 开发环境的熟悉
一、实验目的
学习了解交叉编译的作用,并用交叉编译的方式简单编程。
二、实验步骤
搭建交叉编译环境
-
用VMWare打开Ubuntu,建立实验目录
-
在实验目录中编写“hello world”程序,并打印组员学号信息
-
用gcc编译hello.c
-
用arm-none-linux-gnuenbi-gcc编译hello.c
-
分别运行查看结果
用gcc编译后,直接显示了运行结果;交叉编译后显示无法执行二进制文件。用file命令查看这两个文件,linuxhello是在linux的x86-64系统下运行的,armhello是在ARM系统下运行的。可知虽然都是linux系统下的程序,但也会因为具体的操作系统不同而无法运行。
开发环境的熟悉——目标机、宿主机联通
- 安装超级终端软件,用“USB转串口线”连接电脑(USB口)和实验箱com0(串口),用超级终端作为实验箱的显示终端。
- 用网线连接电脑和实验箱的网口NET1,保证互相能ping通。如下图所示:
开发环境的熟悉——目标机运行程序
- 在超级终端中建立实验目录
- 运行“mount -t nfs -o nolock 宿主机IP:/宿主机实验目录 目标机实验目录”,通过nfs将宿主机的实验目录映射到目标机中的实验目录里
- 在超级终端里运行armhello,成功运行!
开发环境的熟悉——目标机模块分解
在目标机上重现“系统调用版的myod”,在超级终端上运行,结果如下图:
三、实验中的问题及解决过程
ping不通
实验过程中换了三台电脑都ping不通,最后发现是网口接错了。今后做实验一定会吸取这次的教训,加强硬件知识,每一步都要细致无误。
宿主机上可以编译运行,但目标机不行
在实验第四步中,在目标机上重现myod,我们在宿主机上可以编译运行,但映射到目标机之后却不行。发现原来还是按习惯用gcc编译的,使用交叉编译后,成功运行。
四、学到的知识
NFS
NFS就是通过网络共享目录,让网络上的其他服务器能够挂载访问共享目录内的数据。这就可以理解mount命令 -t nfs:即将宿主机的目录挂载到目标机,所以IP是宿主机的IP,一旦连接断开,目标机上不会再有该共享目录。
至于-o nolock,是文件锁,因为nfs mount默认选项包括文件锁,依赖于portmap提供的动态端口分配功能。所以需要开启文件锁。
参考资料: