本文主要介紹基于瑞薩64位MPU RZ/G2L進行32位應用軟件開發(fā)的介紹,用于解決客戶32位軟件移植相關(guān)問題,供客戶參考。
很多客戶在32bit開發(fā)平臺遷移過程中,會遇到Linux應用程序移植問題,老平臺應用程序是基于32bit ARMv7a處理器開發(fā)的,新平臺通常是基于64bit的ARMv8a的MPU平臺,比如RZ/G2L系列。有些客戶誤認為,切換到64bit Linux平臺,必須重新開發(fā)64bit應用程序,其實并不是必須的。
首先,在硬件層面:
64bit ARMv8a MPU是能兼容32bit ARMv7a應用程序的,也就是ARMv8a體系支持32bit(AArch32)和64bit(AArch64)兩套指令集,這兩套指令集或者說是工作模式,會根據(jù)具體的32/64bit應用程序自動切換,這是指令集層面的兼容,不是模擬或者翻譯,不會導致性能損失。這種設(shè)計,很大一部分原因,是為了保護客戶在32bit老平臺上面的投資。
其次,在軟件層面:
64bit MPU的Linux kernel運行在特權(quán)模式,應用程序運行在非特權(quán)的用戶空間。通常廠商僅僅移植64bit Linux kernel,如果移植32bit Linux kernel,很多底層64bit相關(guān)特性會不支持,特別是大尋址空間,而且只能支持32bit應用程序。64bit Linux kernel則能發(fā)揮MPU的全部性能,并能運行32bit和64bit應用程序(基于上述硬件層面的設(shè)計)。
ARM官方提供的ARMv8a相關(guān)設(shè)計框圖如下:
ELx
ARMv8a引入的Exception Level,數(shù)字越大,特權(quán)越高,類似ARMv7a的異常模式,EL0最低,運行應用程序。
圖中的AArch64 OS/AArch32 OS,指具體64/32bit操作系統(tǒng)kernel,通常是Linux kernel。OS運行于更高EL等級的Hypervisor的管理之下,AArch64 OS可以支持32或者64bit應用程序App,AArch32 OS則只能支持32bit應用程序。上面的設(shè)計,跟x86 Linux的設(shè)計非常相似,比如,64bit x86處理器也原生支持32bit和64bit兩種應用程序,64bit Linux系統(tǒng),也能直接運行32bit App,微軟64bit Windows系統(tǒng)也是一樣的,用戶從來不用關(guān)心EXE是之前32位Windows下的老應用,還是新開發(fā)出來的64位應用軟件,直接雙擊運行即可。個人認為,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為例進行說明:
1提取工具鏈安裝包
MACHINE=smarc-rzg2l bitbake core-image-qt -c populate_sdk
2安裝工具鏈到本機
sudo sh poky-glibc-x86_64-core-image-qt-aarch64-smarc-rzg2l-toolchain-3.1.26.sh
通常安裝到默認的/opt目錄下,安裝之后,如果需要使用工具鏈編譯32bit源碼,需要首先運行一個工具鏈所在目錄的腳本:
即圖中的environment-開頭的腳本文件,對于32bit App開發(fā),運行:
source /opt/poky/3.1.26/environment-setup-armv7vet2hf-neon-vfpv4-pokymllib32-linux-gnueabi
即可準備好32bit App開發(fā)環(huán)境,可以使用:echo $CC等命令查看,相關(guān)環(huán)境變量已經(jīng)設(shè)置好:
另一個environment-開頭的腳本,是用來設(shè)置64位App開發(fā)環(huán)境的。
另一方面,如果客戶愿意往64bit應用移植,也是可以的,因為64bit模式下,可以使用更加強大的指令集,還有海量的尋址空間。但是面臨的問題,主要是需要重新編譯源代碼,F(xiàn)PU相關(guān)配置選項可能失效,ARMv7a處理器的FPU相關(guān)配置是可選的,ARMv8a處理器則標配FPU,還有一點,就是代碼里面指針的處理,32bit應用程序中,可能使用了不可移植的數(shù)據(jù)類型如unsigned int保存指針,這是可以的,但是不加修改,編譯成64位應用程序的話,會出現(xiàn)警告或錯誤,地址數(shù)值截斷了32位,肯定是不安全的。
-
處理器
+關(guān)注
關(guān)注
68文章
19851瀏覽量
234119 -
Linux
+關(guān)注
關(guān)注
87文章
11496瀏覽量
213220 -
MPU
+關(guān)注
關(guān)注
0文章
410瀏覽量
49775 -
應用程序
+關(guān)注
關(guān)注
38文章
3328瀏覽量
58875 -
應用軟件
+關(guān)注
關(guān)注
0文章
53瀏覽量
9266
原文標題:64位MPU Linux環(huán)境下32位應用開發(fā)
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于瑞薩電子RZ/G2L的FET-G2LD-C核心板和OK-G2LD-C開發(fā)板評測

評論