搜档网
当前位置:搜档网 › Linux交叉编译环境

Linux交叉编译环境

Linux交叉编译环境
Linux交叉编译环境

开发编译环境

1.交叉编译器的安装,与使用

以ubuntu-14.04.4-desktop-amd64 为例

将附录1的arm_toolchain.tar.gz 选择一个目录COPY过去,(此处以/opt为例)

tar zxvf arm_toolchain.tar.gz

修改~/.bashrc

在最后一行添加

将/opt/X3改成你解压的所在目录即可

source ~/.bashrc

在终端查看是否正确,输入arm后按TAB键若出现

安交叉编译器安装正确

若不添加该环境变量,则在使用该编译器时,请使用绝对路径

如:

部分LINUX操作系统,可能存在所需的库并未安装,在编译时若提示未能找到相关库,请自行搜索该库的相应安装

若出现

arm-Linux-gcc /usr/local/arm/4.3.2/bin/arm-linux-gcc: 行3: /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc: 没有那个文件或目录(No such file or directory)

且进入external-toolchain/bin/ 直接运行./ arm-none-linux-gnueabi-gcc出现同样提示,则可能原因是64位系统需要安装32位相应库

解决方法:

方法一:

sudo apt-get install lib32z1

方法二:

sudo apt-get install g++-multilib

方法三:

$ sudo dpkg --add-architecture i386

$ sudo apt-get update

$ sudo apt-get install ia32-libs

(工具:附录1-arm_toolchain.tar.gz)

2.NFS服务安装

首先安装nfs-kernel-server

apt-get install nfs-kernel-server

NFS主要有3类选项:

访问权限选项

设置输出目录只读:ro

设置输出目录读写:rw

用户映射选项

all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);

no_all_squash:与all_squash取反(默认设置);

root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);

no_root_squash:与rootsquash取反;

anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);

anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

其它选项

secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);

insecure:允许客户端从大于1024的tcp/ip端口连接服务器;

sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;

async:将数据先保存在内存缓冲区中,必要时才写入磁盘;

wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);

no_wdelay:若有写操作则立即执行,应与sync配合使用;

subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);

no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;在/etc/exports文件中添加配置:

此处添加了二个输出目录作为网络共享目录,可用于挂载

在/etc/hosts.allow中添加配置:

portmap:192.168.0.0/255.255.0.0 (表示可访问的IP地址)

在/etc/hosts.deny中添加配置:

portmap:ALL

重新启动两个服务:

service portmap restart

service nfs-kernel-server restart

(其它系统请自行搜索相关方法安装NFS以及启动服务)

3.打包与调试终端

3.1打包debug版终端机

解压附录2

pack下面有三个文件夹output, pack_src, pctools,一个脚本文件pack

pack_src,该文件夹下存放不同项目的文件夹,文件夹名以机器型号命名。如B1S-801CD16S7,

目录结构如下图,有boot、config、kernel、rootfs、system、tmp

( B1S-801CD16S7目录结构)

其中boot和kernel一般是不需要修改的,主要修改config、rootfs、system文件夹下的文件。

system目录下主要放置应用程序相关的资源图片(image)、字体(FONT目录)、界面配置文件(layout)、动态库(lib/usrlib)、声音文件(sound)、设备驱动(vendor/modules)等

config一般只需要修改以下两个文件

---logo.jpg 开机界面

---env.cfg 调试时把PC上的某个目录挂载成根文件系统需要修改挂载路径和IP

(看NFS服务一节)

修改env.cfg

Ipaddr为本机IP,serverip为编译服务器(NFS服务端)IP

并修改

nfsroot=AAA.AAA.AAA.AAA:/dir/dir/dir ip=BBB.BBB.BBB.BBB:https://www.sodocs.net/doc/65955472.html,C:DDD.DDD.DDD.DDD….

将IP地址AAA改为NFS服务端地址,BBB改为你需要设置的终端地址,CCC仍是NFS服务端地址,DDD为该网络下的网关地址,DDD为掩码

在pack目录执行以下命令

./pack -b B1S-801CD16S7 -d debug

生成image.dd在output/output_ B1S-801CD16S7目录(在output目录下,以output_开头,接机器名称)

再将image.dd拷贝到做好的LINUX专用烧录卡中(详见烧录卡制作文档),上电烧录

(开始烧录)

(烧录完成)

接串口,并在命令行输入ls

然后在NFS服务端相应目录新建test.test文件

再在命令行输入ls

Nfs挂载文件系统成功,只需要将LINUX端编译好的app拷入到该NFS目录中,然后通过串口工具在命令行

中输入

即可运行调试。

3.2 打包发行版本

打包发行版本和DEBUG版本的唯一区别就是需要将你编译好的APP,放入到打包文件夹中,通常放置在system目录中或该目录的子目录中。

RELEASE版本通常不需要修改什么,在rootfs/etc/init.d中有一个脚本文件,它的工作是:

修改系统目录

(将system改为FlashDev,将数据存储目录data 改为UserDev)

系统运行时加载驱动,

系统启动后自动运行程序,

(即为/system目录中的的app0)

以及程序运行前的一些准备工作,如果需要在程序运行前还有工作需要做,都可以在此脚本中编写相应的命令

打包release版本运行

./pack -b B1S-801CD16S7

生成image.dd在output/output_ B1S-801CD16S7目录

(打包:附录2-pack.tar.gz)

3.3 串口工具与调试

这儿以SecureCRT为例

安装好SecureCRT后

选择New Session

选择Serial

选择相应串口

波特率选115200 点击完成

串口到此设置完成,连接即可输入命令

相关主题