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

ELx
ARMv8a引入的Exception Level,數(shù)字越大,特權(quán)越高,類似ARMv7a的異常模式,EL0最低,運(yùn)行應(yīng)用程序。
圖中的AArch64 OS/AArch32 OS,指具體64/32bit操作系統(tǒng)kernel,通常是Linux kernel。OS運(yùn)行于更高EL等級(jí)的Hypervisor的管理之下,AArch64 OS可以支持32或者64bit應(yīng)用程序App,AArch32 OS則只能支持32bit應(yīng)用程序。上面的設(shè)計(jì),跟x86 Linux的設(shè)計(jì)非常相似,比如,64bit x86處理器也原生支持32bit和64bit兩種應(yīng)用程序,64bit Linux系統(tǒng),也能直接運(yùn)行32bit App,微軟64bit Windows系統(tǒng)也是一樣的,用戶從來(lái)不用關(guān)心EXE是之前32位Windows下的老應(yīng)用,還是新開發(fā)出來(lái)的64位應(yīng)用軟件,直接雙擊運(yùn)行即可。個(gè)人認(rèn)為,ARMv8a很大程度上參考借鑒了64bit x86處理器的設(shè)計(jì)思路,因?yàn)锳RMv8a是在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的各種庫(kù),還有適配好的64bit和32bit的工具鏈,在Yocto系統(tǒng)編譯完成之后,以core-image-qt為例進(jìn)行說(shuō)明:
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源碼,需要首先運(yùn)行一個(gè)工具鏈所在目錄的腳本:

即圖中的environment-開頭的腳本文件,對(duì)于32bit App開發(fā),運(yùn)行:
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è)置好:

另一個(gè)environment-開頭的腳本,是用來(lái)設(shè)置64位App開發(fā)環(huán)境的。
另一方面,如果客戶愿意往64bit應(yīng)用移植,也是可以的,因?yàn)?4bit模式下,可以使用更加強(qiáng)大的指令集,還有海量的尋址空間。但是面臨的問題,主要是需要重新編譯源代碼,F(xiàn)PU相關(guān)配置選項(xiàng)可能失效,ARMv7a處理器的FPU相關(guān)配置是可選的,ARMv8a處理器則標(biāo)配FPU,還有一點(diǎn),就是代碼里面指針的處理,32bit應(yīng)用程序中,可能使用了不可移植的數(shù)據(jù)類型如unsigned int保存指針,這是可以的,但是不加修改,編譯成64位應(yīng)用程序的話,會(huì)出現(xiàn)警告或錯(cuò)誤,地址數(shù)值截?cái)嗔?2位,肯定是不安全的。
-
處理器
+關(guān)注
關(guān)注
68文章
20097瀏覽量
244118 -
Linux
+關(guān)注
關(guān)注
88文章
11582瀏覽量
217220 -
MPU
+關(guān)注
關(guān)注
0文章
439瀏覽量
50866 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3340瀏覽量
59799 -
應(yīng)用軟件
+關(guān)注
關(guān)注
0文章
53瀏覽量
9364
發(fā)布評(píng)論請(qǐng)先 登錄
基于瑞薩電子RZ/G2L的FET-G2LD-C核心板和OK-G2LD-C開發(fā)板評(píng)測(cè)

基于瑞薩64位MPU RZ/G2L進(jìn)行32位應(yīng)用軟件開發(fā)
評(píng)論