[英]How can I compile 32 bit ARM in a 64 bit RaspberryPi?
我正在用 ARM 32 做一些練習,但在 64 位 RaspberryPi 中。
這是代碼:
.global main
main:
mov r0,#0
mov r1,#5
push {lr,ip}
bl factorial
pop {lr,ip}
bx lr
factorial:
cmp r1,#1
moveq pc,lr
sub r1,r1,#1
mul r0,r1,r0
b factorial
如果我嘗試編譯 factorial.s,我會收到一堆錯誤:
cc factorial.s -o factorial
factorial.s: Assembler messages:
factorial.s:4: Error: operand 1 must be an integer register -- `mov r0,#0'
factorial.s:5: Error: operand 1 must be an integer register -- `mov r1,#5'
factorial.s:6: Error: unknown mnemonic `push' -- `push {lr,ip}'
factorial.s:8: Error: unknown mnemonic `pop' -- `pop {lr,ip}'
factorial.s:9: Error: unknown mnemonic `bx' -- `bx lr'
factorial.s:12: Error: operand 1 must be an integer or stack pointer register -- `cmp r1,#1'
factorial.s:13: Error: unknown mnemonic `moveq' -- `moveq pc,lr'
factorial.s:14: Error: operand 1 must be an integer or stack pointer register -- `sub r1,r1,#1'
factorial.s:15: Error: operand 1 must be a SIMD vector register -- `mul r0,r1,r0'
make: *** [<builtin>: factorial] Error 1
我認為這是因為我正在 64 位 Raspberry 中編譯 ARM32。
如何在 64 位 RaspberryPi 中編譯 ARM32?
一個簡單的解決方案是在 RaspberryPI 中使用 32 位版本的 Linux。
話雖如此,您需要在 64 位系統上安裝諸如arm-linux-gnueabihf
類的工具鏈。 如果您的 Linux 系統是基於 Debian 的,您可以通過執行以下命令列出可用的軟件包:
sudo apt-cache search gnueabihf
另一種方法是從頭開始構建 binutils:
wget https://mirror.csclub.uwaterloo.ca/gnu/binutils/binutils-2.35.tar.xz
tar Jxf binutils-2.35.tar.xz
mkdir binutils
cd binutils
../binutils-2.35/configure --target=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- --prefix=/usr/local
make all
sudo make install
/usr/local/bin/arm-linux-gnueabihf-as -o factorial.o factorial.s
factorial.s: Assembler messages:
factorial.s:6: Warning: register range not in ascending order
factorial.s:8: Warning: register range not in ascending order
將push {lr,ip}
替換為push {ip, lr}
並將pop {lr, ip}
替換為pop {ip, lr}
:
/usr/local/bin/arm-linux-gnueabihf-as -o factorial.o factorial.s
/usr/local/bin/arm-linux-gnueabihf-objdump -d factorial.o
factorial.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <main>:
0: e3a00000 mov r0, #0
4: e3a01005 mov r1, #5
8: e92d5000 push {ip, lr}
c: eb000001 bl 18 <factorial>
10: e8bd5000 pop {ip, lr}
14: e12fff1e bx lr
00000018 <factorial>:
18: e3510001 cmp r1, #1
1c: 01a0f00e moveq pc, lr
20: e2411001 sub r1, r1, #1
24: e0000091 mul r0, r1, r0
28: eafffffa b 18 <factorial>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.