2017-2018-1 学号20155329_5332_5302《信息安全系统设计基础》实验一 开发环境的熟悉 2017-2018-1 学号20155329《信息安全系统设计基础》实验一 开发环境的熟悉

队友博客链接

交叉编译

  • 什么是交叉编译,为什么我们要用交叉编译?

  • 交叉编译就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(OperatingSystem)。我们主要是学习操作系统。

  • 交叉编译的出现和发展:
    交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。

  • 什么是嵌入式系统:

    第一,嵌入式系统是一个计算机系统

  第二,嵌入式系统是针对某个应用的,也就是通常所说的“专用的”。

  •   为什么要学习交叉编译:
    嵌入式系统中的资源太少
    交叉编译出来的程序,所要运行的目标环境中,各种资源,都相对有限,所以很难进行直接的本地编译,最常见的情况是:
    因为编译,开发,都需要相对比较多的CPU,内存,硬盘等资源,而嵌入式开发上的那点资源,只够嵌入式(Linux)系统运行的,没太多剩余的资源,供你本地编译。所以需要在别的平台上进行跨平台编译,然后在其他的平台上运行

实验步骤

1. 交叉编译环境
  • 用VMWare打开Ubuntu
  • 建立实验目录"mkdir linux_20155329_20155302_20155332"
  • 在实验目录中编写“hello word”程序,另外补充几行打印所有组员的学号姓名
#include<stdio.h>
int main()
{
    printf(Hello,World!
");
    printf("Hello,5329胡佩伦
");
    printf("Hello,5332盛照宗
");
    printf("Hello,5302杨效宸
");
    return 0;
}
  • 参考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
  • 实验截图如下
    2017-2018-1 学号20155329_5332_5302《信息安全系统设计基础》实验一 开发环境的熟悉
2017-2018-1 学号20155329《信息安全系统设计基础》实验一 开发环境的熟悉
2. 目标机(实验箱)宿主机(Ubuntu)联通
  • 到实验室把“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通。
  • 实验截图如下:
    2017-2018-1 学号20155329_5332_5302《信息安全系统设计基础》实验一 开发环境的熟悉
2017-2018-1 学号20155329《信息安全系统设计基础》实验一 开发环境的熟悉
    2017-2018-1 学号20155329_5332_5302《信息安全系统设计基础》实验一 开发环境的熟悉
2017-2018-1 学号20155329《信息安全系统设计基础》实验一 开发环境的熟悉
3. 目标机运行程序:
tftp和nfs
  • TFTP
    协议是简单文件传输协议,基于UDP 协议,没有文件管理、用户控制功能。TFTP 分为服务器端程序和客户端程序,在主机上通常同时配置有TFTP 服务端和客户端。
  • NFS方式是开发板通过NFS挂载放在主机(PC )上的根文件系统。此时在主机在文件系统中进行的操作同步反映在开发板上;反之,在开发板上进行的操作同步反映在主机中的根文件系统上。实际工作中,我们经常使用NFS
    方式挂载系统,这种方式对于系统的调试非常方便。
  1. 配置/etc/exports
  2. $ sudo vim /etc/exports
  3. NFS
    允许挂载的目录及权限在文件
    /etc/exports
    中进行了定义。例如,我们要将
    /source/rootfs
    目录共享
    出来,那么我们需要在
    /etc/exports
    文件末尾添加如下一行:
    /source/rootfs*(rw,sync,no_root_squash,no_subt
  4. $ sudo
    /etc/init.d/nfs

kernel-server restart重启服务

实验步骤
  • 在超级终端中用“mkdir /arm_20155329_20155332_20155302” 建立实验箱中程序运行目录“arm_20155329_20155302_20155332”
  • 在超级终端中运行“mount -t nfs -o nolock 宿主机IP:/home/linux/linux_20155329_20155302_20155332 /arm_20155329_20155332_20155302”通过NFS把宿主机中的“linux_20155302_20155332_20155329组员2学号” 映射到目标机中的“/arm_20155332_5329_5302”
  • 超级终端中运行"cd /arm_5332_5329_5302"
  • 超级终端中运行"./armhello",
  • 截图如下
    2017-2018-1 学号20155329_5332_5302《信息安全系统设计基础》实验一 开发环境的熟悉
2017-2018-1 学号20155329《信息安全系统设计基础》实验一 开发环境的熟悉
清理工作
  • 收拾好实验箱将从箱内取出物品一一放回
  • 将拔下的网线插回实验室电脑主机。
  • 收拾座位卫生并离开。

实验体会及遇见的问题

遇见的问题
  • 我先是使用自己笔记本电脑做此次试验,在寝室已将电脑按照ARM实验箱指导书配置好,但是在实验室做实验时到了第二步骤时,目标机和宿主机ping不通。同学们用笔记本电脑做的也出现了此类问题,周围又无可用电脑,于是加入了和我共用实验箱的20155302_20155332同学的小组
  • 第三步骤时,绝对路径错了
    ,导致没做出来
    -第四步,由于时间原因并没有完成,下次实验时补上!
实验体会

此次实验结束后,给我的感觉就是时间紧张,早上发布的任务,中午才开始学习,做实验,对实验指导书进行学习,没检验。在实验过程中遇见问题,主要在自己笔记本电脑上耽误了很多时间,最后宿主机和目标机无法ping通。实验室电脑开机就用了半小时,装东西什么的弄下来快一小时了。给我们留下的实验的时间就不怎么足够了。

  • 这次实验后,希望老师下次实验的发布时间能提前一些。
  • 对于自己,在实验前将实验内容和老师的学习资料进行学习,将实验内容尽量做好拷入优盘,带入实验室直接用实验室电脑做。

静态库,动态库及交叉编译学习资料