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

評論