本文主要介紹基于瑞薩64位MPU RZ/G2L進(jìn)行32位應(yīng)用軟件開發(fā)的介紹,用于解決客戶32位軟件移植相關(guān)問題,供客戶參考。
很多客戶在32bit開發(fā)平臺遷移過程中,會遇到Linux應(yīng)用程序移植問題,老平臺應(yīng)用程序是基于32bit ARMv7a處理器開發(fā)的,新平臺通常是基于64bit的ARMv8a的MPU平臺,比如RZ/G2L系列。有些客戶誤認(rèn)為,切換到64bit Linux平臺,必須重新開發(fā)64bit應(yīng)用程序,其實并不是必須的。
首先,在硬件層面:
64bit ARMv8a MPU是能兼容32bit ARMv7a應(yīng)用程序的,也就是ARMv8a體系支持32bit(AArch32)和64bit(AArch64)兩套指令集,這兩套指令集或者說是工作模式,會根據(jù)具體的32/64bit應(yīng)用程序自動切換,這是指令集層面的兼容,不是模擬或者翻譯,不會導(dǎo)致性能損失。這種設(shè)計,很大一部分原因,是為了保護(hù)客戶在32bit老平臺上面的投資。
其次,在軟件層面:
64bit MPU的Linux kernel運行在特權(quán)模式,應(yīng)用程序運行在非特權(quán)的用戶空間。通常廠商僅僅移植64bit Linux kernel,如果移植32bit Linux kernel,很多底層64bit相關(guān)特性會不支持,特別是大尋址空間,而且只能支持32bit應(yīng)用程序。64bit Linux kernel則能發(fā)揮MPU的全部性能,并能運行32bit和64bit應(yīng)用程序(基于上述硬件層面的設(shè)計)。
ARM官方提供的ARMv8a相關(guān)設(shè)計框圖如下:

ELx
ARMv8a引入的Exception Level,數(shù)字越大,特權(quán)越高,類似ARMv7a的異常模式,EL0最低,運行應(yīng)用程序。
圖中的AArch64 OS/AArch32 OS,指具體64/32bit操作系統(tǒng)kernel,通常是Linux kernel。OS運行于更高EL等級的Hypervisor的管理之下,AArch64 OS可以支持32或者64bit應(yīng)用程序App,AArch32 OS則只能支持32bit應(yīng)用程序。上面的設(shè)計,跟x86 Linux的設(shè)計非常相似,比如,64bit x86處理器也原生支持32bit和64bit兩種應(yīng)用程序,64bit Linux系統(tǒng),也能直接運行32bit App,微軟64bit Windows系統(tǒng)也是一樣的,用戶從來不用關(guān)心EXE是之前32位Windows下的老應(yīng)用,還是新開發(fā)出來的64位應(yīng)用軟件,直接雙擊運行即可。個人認(rèn)為,ARMv8a很大程度上參考借鑒了64bit x86處理器的設(shè)計思路,因為ARMv8a是在2012年左右發(fā)布的,而64bit x86處理器在2003年左右就上市了。
下面介紹一下64bit RZ/G2L相關(guān)內(nèi)容。RZ/G2L官方發(fā)布的Yocto系統(tǒng),里面已經(jīng)提供了64bit Linux kernel,并且集成了64bit和32bit的各種庫,還有適配好的64bit和32bit的工具鏈,在Yocto系統(tǒng)編譯完成之后,以core-image-qt為例進(jìn)行說明:
1提取工具鏈安裝包
MACHINE=smarc-rzg2l bitbake core-image-qt -c populate_sdk
2安裝工具鏈到本機(jī)
sudo sh poky-glibc-x86_64-core-image-qt-aarch64-smarc-rzg2l-toolchain-3.1.26.sh
通常安裝到默認(rèn)的/opt目錄下,安裝之后,如果需要使用工具鏈編譯32bit源碼,需要首先運行一個工具鏈所在目錄的腳本:

即圖中的environment-開頭的腳本文件,對于32bit App開發(fā),運行:
source /opt/poky/3.1.26/environment-setup-armv7vet2hf-neon-vfpv4-pokymllib32-linux-gnueabi
即可準(zhǔn)備好32bit App開發(fā)環(huán)境,可以使用:echo $CC等命令查看,相關(guān)環(huán)境變量已經(jīng)設(shè)置好:

另一個environment-開頭的腳本,是用來設(shè)置64位App開發(fā)環(huán)境的。
另一方面,如果客戶愿意往64bit應(yīng)用移植,也是可以的,因為64bit模式下,可以使用更加強(qiáng)大的指令集,還有海量的尋址空間。但是面臨的問題,主要是需要重新編譯源代碼,F(xiàn)PU相關(guān)配置選項可能失效,ARMv7a處理器的FPU相關(guān)配置是可選的,ARMv8a處理器則標(biāo)配FPU,還有一點,就是代碼里面指針的處理,32bit應(yīng)用程序中,可能使用了不可移植的數(shù)據(jù)類型如unsigned int保存指針,這是可以的,但是不加修改,編譯成64位應(yīng)用程序的話,會出現(xiàn)警告或錯誤,地址數(shù)值截斷了32位,肯定是不安全的。
-
處理器
+關(guān)注
關(guān)注
68文章
20321瀏覽量
254463 -
Linux
+關(guān)注
關(guān)注
88文章
11803瀏覽量
219455 -
MPU
+關(guān)注
關(guān)注
0文章
461瀏覽量
51536 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3346瀏覽量
60398 -
應(yīng)用軟件
+關(guān)注
關(guān)注
0文章
53瀏覽量
9425
發(fā)布評論請先 登錄
基于瑞薩64位MPU RZ/G2L進(jìn)行32位應(yīng)用軟件開發(fā)
評論