|
本帖最后由 401626436 于 2020-11-22 14:22 编辑
借楼提问:
我想知道的是怎么在openwrt编译qemu的user支持(可以在x86运行arm程序也就是可以直接运行甜糖了)
源码默认的Makefile只有虚拟机的支持 (百度N遍在 ubuntu 用openwrt dl 里的源码测试编译通过)
改Makefile改了N遍都是在编译到user时报错
源码来自
https://git.openwrt.org/feed/packages.git
commit eb1462676df25c89540c42cb059224e4904a13d4
错误信息:
- x86_64-openwrt-linux-musl-gcc -iquote /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user -iquote linux-user -iquote /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/tcg/i386 -isystem /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-headers -isystem /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-headers -iquote . -iquote /main/main/build_dir/target-x86_64_musl/qemu-5.0.0 -iquote /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/accel/tcg -iquote /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/include -iquote /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/disas/libvixl -I/main/main/staging_dir/target-x86_64_musl/usr/include/pixman-1 -I/main/main/staging_dir/target-x86_64_musl/usr/include -I/main/main/staging_dir/target-x86_64_musl/usr/include -pthread -I/main/main/staging_dir/target-x86_64_musl/usr/include/glib-2.0 -I/main/main/staging_dir/target-x86_64_musl/usr/lib/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -std=gnu99 -Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -I/main/main/staging_dir/target-x86_64_musl/usr/lib/libiconv-stub/include -I/main/main/staging_dir/target-x86_64_musl/usr/lib/libintl-stub/include -fmacro-prefix-map=/main/main/build_dir/target-x86_64_musl/qemu-5.0.0=qemu-5.0.0 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -Wexpansion-to-defined -Wendif-labels -Wno-shift-negative-value -Wno-missing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -isystem ../linux-headers -iquote .. -iquote /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/target/arm -DNEED_CPU_H -iquote /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/include -I/main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/arm -I/main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/host/x86_64 -I/main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user -Ilinux-user/arm -MMD -MP -MT linux-user/syscall.o -MF linux-user/syscall.d -O2 -O2 -Os -pipe -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -I/main/main/staging_dir/target-x86_64_musl/usr/lib/libiconv-stub/include -I/main/main/staging_dir/target-x86_64_musl/usr/lib/libintl-stub/include -fmacro-prefix-map=/main/main/build_dir/target-x86_64_musl/qemu-5.0.0=qemu-5.0.0 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -c -o linux-user/syscall.o /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c
- cc1: note: someone does not honour COPTS correctly, passed 2 times
- In file included from /main/main/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/include/linux/kernel.h:5,
- from /main/main/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/include/linux/netlink.h:5,
- from /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:111:
- /main/main/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/include/linux/sysinfo.h:8:8: error: redefinition of 'struct sysinfo'
- struct sysinfo {
- ^~~~~~~
- In file included from /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:51:
- /main/main/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/include/sys/sysinfo.h:10:8: note: originally defined here
- struct sysinfo {
- ^~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c: In function 'target_to_host_flock':
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6191:22: error: 'F_EXLCK' undeclared (first use in this function); did you mean 'F_RDLCK'?
- TRANSTBL_CONVERT(F_EXLCK); \
- ^~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6197:53: note: in definition of macro 'TRANSTBL_CONVERT'
- #define TRANSTBL_CONVERT(a) case TARGET_##a: return a
- ^
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6198:5: note: in expansion of macro 'FLOCK_TRANSTBL'
- FLOCK_TRANSTBL
- ^~~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6191:22: note: each undeclared identifier is reported only once for each function it appears in
- TRANSTBL_CONVERT(F_EXLCK); \
- ^~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6197:53: note: in definition of macro 'TRANSTBL_CONVERT'
- #define TRANSTBL_CONVERT(a) case TARGET_##a: return a
- ^
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6198:5: note: in expansion of macro 'FLOCK_TRANSTBL'
- FLOCK_TRANSTBL
- ^~~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6192:22: error: 'F_SHLCK' undeclared (first use in this function); did you mean 'F_RDLCK'?
- TRANSTBL_CONVERT(F_SHLCK); \
- ^~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6197:53: note: in definition of macro 'TRANSTBL_CONVERT'
- #define TRANSTBL_CONVERT(a) case TARGET_##a: return a
- ^
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6198:5: note: in expansion of macro 'FLOCK_TRANSTBL'
- FLOCK_TRANSTBL
- ^~~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c: In function 'host_to_target_flock':
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6191:22: error: 'F_EXLCK' undeclared (first use in this function); did you mean 'F_RDLCK'?
- TRANSTBL_CONVERT(F_EXLCK); \
- ^~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6205:34: note: in definition of macro 'TRANSTBL_CONVERT'
- #define TRANSTBL_CONVERT(a) case a: return TARGET_##a
- ^
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6206:5: note: in expansion of macro 'FLOCK_TRANSTBL'
- FLOCK_TRANSTBL
- ^~~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6192:22: error: 'F_SHLCK' undeclared (first use in this function); did you mean 'F_RDLCK'?
- TRANSTBL_CONVERT(F_SHLCK); \
- ^~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6205:34: note: in definition of macro 'TRANSTBL_CONVERT'
- #define TRANSTBL_CONVERT(a) case a: return TARGET_##a
- ^
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6206:5: note: in expansion of macro 'FLOCK_TRANSTBL'
- FLOCK_TRANSTBL
- ^~~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c: In function 'target_to_host_sigevent':
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6794:16: error: 'struct sigevent' has no member named '_sigev_un'; did you mean 'sigev_value'?
- host_sevp->_sigev_un._tid = tswap32(target_sevp->_sigev_un._tid);
- ^~~~~~~~~
- sigev_value
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c: In function 'host_to_target_stat64':
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6845:5: warning: "_POSIX_C_SOURCE" is not defined, evaluates to 0 [-Wundef]
- #if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
- ^~~~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6845:35: warning: "_XOPEN_SOURCE" is not defined, evaluates to 0 [-Wundef]
- #if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
- ^~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6880:5: warning: "_POSIX_C_SOURCE" is not defined, evaluates to 0 [-Wundef]
- #if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
- ^~~~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:6880:35: warning: "_XOPEN_SOURCE" is not defined, evaluates to 0 [-Wundef]
- #if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
- ^~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c: In function 'do_syscall1':
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:9502:6: warning: "_POSIX_C_SOURCE" is not defined, evaluates to 0 [-Wundef]
- #if (_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700) && \
- ^~~~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:9502:36: warning: "_XOPEN_SOURCE" is not defined, evaluates to 0 [-Wundef]
- #if (_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700) && \
- ^~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:9564:37: warning: passing argument 1 of 'sysinfo' from incompatible pointer type [-Wincompatible-pointer-types]
- ret = get_errno(sysinfo(&value));
- ^~~~~~
- In file included from /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/linux-user/syscall.c:51:
- /main/main/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/include/sys/sysinfo.h:26:14: note: expected 'struct sysinfo *' but argument is of type 'struct sysinfo *'
- int sysinfo (struct sysinfo *);
- ^~~~~~~~~~~~~~~~
- /main/main/build_dir/target-x86_64_musl/qemu-5.0.0/rules.mak:69: recipe for target 'linux-user/syscall.o' failed
- make[4]: *** [linux-user/syscall.o] Error 1
- make[4]: Leaving directory '/main/main/build_dir/target-x86_64_musl/qemu-5.0.0/arm-linux-user'
- Makefile:527: recipe for target 'arm-linux-user/all' failed
- make[3]: *** [arm-linux-user/all] Error 2
- make[3]: Leaving directory '/main/main/build_dir/target-x86_64_musl/qemu-5.0.0'
- Makefile:455: recipe for target '/main/main/build_dir/target-x86_64_musl/qemu-5.0.0/.built' failed
- make[2]: *** [/main/main/build_dir/target-x86_64_musl/qemu-5.0.0/.built] Error 2
- make[2]: Leaving directory '/main/main/feeds/packages/utils/qemu'
- time: package/feeds/packages/qemu/compile#519.16#52.38#583.14
- package/Makefile:112: recipe for target 'package/feeds/packages/qemu/compile' failed
- make[1]: *** [package/feeds/packages/qemu/compile] Error 2
- make[1]: Leaving directory '/main/main'
- /main/main/include/toplevel.mk:240: recipe for target 'package/feeds/packages/qemu/compile' failed
- make: *** [package/feeds/packages/qemu/compile] Error 2
复制代码
顺便回复贴主的问题:
可以自己编译
make kernel_menuconfig
Executable file formats
Kernel support for MISC binaries
或者假如你的内核是5.4.xxx
/target/linux/generic/config-5.4
添加 CONFIG_BINFMT_MISC=y
重新编译
懒就直接论坛里搜索也至少有3-4个固件(固件贴主说支持我没用过)
|
|