❶ 如何在ARM linux上使用FDT和initrd
这文章算是最近工作的备忘。
FDT是ARM
Linux最新的设备驱动程序信息表,使用FDT的内核,就不用像过去的内核那样,一个板子加一个mach的C文件,所有的设备信息可以记录在一个树状信息文件里面。
目前这方面资料比较少,我以AM335x处理器为例概括一下FDT的使用:
FDT仅仅是一个信息的目录和参数表,要使用某个功能内核中还必须有相应的驱动程序代码
FDT的源文件位置在:arch/arm/boot/dts,例如,TI的Beagle bone black,源文件是arch/arm/boot/dts/am335x_boneblack.dts
FDT在make ARCH=arm的时候就会自动生成,也可用make ARCH=arm
dtbs来生成,例如TI的Beagle bone black生成的文件是arch/arm/boot/dts/am335x_boneblack.dtb,这是一个二进制文件
要想新增你自定义的FDT,请修改arch/arm/boot/dts/Makefile,并在相应的Kconfig中增加config选项,例如,TI的Beagle
bone black,Kconfig的位置在arch/arm/mach-omap2/Kconfig
FDT的dtb文件由u-boot传递给内核,u-boot必须把这个文件拷贝到内核解压地址之后的某个位置,确保内核解压的时候不会覆盖,然后使用“bootm
[内核地址] - [dtb地址]”来启动内核
如果dtb文件不正确,对于3.10以上的内核,可能什么显示都没有,3.8内核,可能就显示到Uncompressing kernel......done
FDT的编写规则说明在Documentation/devicetree/bindings,不同的设备有相应的txt文件说明,其中的“compatible”可以作为关键字搜索驱动程序的源文件,例如,AM335x的GPIO,用“ti,omap4-gpio”为关键字,可以找到其代码位于drivers/gpio/gpio-omap.c
FDT可以包含子文件,比如am335x_boneblack.dts就包含了am33xx.dtsi,am335x-bone-common.dtsi
以一个例子来说明编写规则,我的板子上,I2C0上挂了一个音频CODEC,其地址是0x18,型号是TLV320AIC3104IRHBT。
先找到i2c0节点的位置,这在arch/arm/boot/dts/am33xx.dtsi中:
i2c0: i2c@44e0b000
{
compatible =
"ti,omap4-i2c";
#address-cells =
<1>;
#size-cells =
<0>;
ti,hwmods =
"i2c1";
reg = <0x44e0b000
0x1000>;
interrupts =
<70>;
status =
"disabled";
};
要在这个节点上挂东西,可以直接在am33xx.dtsi中挂,可以写成这样:
i2c0: i2c@44e0b000
{
compatible =
"ti,omap4-i2c";
#address-cells =
<1>;
#size-cells =
<0>;
ti,hwmods =
"i2c1";
reg = <0x44e0b000
0x1000>;
interrupts =
<70>;
status =
"okay";
tlv320aic3x: tlv320aic3x@18 {
compatible = "ti,tlv320aic3x";
reg = <0x18>;
status = "okay";
AVDD-supply = <&ldo4_reg>;
IOVDD-supply = <&ldo4_reg>;
DRVDD-supply = <&ldo4_reg>;
DVDD-supply = <&ldo4_reg>;
};
};
其中compatible字串“ti,tlv320aic3x”是在Documentation/devicetree/bindings里面全文搜索“tlv320aic”获得的,“tlv320aic3x:
tlv320aic3x@18”遵循的是“标识符:名称@地址”的格式,前面的“i2c0:
i2c@44e0b000”也是这个格式。这里的标识符可以在包含这个文件的文件或这个文件的其他位置引用,因此,可以使用arch/arm/boot/dts/am335x-boneblack.dts包含arch/arm/boot/dts/am33xx.dtsi,然后在am335x-boneblack.dts里写:
&i2c0 {
status = "okay";
tlv320aic3x: tlv320aic3x@18 {
compatible = "ti,tlv320aic3x";
reg = <0x18>;
status = "okay";
AVDD-supply = <&ldo4_reg>;
IOVDD-supply = <&ldo4_reg>;
DRVDD-supply = <&ldo4_reg>;
DVDD-supply = <&ldo4_reg>;
};
};
&i2c0表示引用了i2c0这个标识符,然后把括号里的内容挂载到标识符下,如果属性的名字相同,例如status出现两次,前面是“disabled”后面是“okay”,以后面的为准,引用标识符的次数不受限制。
也许一开始会觉得FDT的工作过程很神秘,但你只要用compatible的字串去全文搜索一下C文件,然后仔细阅读一下,就会发现很简单,没过几分钟你就可以自定义FDT节点的属性了。反倒是这些操作过程我没找到什么文档说,比较头痛,所以我把这些写出来,希望能给大家帮助。
下面说说initrd,initrd的用处是给内核一个初始的基本文件系统,用来加载内核模块之类的东西。很多人觉得嵌入式系统不需要initrd,也可以把initrd作为最终的根文件系统。我用initrd是用来校验真正的根文件系统,因为在嵌入式设备上,无法预测用户到底什么时候关机,可能会造成文件系统问题。
initrd可以用buildroot,像制作正常文件系统一样做,最后把根下的linuxrc换成一个例如下面这样的文件:
#!/bin/sh
/bin/echo Now Check SD Card
/sbin/fsck.ext4 /dev/mmcblk0p5
虽然Documentation/initrd.txt里面说,内核会执行initrd里面的/sbin/init,但在我用的linux-3.8.13上,init/do_mounts_initrd.c里面,执行的是/linuxrc,不知道是不是文档没有更新过来。具体的调用顺序是,kernel_init(init/main.c)
> kernel_init_freeable(init/main.c)
> prepare_namespace(init/do_mounts.c)
> initrd_load(init/do_mounts_initrd.c) > handle_initrd
(init/do_mounts_initrd.c)。
在使用initrd的时候有几点需要注意的:
不建议在initrd上挂载别的东西,会引起未知的问题,貌似看到个文章说这个,找不到了
因为上面的这条,而且在initrd的时候,内核还没有挂载devtmpfs,因此建议使用静态设备节点,以AM335x为例(内核参数console=/dev/ttyO0,115200n8),必须的节点有:
/dev/null
/dev/console
/dev/ttyO0
这些节点可以用fakeroot之后mknod在buildroot的output/target/dev里创建,除了/dev/console,buildroot会自己创建,其他也可以写到buildroot的system/device_table.txt里面让buildroot自动创建:
#
/dev/null
c 666 0 0
1 3
-
-
-
/dev/ttyO0 c 600
0 0 250
0
-
-
-
如果你用的是Atmel的处理器,上面的ttyO0可能是ttyS0,如果是三星的,可能是ttySAC0,而且major和minor也会不一样,请自行解决。如果你像我一样要检验SD卡,那就还必须加上SD卡的分区对应的节点。
/linuxrc可以是个程序也可以是个脚本,脚本的话,命令写绝对路径,而且记得把/linuxrc的mode改为755
使用initrd只需要用u-boot把buildroot制作的文件系统映像拷贝到内存里,然后传递initrd=[地址],[容量]这样的参数给内核,例如initrd=0x81300000,8M,最终的root参数可以不变,例如root=/dev/mmcblk0p5,这表示最终的root是SD卡上扩展分区中的第一个逻辑分区。给两个内核参数的例子:
console=ttyO0,115200n8 root=/dev/mmcblk0p5 initrd=0x81300000,8M vram=16M
consoleblank=0
console=ttyO0,115200n8 initrd=0x81300000,8M root=/dev/nfs rw
nfsroot=192.168.5.226:/home/c/nfsroot
ip=192.168.5.222:192.168.5.226:192.168.5.1:255.255.255.0:core335x:eth0:off
vram=16M consoleblank=0
第一个不解释了,第二个表示使用initrd,同时使用nfsroot。
最后啰嗦一句,使用initrd需要在内核配置里打开支持,这个网上的资料太多了,我就不说在哪里了。
❷ 如何将U-boot烧录到Nand中如何用tftp,nfs加载内核和文件系统
硬件平台是 XAM335x的SKEVM板子。
开发主机上安装的是ubuntu14.04。
SDK是 PROCESSOR-SDK-LINUX-AM335X 02_00_00_00。
1,运行了SDK下面的setup.sh,创建了/tftpboot,以及targetNFS目录了。
2,在sdk的更目录make都是成功的。
然后我也可以用做卡的方式把我自己编译的kernel, uboot以及系统带的 targetNFS目录下的文件系统,写到SD卡中。而且能够通过SD卡正常启动。
现在我想脱离SD卡启动方式。
1,所以要先把U-boot烧录到Nand中,(这里我不知道怎么下载。请告诉我下载方法。)
2,然后开机进入U-boot命令,设置好开发板IP以及serverip等配置。
3,通过tftp命令 (tftp c0008000 zImage-am335x-evm.bin)命令,串口段打印一大串###,也没报错,好像是下载内核成功了。(这里请问下,tftp命令里的地址 0xc0008000是否正确?应该用什么地址?)
4,NFS下载文件系统,(这一步我也不知道怎么做,网上有命令 setenv bootargs root=/dev/nfs rw nfsroot=$serverip:$rootpath ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off console=ttyS0,115200等等命令。
❸ 如何在WINDOWS下开发嵌入式LINUX程序AM335X工控模块
嵌入式Linux开发流程
在一个嵌入式系统中使用Linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过如下的过程:
1.建立开发环境
操作系统一般使用RedHat-Linux,版本从7到9都可以,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(例如arm-Linux-gcc、arm-μclibc-gcc),或者安装产品厂家提供的交叉编译器。
2.配置开发主机
配置MINICOM,一般的参数为波特率为115 200bps,数据位为8位,停止位为1,无奇偶校验,软件硬件流控设为无。在Windows下的超级终端的配置也是这样的。MINICOM软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络,主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
❹ 如何在AM335X挂载Ramdisk
Linux的2.4内核已经内建支持RamDisk。RamDisk在很多情况下是很有用的,包括:
使用加密文件中的未加密数据;
某些类型的网页内容服务;
挂载loopback文件系统(例如,从软盘或CD运行)
我为什么要写这个文档?因为我需要设置一个16M的RamDisk来查看、创建加密文件。我不想让未加密的文件写入我的工作平台的任何物理介质。我还发现一个有趣的地方,可以轻易的在Ram中创建一个比我的第一个物理硬盘(20M)还大的虚拟硬盘,当时,我根本无法想象怎样填满这个虚拟硬盘。
这个文档将会带你一步步地经历创建和使用RamDisk的过程。
平台
我使用Red Hat 9进行测试,但是这应该适用于其他的2.4内核的Linux系统,我还假设你的Linux系统已经将RamDisk支持编译到了内核。我的计算机使用Pentium 4处理器,256M内存,确切的内核版本是:2.4.20-20.9
1. 查看你的系统已经创建了什么
RedHat默认创建16个RamDisk,虽然它们没有激活或使用任何Ram。系统列出的设备是ram0~ram19,但是只有ram0~ram15是默认可用的。使用下面的命令可用检出这些块设备:
你可用看到,RamDisk默认只有4MB。我想要一个16MB的RamDisk,所以, 下一步要配置Linux,使得在启动过程中使用一个更大的RamDisk。
2. 增加RamDisk的大小
RamDisk的大小是被一个命令行选项控制的,这个选项会在系统启动时传给内核。由于RedHat9的默认bootloader是GRUB,我将用新的选项修改/etc/grub.conf,RamDisk大小的内核选项是:ramdisk_size=xxxxx ,xxxxx是指大小为1024-Byte的块的个数。下面是我要添加到/etc/grub.conf的内容,它将RamDisk配置为16MB:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda5
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-20.9)
root (hd0,0)
kernel /vmlinuz-2.4.20-20.9 ro root=LABEL=/ hdc=ide-scsi ramdisk_size=16000
initrd /initrd-2.4.20-20.9.img
将文件保存后,你需要重启系统。重启后,通过查看dmesg的输出来确认修改已经生效:
[root]# dmesg | grep RAMDISK
RAMDISK driver initialized: 16 RAM disks of 16000K size 1024 blocksize
RAMDISK: Compressed image found at block 0
3. 格式化RamDisk
无需将RamDisk格式化为日志文件系统,我们将使用EXT2文件系统。我只想使用一个RamDisk,所以我只格式化ram0。
4. 新建一个挂载点并挂载RamDisk
你已经格式化了RamDisk,现在要为它新建一个挂载点。然后就可以挂载你的RamDisk并使用它。我们将会使用/mnt/rd文件夹。
1.[root]# mkdir /mnt/rd
2.[root]# mount /dev/ram0 /mnt/rd
检测新挂载的RamDisk
1.[root]# mount | grep ram0
2./dev/ram0 on /mnt/rd type ext2 (rw)
3.[root]# df -h | grep ram0
4./dev/ram0 16M 13K 16M 1% /mnt/rd
你可以用tune2fs命令查看新RamDisk的详细信息
在我的系统中,我需要'var'用户能够读写RamDisk,所以必须修改/mnt/rd文件夹的所有者和权限。
1.[root]# chown van:root /mnt/rd
2.[root]# chmod 0770 /mnt/rd
3.[root]# ls -ald /mnt/rd
4.drwxrwx--- 2 van root 4096 Dec 8 11:09 /mnt/rd
RamDisk挂载点的所有者和权限要根据你的特定情况进行修改。
5. 使用RamDisk
RamDisk已经创建成功,现在,你可以像在物理硬盘分区那样,在RamDisk上复制、移动、删除、编辑或列出文件。这是一个查看加密的GPG或OpenSSL文件的好地方,也是一个创建加密文件的好地方。你的主机关闭后,所有在RamDisk上创建的文件都会消失。
用下面的命令可以轻易的卸载RamDisk:
1.[root]# umount -v /mnt/rd
2./dev/ram0 umounted
Note:如果你卸载了RamDisk,你的数据依然会保存在那里。一旦内存被分配给了RamDisk,它就会被标记,之后内核就不会试图重用这块内存。因此,使用了RamDisk后,就不能回收那块内存。正因如此,你要考虑清楚,不要给RamDisk分配太多的内存。在我的系统里,我分配了小于10%的物理内存。你要根据自己的需要确定RamDisk的大小。当然,也可以重启后释放空间。
自动创建RamDisk
如果你需要每次系统启动后创建和挂载RamDisk,可以通过在/etc/rc.local启动脚本里添加命令来自动执行这个进程。
下面是我添加的命令:
# Formats, mounts, and sets permissions on my 16MB ramdisk
/sbin/mke2fs -q -m 0 /dev/ram0
/bin/mount /dev/ram0 /mnt/rd
/bin/chown van:root /mnt/rd
/bin/chmod 0750 /mnt/rd
转载
❺ 嵌入式选择开发板哪个好,有推荐吗
嵌入式是现在发展最快的IT技术之一了,很多人都选择了嵌入式这一行业,对于嵌入式来说,他挣得多,前景也很不错,学习嵌入式,开发板是最离不开的了,很多初入嵌入式行业的人对于嵌入式开发板,不知道,应该怎么选。
嵌入式开发板的选择也不用过于纠结,对于开发板来说,你应该首先要了解嵌入式linux开发板,嵌入式开发板(Embedded development board)就是半导体行业分工合作的载体之一,它为开发产品的厂商提供基本的底层硬件、系统和驱动等资源,使得用户不需要再投入人力和时间来完成这些底层的工作。
对于嵌入式linux开发板来说,就和软件外包是很类似的,就像嵌入式产品的硬件、引导代码、驱动程序、文件系统、协议层、基本应用软件这些方面,都是电子产品的公共和通用部分,并不是产品能够形成差异化的关键技术,在这个讲求分工合作的时代,如果是这部分的工作量比较大,或者是厂商没有相关的开发人员的时候,就能够选择由第三方完成这些软件开发的工作,加快产品研发的进程,实现产品的迅速上市,抢占市场先机。
那么了解了嵌入式linux开发板后,那就是如何选择的问题了,选择linux开发板其实简单的说就是有5个方法,根据这些方式选择,那再好不过了。
第一,就是要看形式了,看看现在什么用的最多了,很多地方都在用,如果我们选择现在都不用的,那不就白学了,所以把握趋势很重要。
第二,选择开发板 要注意硬件资源(包括:CPU、ROM、RAM、各种接口)其中NanD Flash、Nor Flash和SDRAM的大小一定要满足自已开发的要求。我们要做到花最少的钱学习最多的东西,这才是我们要实现的目标。或者我们看一下可扩展的接口是否充足。
第三,软件资源对一个初学者来说也是很重要的,因为不同的开发板提供的软件资源差别很大。一般必须包括:嵌入式开发操作系统以及相应的驱动(最好有源代码)、开发工具、调试工具、学习用源代码、底板原理图、有相应的技术支持等等。现在的开发板一般的都可以提供丰富的代码,资料从网上一搜也是一大堆,原理图什么的也都提供。
第四,我们为什么会用到嵌入式linux开发板,不就是技术支持,初学者在学习嵌入式的时候,可能 一个简单的烧写系统的过程可能都要弄好几天(有过这个经历的人一定有同感),所以更别说做开发了。其实初学者遇到 的问题在有一些基础的人看来可能是非常容易的一件事情,因为不太清楚其中的原理,所以不知道错在什么地方了,所以要注意这个点。
第五,就是价格问题了,现在大部分使用开发板的用户是学生,学生没有多少钱的,买一块开发板好几百,半个月的生活费呢,不过这个投入我认为是值得的,这一次的投入可能会改变我们以后的一生的职业,我们学到的是以后工作中用到的实实在在的技术,现在做技术的很值钱的,我们可以上网上搜一下,现在的嵌入式工程师的薪水怎么样,就是让人羡慕嫉妒恨的。所以我们不应该只看眼前的利益,把眼光放长远一些。
说了这么多都是如何来选择嵌入式linux开发板,下面就给你们推荐几个,对于一些初学者来说,想学嵌入式linux的,如果手头宽裕,cortex-A8,cortex-A9的想买什么自己去挑,文档资料源码齐全就行,如果不宽裕的,买个mini2440开发板就行了,买ARM9的不用太纠结,资料多就行了,还有就是讯为的4412板子也是不错的,当然不止这些,还有TI AM335X,NXP IMX6Q和Samsung 4412。这些都是很适合初学的人来用的。
看了这么多,对linux嵌入式开发板有很大了解了吧,抓紧时间去选吧。
❻ 如何在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的,有鼠标估计程序不好写,性能也会下降吧。如果你要用鼠标的话,需要自己写个显示鼠标光标的程序。
转载,仅供参考,祝你愉快,满意请采纳。