‘壹’ buildroot成功后如何编译Qt应用程序
首先得把我们在X86机上调好的程序进行交叉编译,如果在X86上都没有通过的话。。那就不用交叉编译了,(肯定是通不过的),还是到正题吧,设置好环境变量,我们用以用echo 来查看环境变量,echo $TMAKEPATH ,如果返回的不是.../qws/linux-arm-g++ 的字符的话,我们一定得从新设置,
export TMAKEPATH=/tmake 的安装路径/qws/linux-arm-g++ ,同时QTDIR一定得要指定QTE的安装路径,设置过程如下:
export QTDIR=...../qt-2.3.7
以上环境设置好后,我们可以使用tmake来生成Makefile,注意这里我们是用tmake,而不是用qmake(注意),tmake工具在tmake包里面。 具体做法,我们可以在命令行下打:
tmake -o Makefile 工程名.pro
这样我们就新生成了一个Makefile文件,下一步,我们要打开这个文件,做一些小的修改
1: 将LINK=arm-linux-gcc 改为:LINK=arm-linux-g++
2:将LIBS=$(SUBLIBS) -L$(QTDIR)/lib -lm -lqte这句话改为:
LIBS=$(SUBLIBS) -L/opt/gcc-2.3.2-glibc-3.3.2/lib -L$(QTDIR)/lib -lm -lqte
加上你的交叉编译的库。
最后我们可以make了,一个可以在您的板子上可以运行的二进制文件产生了。linux
‘贰’ GCC能否运行于ARM-Linux环境下即GCC能否在ARM平台上运行
简答:
gcc可以运行在arm-linux下。
gcc,可以在arm平台上运行。
详解:
gcc,一般指的是,pc版,x86的平台,
用于嵌入式系统,比如arm的cpu,linux的系统下,是:
本来,一直就可以的,
而且有专门的属于:
交叉编译
简答说就是:
在你的pc端,x86的cpu上,制作出一个交叉编译器
一般叫做arm-linux-gcc
用此arm-linux-gcc去编译你的程序
编译出来的程序,可以运行在嵌入式开发板,比如arm的linux下
极其详尽的解释:
我刚写个教程,你去看就知道了:
交叉编译详解
交叉编译详解
http://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html
此教程的主要内容包括:
了什么是交叉编译
为何要有交叉编译
什么是工具链
什么是交叉工具链
交叉编译器的名字的命名规则:包括你这里所说的arm-linux-gcc的含义
如何获得交叉编译器
制作交叉编译器的各种工具:简介了常见的crosstool-ng,buildroot,crosstool等等工具
使用已有的交叉编译器和自己手动编译交叉编译器之间的对比
交叉编译方面的心得和注意事项
等你看完了后,建议用crosstool-ng,或者是buildroot去自己编译一个arm-linux的gcc。
‘叁’ 如何编译openwrt,无线默认打开和修改SSID名称
在buildroot里添加一个files文件夹,然后里面的新建etc文件夹,在etc里新建config文件夹,在
<buildroot>/etc/config文件夹里放进你配置好的wireless文件
这是在你的设备处于官方支持的列表的前提下(固件能从官方源码直接编译)。市面上各种图便宜改来改去的你要会自己修改源码才可以
‘肆’ Linux下的QTE下载路径
qt下载地址,里面东西很全:
ftp://ftp.trolltech.com/pub/qt/source
详情参考这个帖子:
[转]Qt Qt/E Qtopia 的关系
http://hi..com/serial_story/blog/item/074bbd26f028561b8b82a1a7.html
在buildroot下编译参考:
buildroot-2009.11下编译QT (Qtopia) 4.5.2 过程记录
http://hi..com/serial_story/blog/item/e98ce2c442c8cdc738db4964.html
单独编译参考:
qt-extended-opensource-src-4.4.3 编译过程记录
http://hi..com/serial_story/blog/item/5d3a833e6a7969f6838b135f.html
‘伍’ 使用buildroot编译arm架构的linux内核,使其支持usb摄像头,并使用qemu虚拟运行
#没有吧ext* 和 VFS编进去吧
cd/usr/src/linux
makemenuconfig
#选择ext4和VFS,在FileSystem里,很好找
make;makemole_install;makeinstall
‘陆’ 如何在TI的AM335x上面使用SGX加速的有OpenGL支持的QT
TI官方的指南请看这里,因为发布时间的关系,这里面已经有很多和最新的软件包不匹配的地方。经过我的努力,我把这个指南中间复杂的部分给做到Buildroot里面去了,基本上实现了“傻瓜式”编译,可通过菜单选择,简单地实现QT下使用SGX硬件加速的OpenGL。
由于本文还涉及到了SGX硬件驱动程序模块的编译,所以看上去还会比较长,但这部分内容没有什么难度。转载请注明来自EE小站,[email protected]。
简单的梳理下:
前提是U-boot、内核、文件系统都搞利索了,板子能启动了
TI的Wiki提供了U-boot和内核的说明,地址点这里。
TI的SDK里提供了制作好的文件系统,但是太庞大了,可以下载Buildroot自己做一个。
下载我做的Buildroot补丁,和TI图形SDK
补丁的地址在这里。
这个补丁是我给Buildroot 2013.05做的,与之相配的TI图形SDK在这里,下“Graphics_SDK_setuplinux_4_10_00_01_BinOnly.bin”就可以。
应该2013.05之后一段时间Buildroot版本都可以使用这个补丁。
用SDK编译内核模块
可以参照TI的指南,地址点这里。也可以直接看本文。
用Buildroot制作根文件系统
具体过程如下:
假设Graphics_SDK_setuplinux_4_10_00_01_BinOnly.bin下载到了/home/c,那么
~ # cd /home/c
/home/c # chmod 744 ./Graphics_SDK_setuplinux_4_10_00_01_BinOnly.bin
/home/c # ./Graphics_SDK_setuplinux_4_10_00_01_BinOnly.bin
会出来一个交互的安装界面,安装的时候选择“8.x”那项(因为处理器是AM335x),并且把SDK安装到,例如/home/c/core335x_bsp/graphics_sdk_4_10_00_01
安装完后,打开/home/c/core335x_bsp/graphics_sdk_4_10_00_01/Rules.make
假设你的ARM交叉编译器安装在/usr/local/arm/4.7.3-2,前缀是arm-none-linux-gnueabi-,你的内核在/home/c/core335x_bsp/linux-3.2.21,那么就Rules.make中的内容修改成这样
# Set home area (ex /home/user/)
HOME=/home/c/core335x_bsp
# Set Toolchain path (ex /home/user/toolchain/arago-2011.09/armv7a)
CSTOOL_DIR=/usr/local/arm/4.7.3-2
# Set Tool chain prefix (ex arm-arago-linux-gnueabi- )
CSTOOL_PREFIX=arm-none-linux-gnueabi-
# Set kernel installation path ( ex /home/user/linux-04.00.01.13 )
KERNEL_INSTALL_DIR=/home/c/core335x_bsp/linux-3.2.21
# Set Target filesystem path ( ex /home/user/targetfs )
TARGETFS_INSTALL_DIR=$(DESTDIR)
# Set installation folder
GRAPHICS_INSTALL_DIR=$(HOME)/graphics_sdk_4_10_00_01
然后就可以编译了
/home/c # cd core335x_bsp/graphics_sdk_4_10_00_01
/home/c/core335x_bsp/graphics_sdk_4_10_00_01 # make DESTDIR=/home/c/nfsroot OMAPES=8.x
假设你的根文件系统在/home/c/nfsroot,那么请确保有/home/c/nfsroot/etc和/home/c/nfsroot/etc/init.d这两个目录,否则安装时候会出错,接下来安装
/home/c/core335x_bsp/graphics_sdk_4_10_00_01 # make DESTDIR=/home/c/nfsroot OMAPES=8.x install
这样,SDK库就编译好了,接下来把内核的模块安装到文件系统里,假设内核在/home/c/core335x_bsp/linux-3.2.21,已经配置并且编译好了
/home/c/core335x_bsp/graphics_sdk_4_10_00_01 # cd /home/c/core335x_bsp/linux-3.2.21
/home/c/core335x_bsp/linux-3.2.21 # make ARCH=arm moles_install INSTALL_MOD_PATH=/home/c/nfsroot
然后需要把内核驱动模块增加到依赖表中,位置在/home/c/nfsroot/lib/moles/3.2.21/kernel/drivers/moles.dep,在里面增加这两行:
extra/omaplfb.ko:
extra/pvrsrvkm.ko:
接下来就可以用Buildroot制作文件系统了,假设Buildroot的压缩包buildroot-2013.05.tar.bz2下载到了/home/c/core335x_bsp,我做的Buildroot补丁buildroot-am335x.patch下载到了/home/c/core335x_bsp
/home/c/core335x_bsp/linux-3.2.21 # cd /home/c/core335x_bsp
/home/c/core335x_bsp # tar xf buildroot-2013.05.tar.bz2
/home/c/core335x_bsp # cp buildroot-am335x.patch buildroot-2013.05
/home/c/core335x_bsp # cd buildroot-2013.05
/home/c/core335x_bsp/buildroot-2013.05 # patch -p1 < buildroot-am335x.patch
/home/c/core335x_bsp/buildroot-2013.05 # make menuconfig
然后就可以进行配置,QT在Package Selection for the target > Graphic libraries and applications (graphic/text) > Qt,AM335x的OpenGL支持设置选项在Qt下的Graphics drivers,必须先选中Linux Framebuffer,会出现AM335x SGX OpenGL Dirver,选中并在下方输入图形SDK的路径,例如/home/c/core335x_bsp/graphics_sdk_4_10_00_01,其他的选项按需选择即可,接下来就可以编译
/home/c/core335x_bsp/buildroot-2013.05 # make
编译过程会自动下载所需的各种软件包,如果没有选中Qt下的Approve free license,中间会提示选择授权类型,编译完成之后,将映像释放到根文件系统里
/home/c/core335x_bsp/buildroot-2013.05 # tar xf output/image/rootfs.tar -C /home/c/nfsroot
之后,打开/home/c/nfsroot/etc/init.d/powervr.ini,把这里面改成
[default]
WindowSystem=libpvrQWSWSEGL.so
将/home/c/nfsroot下的文件系统挂载到目标板上,启动以后,输入用户名root登陆,运行
# /etc/init.d/335x-demo
# mv /etc/init.d/rc.pvr /etc/init.d/S99powervr
至此,这个文件系统就支持QT使用SGX硬件加速的OpenGL了。
如果你在配置QT的时候选择了Compile and install demos and examples (with code),那么你可以找到/home/c/core335x_bsp/buildroot-2013.05/output/build/qt-4.8.4/examples/opengl/hellogl_es2/hellogl_es2这个文件,把它拷贝到根文件系统里,运行
# hellogl_es2 -qws -display powervr
可以检验是否可以正常工作。
需要说明一下,为了让QT支持OpenGL,AM335x图形处理器的厂家(不是TI,是Imagination Technologies)提供的插件程序让QT的动态链接库禁止鼠标光标显示。现象就是,虽然看不到鼠标,但是还可以用。这个目前还没有解决方法,因为貌似图形处理器是直接操作Frame Buffer的,有鼠标估计程序不好写,性能也会下降吧。如果你要用鼠标的话,需要自己写个显示鼠标光标的程序。
转载,仅供参考,祝你愉快,满意请采纳。