xmake
xmake copied to clipboard
Linux 内核模块编译错误 #define asm_inline asm __inline
Xmake 版本
xmake v2.7.1+202209191332
操作系统版本和架构
Linux wl-kernel 6.0.0-rc5 #1 SMP PREEMPT_DYNAMIC Sat Sep 17 14:58:17 CST 2022 x86_64 x86_64 x86_64 GNU/Linux
描述问题
使用copy_to_user函数后编译失败
#define asm_inline asm __inline
是不是缺少了编译选项导致宏错误
make编译没问题
期待的结果
编译通过
工程配置
xmake.lua
target("hello")
add_rules("platform.linux.driver")
add_files("src/*.c")
-- set_values("linux.driver.linux-headers", "/usr/src/linux-headers-6.0.0-rc5")
set_values("linux.driver.linux-headers", "/usr/src/linux-headers-5.15.0-47-generic")
main.c
#include <linux/module.h> /* Needed by all modules */
#include <linux/init.h> /* Needed for the macros */
#include <linux/fs.h>
static int __init module_load(void) {
printk(KERN_DEBUG "Hello.\n");
copy_to_user(NULL, NULL, 0);
return 0;
}
附加信息和错误日志
xmake -vD
luna@wl-kernel:~/master/project/te$ xmake -vD
[ 25%]: cache compiling.release src/main.c
/usr/bin/gcc -c -DKBUILD_MODNAME=\"hello\" -isystem /usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include -I/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/generated -I/usr/src/linux-headers-5.15.0-47-generic/include -I/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/uapi -I/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/generated/uapi -I/usr/src/linux-headers-5.15.0-47-generic/include/uapi -I/usr/src/linux-headers-5.15.0-47-generic/include/generated/uapi -include /usr/src/linux-headers-5.15.0-47-generic/include/linux/compiler-version.h -include /usr/src/linux-headers-5.15.0-47-generic/include/linux/kconfig.h -I/usr/src/linux-headers-5.15.0-47-generic/ubuntu/include -include /usr/src/linux-headers-5.15.0-47-generic/include/linux/compiler_types.h -D__KERNEL__ -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fcf-protection=none -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -DCONFIG_X86_X32_ABI -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mfunction-return=thunk-extern -fno-jump-tables -mharden-sls=all -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -fno-allow-store-data-races -Wframe-larger-than=1024 -fstack-protector-strong -Wimplicit-fallthrough=5 -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-stack-clash-protection -mrecord-mcount -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-stringop-truncation -Wno-zero-length-bounds -Wno-array-bounds -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -fsanitize=bounds -fsanitize=shift -fsanitize=bool -fsanitize=enum -DMODULE -DKBUILD_BASENAME=\"main\" -o build/.objs/hello/linux/x86_64/release/src/main.c.o src/main.c
error: @programdir/modules/private/async/runjobs.lua:256: @programdir/modules/private/action/build/object.lua:91: @programdir/modules/core/tools/gcc.lua:676: src/main.c: In function ‘module_load’:
src/main.c:7:5: warning: ignoring return value of ‘copy_to_user’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
7 | copy_to_user(NULL, NULL, 0);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from <command-line>:
/usr/src/linux-headers-5.15.0-47-generic/include/linux/thread_info.h: In function ‘copy_overflow’:
/usr/src/linux-headers-5.15.0-47-generic/include/linux/compiler_types.h:258:20: warning: ‘asm’ operand 2 probably does not match constraints
258 | #define asm_inline asm __inline
| ^~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:27:9: note: in expansion of macro ‘asm_inline’
27 | asm_inline volatile("1:\t" ins "\n" \
| ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:82:9: note: in expansion of macro ‘_BUG_FLAGS’
82 | _BUG_FLAGS(ASM_UD2, __flags, ASM_REACHABLE); \
| ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/asm-generic/bug.h:100:17: note: in expansion of macro ‘__WARN_FLAGS’
100 | __WARN_FLAGS(BUGFLAG_NO_CUT_HERE | BUGFLAG_TAINT(taint));\
| ^~~~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/asm-generic/bug.h:132:17: note: in expansion of macro ‘__WARN_printf’
132 | __WARN_printf(TAINT_WARN, format); \
| ^~~~~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/linux/thread_info.h:200:9: note: in expansion of macro ‘WARN’
200 | WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count);
| ^~~~
/usr/src/linux-headers-5.15.0-47-generic/include/linux/compiler_types.h:258:20: error: impossible constraint in ‘asm’
258 | #define asm_inline asm __inline
| ^~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:27:9: note: in expansion of macro ‘asm_inline’
27 | asm_inline volatile("1:\t" ins "\n" \
| ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:82:9: note: in expansion of macro ‘_BUG_FLAGS’
82 | _BUG_FLAGS(ASM_UD2, __flags, ASM_REACHABLE); \
| ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/asm-generic/bug.h:100:17: note: in expansion of macro ‘__WARN_FLAGS’
100 | __WARN_FLAGS(BUGFLAG_NO_CUT_HERE | BUGFLAG_TAINT(taint));\
| ^~~~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/asm-generic/bug.h:132:17: note: in expansion of macro ‘__WARN_printf’
132 | __WARN_printf(TAINT_WARN, format); \
| ^~~~~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/linux/thread_info.h:200:9: note: in expansion of macro ‘WARN’
200 | WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count);
| ^~~~
/usr/src/linux-headers-5.15.0-47-generic/include/linux/thread_info.h: In function ‘module_load’:
/usr/src/linux-headers-5.15.0-47-generic/include/linux/compiler_types.h:258:20: warning: ‘asm’ operand 2 probably does not match constraints
258 | #define asm_inline asm __inline
| ^~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:27:9: note: in expansion of macro ‘asm_inline’
27 | asm_inline volatile("1:\t" ins "\n" \
| ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:82:9: note: in expansion of macro ‘_BUG_FLAGS’
82 | _BUG_FLAGS(ASM_UD2, __flags, ASM_REACHABLE); \
| ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/asm-generic/bug.h:106:17: note: in expansion of macro ‘__WARN_FLAGS’
106 | __WARN_FLAGS(BUGFLAG_ONCE | \
| ^~~~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/linux/thread_info.h:216:13: note: in expansion of macro ‘WARN_ON_ONCE’
216 | if (WARN_ON_ONCE(bytes > INT_MAX))
| ^~~~~~~~~~~~
stack traceback:
[C]: in function 'error'
[@programdir/core/base/os.lua:890]:
[@programdir/modules/core/tools/gcc.lua:676]: in function 'catch'
[@programdir/core/sandbox/modules/try.lua:123]: in function 'try'
[@programdir/modules/core/tools/gcc.lua:617]:
[C]: in function 'xpcall'
[@programdir/core/base/utils.lua:280]:
[@programdir/modules/private/action/build/object.lua:91]: in function 'script'
[@programdir/modules/private/action/build/object.lua:104]: in function 'build_object'
[@programdir/modules/private/action/build/object.lua:129]: in function 'jobfunc'
[@programdir/modules/private/async/runjobs.lua:232]:
[C]: in function 'xpcall'
[@programdir/core/base/utils.lua:280]: in function 'trycall'
[@programdir/core/sandbox/modules/try.lua:117]: in function 'try'
[@programdir/modules/private/async/runjobs.lua:218]: in function 'cotask'
[@programdir/core/base/scheduler.lua:388]:
stack traceback:
[C]: in function 'error'
@programdir/core/base/os.lua:890: in function 'base/os.raiselevel'
(...tail calls...)
@programdir/modules/private/async/runjobs.lua:256: in field 'catch'
@programdir/core/sandbox/modules/try.lua:123: in global 'try'
@programdir/modules/private/async/runjobs.lua:218: in upvalue 'cotask'
@programdir/core/base/scheduler.lua:388: in function <@programdir/core/base/scheduler.lua:385>
xmake f -c -vD
luna@wl-kernel:~/master/project/te$ xmake f -c -vD
checking for platform ... linux
checking for architecture ... x86_64
checking for gcc ... /usr/bin/gcc
checkinfo: cannot runv(dmd --version), No such file or directory
checking for dmd ... no
checkinfo: cannot runv(ldc2 --version), No such file or directory
checking for ldc2 ... no
checkinfo: cannot runv(gdc --version), No such file or directory
checking for gdc ... no
checkinfo: cannot runv(zig version), No such file or directory
checking for zig ... no
checkinfo: cannot runv(zig version), No such file or directory
checking for zig ... no
checking for gcc ... /usr/bin/gcc
checking for the c compiler (cc) ... gcc
checking for make ... /usr/bin/make
configure
{
host = linux
ndk_stdcxx = true
mode = release
arch = x86_64
plat = linux
clean = true
buildir = build
ccache = true
kind = static
}