❶ 如何在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的,有滑鼠估計程序不好寫,性能也會下降吧。如果你要用滑鼠的話,需要自己寫個顯示滑鼠游標的程序。
轉載,僅供參考,祝你愉快,滿意請採納。