ARM平台环境搭建与交叉编译的实现


         通过启动的打断机制可以使得arm平台在没有操作系统的情况下的驱动加载,直接通过GPIO和一些特定的IO引脚与片内外设的控制器或者直接挂载在系统的数据总线和地址总线上,当我们通过eclipse编译后生成的bin文件通过串口终端下载到内存地址的0x20008000处,此处的0x20008000u-boot引导内核启动的起始地址,所以当我们把编译好的bin文件下载到此处,之后再在此处运行,从而可以驱动硬件的功能,比如有ledbeep蜂鸣器和串口通信以及I2C的通信和中断机制的实现等


1)在了解系统启动的原理之前,先搭建好环境,构建可以相互交叉编译的平台
首先在不同操作的平台能够完成交叉编译,我们应该考虑到怎么实现资源的共享,在之前的学习TFTP
传输和NFS资源共享,就可以实现数据的下载和共享


TFTP传输的设置:


      我们编译的平台是在Linux的操作系统上使用的GCC编译,这样就会导致在ARM平台上不能执行,此时我
们应该在Linux操作系统下通过ARM-cortex-a8的GCC编译器把我们所要执行程序编译好,通过TFTP传输
下载到ARM平台的虚拟内存中,然后通过相关的操作去读取或者固化到内存中,使得下次boot引导启动
时会执行我们所编译好的程序,从而实现我们编写的应用程序的功能,另一方面也体现了Linux嵌入式
应用可裁剪,功能专一的概念
在ARM平台启动时通过BOOT引导启动已经设置了一些功能比如说NAND FLASH 的内存管理和NET网络的设
置,linux 系统支持多种网络服务,比如说通过NFS实现远程挂载,通过TFTP实现文件的传输,还可以
通过SSH实现远程登录,但是这些服务在Linux下都没有开启的,需要我们手动去配置,若配置好这些
服务,能大大提高实际的Linux的开发

1)TFTP服务 
TFTP被称为一种网络协议,准确的说是一种网络文件传输协议(trial file transfer protocol),
在嵌入式交叉开发环境中可以广泛使用,一般Linux系统会默认装载TFTP软件包,若没有加载,可以通
过sudo apt-get install tftpd-hpa
   1:由于TFTP是一种文件传输,那么在文件传输之前我们应该准备一个工作目录,它来提供文件的下
载的地址,一般系统默认的配置工作目录是在/VAR/LIB/TFTPBOOT目录下,我们可以通过修改配置文件
,来重新定义配置自己的工作目录  sudo  vi /etc/default/tftpd-hpa,就可以进入配置脚本更改工
作目录,当配置好文件时,在sudo service tftp-hpa restart 重新启动TFTP协议,之后我们可以通
过tftp 192.168.6.78 下载文件,而在arm平台通过TFTP协议下载编译好的文件,下载到指定的内存地
址,例如 tftp 20008000 zImage ,这样如果网络环境好的话,就可以顺利的把我们所需要的文件内
容下载到指定的内存,这样就可以通过go 20008000时就可以运行自己编写的应用程序

2)NFS服务
      NFS(network file system )被称为网络文件系统,网络文件系统是许多操作系统都支持的文件系统
的一种,它可以通过网络实现共享目录和文件,通过NFS服务就像访问本地的文件目录一样,这种概念
在u_boot 移植的时候有很重要的作用,因为在U-BOOT引导启动到LINUX 的内核启动,而在内核的启动
要结束的时候会挂载根文件系统,而此时kernel已经根据之前的boot初始化内存环境和内存格局创建
了虚拟内存空间,之后在内核运行要结束时会挂载文件系统,这是我们可以自己把文件系统的可执行
文件下载到虚拟内存空间的DEV/BLOCK2模块中运行,也可以通过NFS服务通过bootargs命令在内核运行
之前共享一个根文件系统,那么我们就有必要了解和通过NFS服务更好的实现交叉编译
  1:sudo apt-get install nfs-kernel-server下载NFS软件包,在NFS的软件包也可以看出NFS是一
种kernel的服务,主要提供共享文件系统,从而给应用提供一个环境
  2:cat /etc/export 可以看到一些NFS的配置信息,我们只有设置共享的文件系统目录和一些目录
的权限和更新即可  /source/rootfs  *(rw,sync,no_root_squash)
这里的rw(读写)表示访问方式(ro只读);sync 表示所有数据在请求是写入共享 ;no_root_sqush
表示是root用户具有完全访问根目录权限
  3:手动启动NFS服务 sudo /etc/init.d/nfs-kernel-server start (stop)(restart)(status)
;还可以通过showmount显示挂载的共享文件系统
  4:当了解了NFS服务器上的共享资源后,我们便可以使用mount命令在客户端挂载NFS共享资源,当客户端使用mount命令将NFS服务器上的导出文件系统挂载到本地后,接下来对挂载的文件系统操作与本地文件系统没有任何区别  sudo mount -t nfs 192.168.6.77:/source/rootfs /mnt/nfs


3)SSH 服务
SSH服务可以通过远程登录UBUNTU ,可以通过putty实现ssh服务以及串行口的连接


4)IP网络的设置
   1:在前面的服务开启之前,我们要做的很重要的一件事就是设置自己的IP地址,在虚拟机中的Ubuntu中一般有两种方法设置自己IP地址,我们可以通过ifconfig 指令获得自己的IP的相关信息,其中有eth0~9等表示当前主机的第一个一台网卡(IP接口),LO表示主机本身的环回地址,一种是通过dhclient可以动态随机获得一个IP地址,还有一种就是通过ifconfig eth0 192.168.6.77 可以暂时设置一个IP地址,但在下次重启之后就会改变,当设置好了IP地址后,可以通过 ifconfig eth0 up/down开启和禁用网卡。
   2:上面所说的只是暂时设置自己的IP地址,那么同规格上面方法可以静态设置永久的IP地址呢,其实我们可以通过修改配置文件来静态设置自己的IP地址,第一步:sudo /etc/network/interfaces
通过刚设置好的文件后,需要通过手动在终端输入“sudo /etc/init.d/networking restart ”命令来生效配置。这样我们就搭建好了不同平台之间的操作环境

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值