Linux 交叉编译环境详细配置

2019-07-13 04:54发布

  我用过很久的Ubuntu,不过也是Linux下开发的新手,我在使用Linux做交叉编译环境时候遇到不少麻烦,一顿“google、百度发现有用的文章没几个,都是互相抄,还抄的显得很专业,嗬嗬,所以想这里写些经验体会,加以分享!:-)
不多说,直奔正题!

  关于嵌入式LINUX开发环境主要有以下几个方案: 1、直接安装 LINUX 操作系统; 2、在 WINDOWS 下安装虚拟机后,再在虚拟机中安装LINXUX操作系统; 3、两台电脑,一台 Linux 服务器,一台 Windows 客户端。 三种方案各有各的好处, 第三种方案,这种方式适合多人同时开发。可是需要以下设备:        1 Linux 服务器 服务器,用来交叉编译 bootlaoder、内核以及应用程序等,        1 Windows 机器 机器,SSH远程登陆至 Linux 服务器进行操作。 考虑到开发人员并不是那么多,也为了节省一台服务器,我们选择第一种方案:直接安装 LINUX 操作系统。   一、安装Ubuntu 10.10  至于以前使用Windows XP的选手,突然让我们换装Linux系统构成双系统,会有许多麻烦,因为Linux文件系统为EXT2EXT3等文件系统,如果我们直接安装Linux,将使Linux系统文件与原Windows XP系统文件隔离,访问起来麻烦。而且Linux的安装很容易破坏原XP的启动,为此,我们选择Ubuntu的简单安装方式,在Windows环境下,像安装软件一样使用WUBI安装Ubuntu 10.10,简单方便,至于具体安装步骤,网上有的是,不多罗嗦,也不是本文的重点`````至此Ubuntu 10.10算是安装结束。
  二、Ubuntu 10.10的基本设置 为了接下来的配置方便,这里先对Ubuntu进行一些简单的配置。         1、右键增加以管理员身份打开             在终端输入sudo apt-get install nautilus-gksu,然后回车就可以了。         2、修改root账户的密码。            在终端键入sudo passwd root” ,然后两次输入密码,即可。            以后在终端需要转换root账户的时候,只需键入su root,输入密码。            请牢记密码哈,当然如果实在忘了,可以通过$sudo passwd root 进行更改。
  三、Ubuntu 10.10下的NFS服务器配置 1、安装Ubuntu NFS
   Ubuntu
上默认是没有安装Ubuntu NFS 服务器的,因此我们首先安装Ubuntu NFS服务器端:       NFS(Network File System, 网络文件系统)可以通过网络将分享不同主机(不同的OS)的目录——可以通过NFS挂载远程主机的目录,访问该目录就像访问本地目录一样!因此,我们交叉编译以后,可以让开发板共享Ubuntu下编译好的文件目录,来运行程序。       (一般而言,使用nfs能够方便地使各unix-like系统之间实现共享.但如果需要在unix-likewindows系统之间共享,就得使用samba!        NFS运行在SUNRPC(Remote Procedure Call, 远程过程调用)基础上, RPC定义了一种与系统无关的方法来实现进程间通信.由此, NFS server也可以看作是RPC server.       正因为NFS是一个RPC服务程序,所以在使用它之前,先要映射好端口——通过portmap设定.比如:某个NFS client发起NFS服务请求时,它需要先得到一个端口(port).所以它先通过portmap得到port number. (不仅NFS,所有的RPC服务程序启动之前,都需要设定好portmap,不过一般情况下,使用默认的即可)          $ sudo apt-get install nfs-kernel-server
在一些文档中,提出还需要使用apt-get来手动安装NFS的客户端nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自动为我们把它们安装好。Nfs-commonnfs-kernel-server都依赖于portmap
  2、配置portmap   方法1:编辑/etc/default/portmap, -i 127.0.0.1去掉. 方法2: sudo dpkg-reconfigure portmap ,Should portmap be bound to the loopback address?N. 配置/etc/hosts.deny (禁止任何host(主机)能和你的NFS服务器进行NFS连接),加入: ### NFS DAEMONS portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL 配置/etc/hosts.allow 允许那些你想要的主机和你的NFS服务器建立连接。下列步骤将允许任何IP地址以192.168.1开头的主机(连接到NFS服务器上),也可以指定特定的IP地址。参看manhosts_access(5), hosts_options(5)。加入: ### NFS DAEMONS portmap: 192.168.1. lockd: 192.168.1. rquotad: 192.168.1. mountd: 192.168.1. statd: 192.168.1. /etc/hosts.deny /etc/hosts.allow 设置对portmap的访问.采用这两个配置文件有点类似"mask"的意思.现在/etc/hosts.deny中禁止所有用户对portmap的访问.再在/etc/hosts.allow中允许某些用户对portmap的访问. 运行 sudo /etc/init.d/portmap restart重启portmap daemon.   3、配置/etc/exports
Ubuntu NFS
允许挂载的目录及权限在文件/etc/exports中进行了定义。
例如,我们要将根目录下的/home/sun/mc9260目录共享出来,那么我们需要在/etc目录下找到exports文件,这时候就看出我们对Ubuntu的配置起作用了,单击鼠标右键,以管理员身份打开此文件,在文件的末尾添加如下一行:
/home/sun/mc9260 *(rw,sync,no_root_squash)
其中:/home/sun/mc9260是要共享的目录,*代表允许所有的网络段访问(此处十分关键,如果不是*的话,后面自己验证自己的共享目录是否可以加载的时候会出问题,后面会再提到,标记此处为:rw是可读写权限,sync是资料同步写入内存和硬盘,no_root_squashUbuntu NFS客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限。
其它Ubuntu NFS常用的参数有:
ro
只读访问
rw
读写访问sync所有数据在请求时写入共享
async nfs
在写入数据前可以响应请求
secure nfs
通过1024以下的安全TCP/IP端口发送
insecure nfs
通过1024以上的端口发送
wdelay
如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay
如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置。
hide
nfs共享目录中不共享其子目录
no_hide
共享nfs目录的子目录
subtree_check
如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check
和上面相对,不检查父目录权限
all_squash
共享文件的UIDGID映射匿名用户anonymous,适合公用目录。
no_all_squash
保留共享文件的UIDGID(默认)
root_squash root
用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root
用户具有根目录的完全管理访问权限
anonuid=xxx
指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 
指定nfs服务器/etc/passwd文件中匿名用户的GID
4Ubuntu NFS重启服务
$sudo /etc/init.d/portmap restart
$sudo /etc/init.d/nfs-kernel-server restart
5、测试Ubuntu NFS
此时可以运行以下命令来显示一下共享出来的目录:
$showmount -e
或者可以使用以下命令把它挂载在本地磁盘上,例如将/home/sun/mc9260挂载到/mnt下:
$mount -t nfs localhost:/home/sun/mc9260  /mnt
可以运行df命令查看是否挂载成功。查看后可以使用以下命令卸载:
          $ sudo umount /mnt   (
注意不要随便运行此句)
由于我在home/sun/mc9260 目录下建立了hello文件夹,所以$ls /mnt会有以下结果:

 
 
  四、Ubuntu10.10下的超级终端 windows下大家都使用过超级终端,可以通过超级终端与开发板进行交互。由于这次我使用的开发板为ATMELMC9620处理器,不支持显示屏来进行交互,所以这里我们使用超级终端,那么在Linux下的超级终端都有哪些呢?最著名的莫属MiniCom了,不过我觉得使用起来不是很方便,我采用的是GTKTerm,关于GTKTerm的安装比较简单: $sudo apt-get install gtkterm $ gtkterm          //回车后就会弹出一个对话柜 :
一般情况下不用设置就可以使用,但是有时候不能用的情况下你要对configuration(配置)进行设置,点击configuration:对相应的产数进行设置,OK保存就行了,不用了直接退出。
    以下进入开发板的Linux系统,即可看出串口连接已经完成   至于不喜欢GTKTerm的可以选择Minicom,安装过程是我择优转载的:   一般linux系统都自带了此工具,如果你的linux系统没有安装(判断是否安装参见步骤2) 一、安装 将下载的文件解压到任意目录,例如:/minicom 进入/minicom,执行./configure 执行命令make 执行命令make install 上述过程参见解压后的README   debianUbuntu下直接终端运行apt-get install minicom即可   二、配置(需要root用户角 {MOD})       执行minicom –s后出现配置界面        ========================== [configuration] Filename and paths File transfer and protocols Serial port setup Modem and dialing Screen and keyboard Save setup as df1 Save setup as…… Exit Exit from minicom      ========================== 使用向下键选择serial port setup(串口设置),按回车出现设置界面 ==========