之开发环境搭建
【创龙AM4379Cortex-A9试用体验】之开发环境搭建
上一篇试用报告,介绍了一下对开发板的上电操作,简单体验了一下多LED灯、Hello World、网络等基本功能的试用。在使用过程中,发现按键功能的试用没用任何反应,但是从开发板启动后的/dev设备驱动中确实加载了/dev/input/event2,看来还是需要我们自己去开始、实现相关的驱动,自己编写应用层的程序,以更好的探索AM4379的强大功能。
要想做更加深入的研究与功能挖掘,一个操作方便、高效的开发环境是必不可少的。根据创龙公司提供的开发板配套光盘,及开发环境搭建手册,发现不管是32位还是64位Ubuntu虚拟机都无法完成对TI SDK的安装,而交叉编译工具链、QT、内核相关的配置均在成功安装了TI SDK的前提下。后来,干脆用创龙给提供的Ubuntu版本,重新安装基于虚拟机的Linux系统,最后还是没有成功安装TI SDK。不知道是资料的问题,还是我个人的操作问题,怎么办呢?
当然还是有办法的,创龙除了TI SDK,还提供了与AM4379本身架构想匹配的交叉编译工具链,内核源码,这就好办了,我们一步一步的操作,为我们后续的QT移植、Python移植,以及字符设备驱动程序的开发,创建一个稳定可靠的开发环境。
1. 安装交叉编译工具链
在光盘资料中,到tools/linux下,找到gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar文件,如图所示:
将该交叉编译工具压缩包拷贝到Ubuntu虚拟机,执行如下命令:
tar -xvf gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar-C /opt
将讲编译工具解压到/opt目录下(注:该工具包是个打包文件,并不是压缩文件,后缀不带.gz或bz2),如图所示:
我们在利用交叉编译工具编译C或C++程序时,可以直接使用arm-li nux-gcc或使用命令的绝对路径,显示采用绝对路径是相当麻烦的,我们设置一下环境变量,使我们今后交叉编译程序时只需输入arm-linux-gnueabi-gcc即可。
输入命令:
sudo gedit /etc/profile
在打开的文件末尾输入如下图所示的内容:
执行命令是环境变量设置生效:
sudo source /etc/profile
执行命令,如果出现如图所示的信息,说明交叉编译链设置完成:
2. 编译内核
由于后续的试用过程中,会涉及到驱动程序的开发,我们必须先编译好内核,以备我们后续工作中使用。
创龙公司给我我们提供了三个版本的内核源码,我们先看一下当前开发板安装的是哪一个版本,在TL-4379开发板中执行命令,
uname -a
结果如图所示:
从上图信息中,我们需要编译与给内核一致的版本,从kernel文件夹中将文件linux-3.14.43.tar拷贝到ubuntu虚拟机,执行如下命令:
sudo tar -jxvf linux-3.14.43.tar.bz2-C /opt/linux3.14.43
将内核源码解压到/opt/linux3.14.43目录下,如图所示:
执行命令清理内核:
cd linux-3.14-43
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-distclean
执行命令,生成.config文件:
sudo make ARCH=armCROSS_COMPILE=arm-linux-gnueabihf- tisdk_am437x-evm_de fconfig
结果如图所示:
执行命令配置内核树:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-am437x-gp-evm.dtb
执行结果如图所示:
执行命令开始编译内核:
sudo make ARCH=armCROSS_COMPILE=arm-linux-gnueabihf- zImage -j2
编译结果如图所示:
3. 配置NFS服务
我们在Linux主机上交叉编译后的程序需要拷贝到TL-4379开发板上运行,这里我采用NFS网络文件系统的方式。在Linux主机上安装NFS服务软件,创建并配置NFS文件夹,具体步骤如下:
sudo apt-getinstall nfs-kernel-server 安装 NFS 服务器端
创建NFS共享目录:sudo mkdir /nfsshare
编辑/etc/exports文件,在该文件中设置/nfsshare为共享目录,并设置其访问权限。
输入命令:sudo gedit /etc/exports
打开/etc/exports文件后,把“/nfsshare”目录设置为 NFS 共享目录,在该文件末尾添加下面的一行: /nfsshare *(rw,sync,no_root_squash)
如图所示:
修改完成后,保存退出/etc/exports文件,在命令行执行如下命令:
sudo chmod -R 777/nfsshare
sudo chown –Rnobody /nfsshare
至此,我们就在PC机端设置了NFS共享目录。
执行如下命令启动NFS服务:
sudo /etc/init.d/nfs-kernel-server start
4. 交叉编译C运行并通过NFS在开发板上运行
在Ubuntu虚拟机上编写一个C程序,交叉编译,将编译后的可行执行文件拷贝到上一节创建的NFS共享目录,以便开发板挂载NFS,执行目标程序。
4.1 创建C程序
执行命令:
gedit hello.c
#include <stdio.h>
int main(void)
{
printf("HelloWorld!\n");
return0;
}
4.2 交叉编译C程序
执行命令:
arm-linux-gnueabihf-gcc -o hello hello.c
编译结果如图所示:
4.3 在开发板上执行程序
启动开发板,执行如下命令:
mount -t nfs 192.168.1.136:/nfsshare /mnt-o nolock
cd /mnt
./hello
执行结果如图所示: