Unable to run qemu in macOS
MrZLeo opened this issue · 9 comments
I use command cargo qemu --arch aarch64 --smp 4
to build the kernel and run it in the qemu, but it failed with error:
/bin/sh: /Users/mrzleo/zCore/ignored/target/aarch64/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc: cannot execute binary file
make[1]: *** [applets/applets.o] Error 126
make: *** [applets_dir] Error 2
thread 'main' panicked at 'Failed with code 2: "cd /Users/mrzleo/zCore/ignored/target/aarch64/busybox && make CROSS_COMPILE=/Users/mrzleo/zCore/ignored/target/aarch64/aarch64-linux-musl-cross/bin/aarch64-linux-musl-"', /Users/mrzleo/.cargo/git/checkouts/command-ext-58b697115b23f0c6/f25befb/src/lib.rs:99:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
I don't understand why we need aarch64-linux-musl-gcc
here. Do we run it in qemu user mode? I can not find detail document about this command. If I want to build the kernel and run it in qemu system mode, what should I do?
My environment is as followed:
$ uname -a
Darwin MrZLeos-MacBook-Pro.local 21.6.0 Darwin Kernel Version 21.6.0: Wed Aug 10 14:28:35 PDT 2022; root:xnu-8020.141.5~2/RELEASE_ARM64_T8101 arm64
$ qemu-system-aarch64 --version
QEMU emulator version 7.1.0
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
$ rustup default nightly
info: using existing install for 'nightly-aarch64-apple-darwin'
info: default toolchain set to 'nightly-aarch64-apple-darwin'
nightly-aarch64-apple-darwin unchanged - rustc 1.65.0-nightly (84f0c3f79 2022-09-03)
info: note that the toolchain 'nightly-2022-08-05-aarch64-apple-darwin' is currently in use (overridden by '/Users/mrzleo/zCore/rust-toolchain.toml')
$ rustup --version
rustup 1.25.1 (bb60b1e89 2022-07-12)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.64.0-nightly (f6f9d5e73 2022-08-04)`
$ rustc --version
rustc 1.64.0-nightly (f6f9d5e73 2022-08-04)
cargo qemu 就是用 qemu-system 的,musl-gcc 是为了编译 busybox,它必须得有 busybox。还有一些其他非必要的测例也需要 musl-gcc 编译。我们没有 mac,没试过。好像之前用 mac 的人都是直接开 linux 虚拟机的,应该虚拟机里能搞运行。
aarch64 的支持整个都是国防科大的同学提供的,我们理解不深。实际上测例也经常不过。如果你试出来什么可以告诉我们一声,微信上 rcore-os 群里找我们也行。
@YdrMaster 我使用其他架构的时候也是一样,应该是musl-gcc缺失。我不是很了解musl-gcc工具链,但是这里用的是linux-musl-gcc,似乎只能在Linux中运行,是否有对应的mac编译器呢?
@YdrMaster 我找到的是这样的工具链,不知道是否能满足在macOS下编译的需求?
@MrZLeo 也许可以,但我没法试……这一块的逻辑是它会层层递归地构造 rootfs,如果你能提供一个 rootfs 他就不会试图编译了。在根目录下新建 rootfs/$arch
目录就行,至少需要 busybox 和 musl-libc 的 ld:
> ~/repos/zCore$ tree rootfs
rootfs
└── riscv64
├── bin
│ ├── busybox
│ ├── cat -> busybox
│ ├── cp -> busybox
│ ├── echo -> busybox
│ ├── false -> busybox
│ ├── grep -> busybox
│ ├── gzip -> busybox
│ ├── kill -> busybox
│ ├── ln -> busybox
│ ├── ls -> busybox
│ ├── mkdir -> busybox
│ ├── mv -> busybox
│ ├── pidof -> busybox
│ ├── ping -> busybox
│ ├── ping6 -> busybox
│ ├── printenv -> busybox
│ ├── ps -> busybox
│ ├── pwd -> busybox
│ ├── rm -> busybox
│ ├── rmdir -> busybox
│ ├── sh -> busybox
│ ├── sleep -> busybox
│ ├── stat -> busybox
│ ├── tar -> busybox
│ ├── touch -> busybox
│ ├── true -> busybox
│ ├── uname -> busybox
│ ├── usleep -> busybox
│ └── watch -> busybox
└── lib
└── ld-musl-riscv64.so.1
3 directories, 30 files
@YdrMaster 我使用其他架构的时候也是一样,应该是musl-gcc缺失。我不是很了解musl-gcc工具链,但是这里用的是linux-musl-gcc,似乎只能在Linux中运行,是否有对应的mac编译器呢?
它说的是 cannot execute binary file
,因为苹果 m1/2 处理器是 arm64,预编译的 gcc 是给 x86 编译的所以没法运行。
@YdrMaster 我使用其他架构的时候也是一样,应该是musl-gcc缺失。我不是很了解musl-gcc工具链,但是这里用的是linux-musl-gcc,似乎只能在Linux中运行,是否有对应的mac编译器呢?
它说的是
cannot execute binary file
,因为苹果 m1/2 处理器是 arm64,预编译的 gcc 是给 x86 编译的所以没法运行。
但是这里换成aarch64也是不行的,因为这里是linux-musl-gcc,不能在Linux之外的OS上运行。我先尝试一下直接下载预编译的rootfs,后续如果成功用上面说的工具链编译的话,再通过这个issue说一声。
非常感谢!!!
@YdrMaster 我使用其他架构的时候也是一样,应该是musl-gcc缺失。我不是很了解musl-gcc工具链,但是这里用的是linux-musl-gcc,似乎只能在Linux中运行,是否有对应的mac编译器呢?
它说的是
cannot execute binary file
,因为苹果 m1/2 处理器是 arm64,预编译的 gcc 是给 x86 编译的所以没法运行。但是这里换成aarch64也是不行的,因为这里是linux-musl-gcc,不能在Linux之外的OS上运行。我先尝试一下直接下载预编译的rootfs,后续如果成功用上面说的工具链编译的话,再通过这个issue说一声。
非常感谢!!!
我理解这个 aarch64 是从 x86 交叉编译到 aarch64,不是自己能在 aarch64 运行。应该大部分 linux 程序都可以直接在 mac 上运行吧,因为都是类 unix……
anyway,祝你成功
可以找个 x86 的电脑或者云服务器什么的编出来拷到你电脑上用