Sau*_*ahu 5 gentoo arm64 raspberry-pi3 armv8
我有一个 Raspberry Pi 3 Model B,我从 32 位 Raspbian 切换到 64 位 Gentoo Linux,因为我想测试一些 64 位应用程序。现在,我想测试一个以大端顺序访问数据字节的应用程序。我知道我可以通过交换字中的字节来手动完成此操作。但我的主要问题是如何在 Raspberry Pi 上将字节顺序永久更改为大端,并且可能会在所有测试完成后再次切换回小端。任何线索将不胜感激。
自从第一次看到你的问题以来,我已经阅读了很多内容,我的答案是你无法在小端 Linux 内核/发行版上执行大端 Linux 应用程序。
我什至尝试过基于Armbian的 Orangepi-PC2 aarch64 系统,该系统只是拒绝加载使用 ARM 最新的aarch64 大端工具链交叉编译的示例程序。
现在,如果您确实不想转换数据,并且性能不是问题 - 这可能不是因为您想在 Raspberry-pi 而不是 PC 上进行处理 - 我建议您:
在 Ubuntu 18.04 系统上,您将执行以下命令:
sudo apt-get install gcc-8-powerpc64-linux-gnu qemu
Run Code Online (Sandbox Code Playgroud)
这是一个小例子:
创建一个包含 64 位数字的二进制文件0x1122334455667788
:
printf "\x11\x22\x33\x44\x55\x66\x77\x88"> example.dat
hexdump -C example.dat
00000000 11 22 33 44 55 66 77 88 |."3DUfw.|
00000008
Run Code Online (Sandbox Code Playgroud)
创建这个最小的、仅演示的程序:
// example.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
// demo code only - don't do this in real life...
unsigned int value = 0;
FILE* fp = fopen("example.dat", "rb");
fread(&value, sizeof(value), 1, fp);
printf("%d\n", value);
}
Run Code Online (Sandbox Code Playgroud)
编译它:
powerpc64-linux-gnu-gcc-8 -static -o example example.c
Run Code Online (Sandbox Code Playgroud)
执行它:
qemu-ppc64 ./example
0x1122334455667788
Run Code Online (Sandbox Code Playgroud)
为 x86_64 编译的相同程序将显示0x8877665544332211
,这很好:
gcc -o example example.c
./example
0x8877665544332211
Run Code Online (Sandbox Code Playgroud)
qemu-ppc64
正在模拟 ppc64,但系统调用由 x86_64 linux 内核执行。我希望这有助于解决您原来的问题。
归档时间: |
|
查看次数: |
3505 次 |
最近记录: |