编译内核驱动为模块,没有指定架构的时候出现错误

编译内核驱动为模块,发现报错一堆,发现./arch/x86/include/asm/arch_hweight.h:55:42: error: expected ‘:’ or ‘)’ before ‘POPCNT64’ 这种报错,最后发现是编译命令问题,你要指定架构

KERNELDIR := /home/alientek/sdk/kernel
CURRENT_PATH := $(shell pwd)
obj-m := chrdevbase.o

build: kernel_modules

kernel_modules:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

修改为
$(MAKE) ARCH=arm -C (KERNELDIR)M=(KERNELDIR) M=(KERNELDIR)M=(CURRENT_PATH) modules

make -C /home/alientek/sdk/kernel M=/home/alientek/sdk/chenwei/01_chrdevbase modules
make[1]: 进入目录“/home/alientek/sdk/kernel”
  CC [M]  /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.o
In file included from ./arch/x86/include/asm/barrier.h:5,
                 from ./include/linux/compiler.h:250,
                 from ./include/linux/kernel.h:10,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:2:
./arch/x86/include/asm/arch_hweight.h: In function '__arch_hweight64':
./arch/x86/include/asm/arch_hweight.h:55:42: error: expected ':' or ')' before 'POPCNT64'
   55 |  asm (ALTERNATIVE("call __sw_hweight64", POPCNT64, X86_FEATURE_POPCNT)
      |                                          ^~~~~~~~
./arch/x86/include/asm/alternative.h:133:28: note: in definition of macro 'ALTINSTR_REPLACEMENT'
  133 |  b_replacement(num)":\n\t" newinstr "\n" e_replacement(num) ":\n\t"
      |                            ^~~~~~~~
./arch/x86/include/asm/arch_hweight.h:55:7: note: in expansion of macro 'ALTERNATIVE'
   55 |  asm (ALTERNATIVE("call __sw_hweight64", POPCNT64, X86_FEATURE_POPCNT)
      |       ^~~~~~~~~~~
In file included from ./arch/x86/include/asm/atomic.h:262,
                 from ./include/linux/atomic.h:7,
                 from ./include/linux/rcupdate.h:38,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/atomic64_64.h: At top level:
./arch/x86/include/asm/atomic64_64.h:20:45: error: unknown type name 'atomic64_t'
   20 | static inline long arch_atomic64_read(const atomic64_t *v)
      |                                             ^~~~~~~~~~
In file included from ./include/linux/kernel.h:10,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:2:
./arch/x86/include/asm/atomic64_64.h: In function 'arch_atomic64_read':
./arch/x86/include/asm/atomic64_64.h:22:22: error: request for member 'counter' in something not a structure or union
   22 |  return READ_ONCE((v)->counter);
      |                      ^~
./include/linux/compiler.h:255:17: note: in definition of macro '__READ_ONCE'
  255 |  union { typeof(x) __val; char __c[1]; } __u;   \
      |                 ^
./arch/x86/include/asm/atomic64_64.h:22:9: note: in expansion of macro 'READ_ONCE'
   22 |  return READ_ONCE((v)->counter);
      |         ^~~~~~~~~
./arch/x86/include/asm/atomic64_64.h:22:22: error: request for member 'counter' in something not a structure or union
   22 |  return READ_ONCE((v)->counter);
      |                      ^~
./include/linux/compiler.h:257:22: note: in definition of macro '__READ_ONCE'
  257 |   __read_once_size(&(x), __u.__c, sizeof(x));  \
      |                      ^
./arch/x86/include/asm/atomic64_64.h:22:9: note: in expansion of macro 'READ_ONCE'
   22 |  return READ_ONCE((v)->counter);
      |         ^~~~~~~~~
./arch/x86/include/asm/atomic64_64.h:22:22: error: request for member 'counter' in something not a structure or union
   22 |  return READ_ONCE((v)->counter);
      |                      ^~
./include/linux/compiler.h:257:42: note: in definition of macro '__READ_ONCE'
  257 |   __read_once_size(&(x), __u.__c, sizeof(x));  \
      |                                          ^
./arch/x86/include/asm/atomic64_64.h:22:9: note: in expansion of macro 'READ_ONCE'
   22 |  return READ_ONCE((v)->counter);
      |         ^~~~~~~~~
./arch/x86/include/asm/atomic64_64.h:22:22: error: request for member 'counter' in something not a structure or union
   22 |  return READ_ONCE((v)->counter);
      |                      ^~
./include/linux/compiler.h:259:30: note: in definition of macro '__READ_ONCE'
  259 |   __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
      |                              ^
./arch/x86/include/asm/atomic64_64.h:22:9: note: in expansion of macro 'READ_ONCE'
   22 |  return READ_ONCE((v)->counter);
      |         ^~~~~~~~~
./arch/x86/include/asm/atomic64_64.h:22:22: error: request for member 'counter' in something not a structure or union
   22 |  return READ_ONCE((v)->counter);
      |                      ^~
./include/linux/compiler.h:259:50: note: in definition of macro '__READ_ONCE'
  259 |   __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
      |                                                  ^
./arch/x86/include/asm/atomic64_64.h:22:9: note: in expansion of macro 'READ_ONCE'
   22 |  return READ_ONCE((v)->counter);
      |         ^~~~~~~~~
In file included from ./arch/x86/include/asm/atomic.h:262,
                 from ./include/linux/atomic.h:7,
                 from ./include/linux/rcupdate.h:38,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/atomic64_64.h: At top level:
./arch/x86/include/asm/atomic64_64.h:32:38: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
   32 | static inline void arch_atomic64_set(atomic64_t *v, long i)
      |                                      ^~~~~~~~~~
      |                                      atomic_t
./arch/x86/include/asm/atomic64_64.h:44:55: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
   44 | static __always_inline void arch_atomic64_add(long i, atomic64_t *v)
      |                                                       ^~~~~~~~~~
      |                                                       atomic_t
./arch/x86/include/asm/atomic64_64.h:58:46: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
   58 | static inline void arch_atomic64_sub(long i, atomic64_t *v)
      |                                              ^~~~~~~~~~
      |                                              atomic_t
./arch/x86/include/asm/atomic64_64.h:74:55: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
   74 | static inline bool arch_atomic64_sub_and_test(long i, atomic64_t *v)
      |                                                       ^~~~~~~~~~
      |                                                       atomic_t
./arch/x86/include/asm/atomic64_64.h:86:47: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
   86 | static __always_inline void arch_atomic64_inc(atomic64_t *v)
      |                                               ^~~~~~~~~~
      |                                               atomic_t
./arch/x86/include/asm/atomic64_64.h:100:47: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  100 | static __always_inline void arch_atomic64_dec(atomic64_t *v)
      |                                               ^~~~~~~~~~
      |                                               atomic_t
./arch/x86/include/asm/atomic64_64.h:116:47: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  116 | static inline bool arch_atomic64_dec_and_test(atomic64_t *v)
      |                                               ^~~~~~~~~~
      |                                               atomic_t
./arch/x86/include/asm/atomic64_64.h:130:47: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  130 | static inline bool arch_atomic64_inc_and_test(atomic64_t *v)
      |                                               ^~~~~~~~~~
      |                                               atomic_t
./arch/x86/include/asm/atomic64_64.h:145:55: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  145 | static inline bool arch_atomic64_add_negative(long i, atomic64_t *v)
      |                                                       ^~~~~~~~~~
      |                                                       atomic_t
./arch/x86/include/asm/atomic64_64.h:158:62: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  158 | static __always_inline long arch_atomic64_add_return(long i, atomic64_t *v)
      |                                                              ^~~~~~~~~~
      |                                                              atomic_t
./arch/x86/include/asm/atomic64_64.h:163:53: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  163 | static inline long arch_atomic64_sub_return(long i, atomic64_t *v)
      |                                                     ^~~~~~~~~~
      |                                                     atomic_t
./arch/x86/include/asm/atomic64_64.h:168:52: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  168 | static inline long arch_atomic64_fetch_add(long i, atomic64_t *v)
      |                                                    ^~~~~~~~~~
      |                                                    atomic_t
./arch/x86/include/asm/atomic64_64.h:173:52: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  173 | static inline long arch_atomic64_fetch_sub(long i, atomic64_t *v)
      |                                                    ^~~~~~~~~~
      |                                                    atomic_t
./arch/x86/include/asm/atomic64_64.h:178:42: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  178 | static inline long arch_atomic64_cmpxchg(atomic64_t *v, long old, long new)
      |                                          ^~~~~~~~~~
      |                                          atomic_t
./arch/x86/include/asm/atomic64_64.h:184:55: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  184 | static __always_inline bool arch_atomic64_try_cmpxchg(atomic64_t *v, s64 *old, long new)
      |                                                       ^~~~~~~~~~
      |                                                       atomic_t
./arch/x86/include/asm/atomic64_64.h:189:39: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  189 | static inline long arch_atomic64_xchg(atomic64_t *v, long new)
      |                                       ^~~~~~~~~~
      |                                       atomic_t
./arch/x86/include/asm/atomic64_64.h:194:46: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  194 | static inline void arch_atomic64_and(long i, atomic64_t *v)
      |                                              ^~~~~~~~~~
      |                                              atomic_t
./arch/x86/include/asm/atomic64_64.h:202:52: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  202 | static inline long arch_atomic64_fetch_and(long i, atomic64_t *v)
      |                                                    ^~~~~~~~~~
      |                                                    atomic_t
./arch/x86/include/asm/atomic64_64.h:211:45: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  211 | static inline void arch_atomic64_or(long i, atomic64_t *v)
      |                                             ^~~~~~~~~~
      |                                             atomic_t
./arch/x86/include/asm/atomic64_64.h:219:51: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  219 | static inline long arch_atomic64_fetch_or(long i, atomic64_t *v)
      |                                                   ^~~~~~~~~~
      |                                                   atomic_t
./arch/x86/include/asm/atomic64_64.h:228:46: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  228 | static inline void arch_atomic64_xor(long i, atomic64_t *v)
      |                                              ^~~~~~~~~~
      |                                              atomic_t
./arch/x86/include/asm/atomic64_64.h:236:52: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  236 | static inline long arch_atomic64_fetch_xor(long i, atomic64_t *v)
      |                                                    ^~~~~~~~~~
      |                                                    atomic_t
In file included from ./arch/x86/include/asm/atomic.h:265,
                 from ./include/linux/atomic.h:7,
                 from ./include/linux/rcupdate.h:38,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/asm-generic/atomic-instrumented.h:25:48: error: unknown type name 'atomic64_t'
   25 | static __always_inline s64 atomic64_read(const atomic64_t *v)
      |                                                ^~~~~~~~~~
./include/asm-generic/atomic-instrumented.h:37:42: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
   37 | static __always_inline void atomic64_set(atomic64_t *v, s64 i)
      |                                          ^~~~~~~~~~
      |                                          atomic_t
./include/asm-generic/atomic-instrumented.h:49:42: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
   49 | static __always_inline s64 atomic64_xchg(atomic64_t *v, s64 i)
      |                                          ^~~~~~~~~~
      |                                          atomic_t
./include/asm-generic/atomic-instrumented.h:61:45: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
   61 | static __always_inline s64 atomic64_cmpxchg(atomic64_t *v, s64 old, s64 new)
      |                                             ^~~~~~~~~~
      |                                             atomic_t
./include/asm-generic/atomic-instrumented.h:79:50: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
   79 | static __always_inline bool atomic64_try_cmpxchg(atomic64_t *v, s64 *old, s64 new)
      |                                                  ^~~~~~~~~~
      |                                                  atomic_t
./include/asm-generic/atomic-instrumented.h:116:42: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  116 | static __always_inline void atomic64_inc(atomic64_t *v)
      |                                          ^~~~~~~~~~
      |                                          atomic_t
./include/asm-generic/atomic-instrumented.h:147:49: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  147 | static __always_inline void atomic64_add(s64 i, atomic64_t *v)
      |                                                 ^~~~~~~~~~
      |                                                 atomic_t
./include/asm-generic/atomic-instrumented.h:159:49: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  159 | static __always_inline void atomic64_sub(s64 i, atomic64_t *v)
      |                                                 ^~~~~~~~~~
      |                                                 atomic_t
./include/asm-generic/atomic-instrumented.h:171:49: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  171 | static __always_inline void atomic64_and(s64 i, atomic64_t *v)
      |                                                 ^~~~~~~~~~
      |                                                 atomic_t
./include/asm-generic/atomic-instrumented.h:183:48: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  183 | static __always_inline void atomic64_or(s64 i, atomic64_t *v)
      |                                                ^~~~~~~~~~
      |                                                atomic_t
./include/asm-generic/atomic-instrumented.h:195:49: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  195 | static __always_inline void atomic64_xor(s64 i, atomic64_t *v)
      |                                                 ^~~~~~~~~~
      |                                                 atomic_t
./include/asm-generic/atomic-instrumented.h:266:51: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  266 | static __always_inline bool atomic64_dec_and_test(atomic64_t *v)
      |                                                   ^~~~~~~~~~
      |                                                   atomic_t
./include/asm-generic/atomic-instrumented.h:284:51: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  284 | static __always_inline bool atomic64_inc_and_test(atomic64_t *v)
      |                                                   ^~~~~~~~~~
      |                                                   atomic_t
./include/asm-generic/atomic-instrumented.h:297:55: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  297 | static __always_inline s64 atomic64_add_return(s64 i, atomic64_t *v)
      |                                                       ^~~~~~~~~~
      |                                                       atomic_t
./include/asm-generic/atomic-instrumented.h:309:55: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  309 | static __always_inline s64 atomic64_sub_return(s64 i, atomic64_t *v)
      |                                                       ^~~~~~~~~~
      |                                                       atomic_t
./include/asm-generic/atomic-instrumented.h:321:54: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  321 | static __always_inline s64 atomic64_fetch_add(s64 i, atomic64_t *v)
      |                                                      ^~~~~~~~~~
      |                                                      atomic_t
./include/asm-generic/atomic-instrumented.h:333:54: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  333 | static __always_inline s64 atomic64_fetch_sub(s64 i, atomic64_t *v)
      |                                                      ^~~~~~~~~~
      |                                                      atomic_t
./include/asm-generic/atomic-instrumented.h:345:54: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  345 | static __always_inline s64 atomic64_fetch_and(s64 i, atomic64_t *v)
      |                                                      ^~~~~~~~~~
      |                                                      atomic_t
./include/asm-generic/atomic-instrumented.h:357:53: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  357 | static __always_inline s64 atomic64_fetch_or(s64 i, atomic64_t *v)
      |                                                     ^~~~~~~~~~
      |                                                     atomic_t
./include/asm-generic/atomic-instrumented.h:369:54: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  369 | static __always_inline s64 atomic64_fetch_xor(s64 i, atomic64_t *v)
      |                                                      ^~~~~~~~~~
      |                                                      atomic_t
./include/asm-generic/atomic-instrumented.h:386:58: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  386 | static __always_inline bool atomic64_sub_and_test(s64 i, atomic64_t *v)
      |                                                          ^~~~~~~~~~
      |                                                          atomic_t
./include/asm-generic/atomic-instrumented.h:404:58: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
  404 | static __always_inline bool atomic64_add_negative(s64 i, atomic64_t *v)
      |                                                          ^~~~~~~~~~
      |                                                          atomic_t
In file included from ./include/linux/rcupdate.h:38,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/linux/atomic.h:1161:51: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
 1161 | static inline long long atomic64_fetch_add_unless(atomic64_t *v, long long a,
      |                                                   ^~~~~~~~~~
      |                                                   atomic_t
./include/linux/atomic.h:1184:40: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
 1184 | static inline bool atomic64_add_unless(atomic64_t *v, long long a, long long u)
      |                                        ^~~~~~~~~~
      |                                        atomic_t
./include/linux/atomic.h:1263:49: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
 1263 | static inline bool atomic64_inc_unless_negative(atomic64_t *v)
      |                                                 ^~~~~~~~~~
      |                                                 atomic_t
./include/linux/atomic.h:1277:49: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
 1277 | static inline bool atomic64_dec_unless_positive(atomic64_t *v)
      |                                                 ^~~~~~~~~~
      |                                                 atomic_t
./include/linux/atomic.h:1298:50: error: unknown type name 'atomic64_t'; did you mean 'atomic_t'?
 1298 | static inline long long atomic64_dec_if_positive(atomic64_t *v)
      |                                                  ^~~~~~~~~~
      |                                                  atomic_t
In file included from ./arch/x86/include/asm/pgtable_types.h:347,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/asm-generic/pgtable-nopud.h:21: warning: "PUD_SHIFT" redefined
error, forbidden warning:pgtable-nopud.h:21
   21 | #define PUD_SHIFT P4D_SHIFT
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:250,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/pgtable_64_types.h:83: note: this is the location of the previous definition
   83 | #define PUD_SHIFT 30
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:347,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/asm-generic/pgtable-nopud.h:22: warning: "PTRS_PER_PUD" redefined
error, forbidden warning:pgtable-nopud.h:22
   22 | #define PTRS_PER_PUD 1
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:250,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/pgtable_64_types.h:84: note: this is the location of the previous definition
   84 | #define PTRS_PER_PUD 512
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:347,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/asm-generic/pgtable-nopud.h:23: warning: "PUD_SIZE" redefined
error, forbidden warning:pgtable-nopud.h:23
   23 | #define PUD_SIZE   (1UL << PUD_SHIFT)
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:250,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/pgtable_64_types.h:100: note: this is the location of the previous definition
  100 | #define PUD_SIZE (_AC(1, UL) << PUD_SHIFT)
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:347,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/asm-generic/pgtable-nopud.h:24: warning: "PUD_MASK" redefined
error, forbidden warning:pgtable-nopud.h:24
   24 | #define PUD_MASK   (~(PUD_SIZE-1))
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:250,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/pgtable_64_types.h:101: note: this is the location of the previous definition
  101 | #define PUD_MASK (~(PUD_SIZE - 1))
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:373,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/asm-generic/pgtable-nopmd.h:20: warning: "PMD_SHIFT" redefined
error, forbidden warning:pgtable-nopmd.h:20
   20 | #define PMD_SHIFT PUD_SHIFT
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:250,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/pgtable_64_types.h:90: note: this is the location of the previous definition
   90 | #define PMD_SHIFT 21
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:373,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/asm-generic/pgtable-nopmd.h:21: warning: "PTRS_PER_PMD" redefined
error, forbidden warning:pgtable-nopmd.h:21
   21 | #define PTRS_PER_PMD 1
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:250,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/pgtable_64_types.h:91: note: this is the location of the previous definition
   91 | #define PTRS_PER_PMD 512
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:373,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/asm-generic/pgtable-nopmd.h:22: warning: "PMD_SIZE" redefined
error, forbidden warning:pgtable-nopmd.h:22
   22 | #define PMD_SIZE   (1UL << PMD_SHIFT)
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:250,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/pgtable_64_types.h:98: note: this is the location of the previous definition
   98 | #define PMD_SIZE (_AC(1, UL) << PMD_SHIFT)
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:373,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/asm-generic/pgtable-nopmd.h:23: warning: "PMD_MASK" redefined
error, forbidden warning:pgtable-nopmd.h:23
   23 | #define PMD_MASK   (~(PMD_SIZE-1))
      | 
In file included from ./arch/x86/include/asm/pgtable_types.h:250,
                 from ./arch/x86/include/asm/processor.h:19,
                 from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/pgtable_64_types.h:99: note: this is the location of the previous definition
   99 | #define PMD_MASK (~(PMD_SIZE - 1))
      | 
In file included from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/processor.h:182: warning: "cache_line_size" redefined
error, forbidden warning:processor.h:182
  182 | #define cache_line_size() (boot_cpu_data.x86_cache_alignment)
      | 
In file included from ./include/linux/printk.h:9,
                 from ./include/linux/kernel.h:14,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:2:
./include/linux/cache.h:79: note: this is the location of the previous definition
   79 | #define cache_line_size() L1_CACHE_BYTES
      | 
In file included from ./arch/x86/include/asm/cpufeature.h:5,
                 from ./arch/x86/include/asm/thread_info.h:53,
                 from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/processor.h: In function 'load_cr3':
./arch/x86/include/asm/processor.h:251:12: error: implicit declaration of function '__sme_pa' [-Werror=implicit-function-declaration]
  251 |  write_cr3(__sme_pa(pgdir));
      |            ^~~~~~~~
In file included from ./include/linux/cache.h:6,
                 from ./include/linux/printk.h:9,
                 from ./include/linux/kernel.h:14,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:2:
./arch/x86/include/asm/processor.h: At top level:
./arch/x86/include/asm/cache.h:8:25: error: 'CONFIG_X86_L1_CACHE_SHIFT' undeclared here (not in a function); did you mean 'CONFIG_ARM_L1_CACHE_SHIFT'?
    8 | #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT)
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~
./arch/x86/include/asm/cache.h:9:30: note: in expansion of macro 'L1_CACHE_SHIFT'
    9 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
      |                              ^~~~~~~~~~~~~~
./include/linux/cache.h:13:25: note: in expansion of macro 'L1_CACHE_BYTES'
   13 | #define SMP_CACHE_BYTES L1_CACHE_BYTES
      |                         ^~~~~~~~~~~~~~
./include/linux/cache.h:35:58: note: in expansion of macro 'SMP_CACHE_BYTES'
   35 | #define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
      |                                                          ^~~~~~~~~~~~~~~
./include/linux/percpu-defs.h:149:2: note: in expansion of macro '____cacheline_aligned'
  149 |  ____cacheline_aligned
      |  ^~~~~~~~~~~~~~~~~~~~~
./arch/x86/include/asm/processor.h:433:1: note: in expansion of macro 'DECLARE_PER_CPU_ALIGNED'
  433 | DECLARE_PER_CPU_ALIGNED(struct stack_canary, stack_canary);
      | ^~~~~~~~~~~~~~~~~~~~~~~
In file included from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/linux/thread_info.h:103:19: error: redefinition of 'arch_within_stack_frames'
  103 | static inline int arch_within_stack_frames(const void * const stack,
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from ./include/linux/thread_info.h:38,
                 from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/thread_info.h:186:19: note: previous definition of 'arch_within_stack_frames' was here
  186 | static inline int arch_within_stack_frames(const void * const stack,
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from ./include/linux/kernel.h:10,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:2:
./include/linux/sched.h: In function 'need_resched':
./include/linux/thread_info.h:98:22: error: implicit declaration of function 'current_thread_info'; did you mean 'task_thread_info'? [-Werror=implicit-function-declaration]
   98 |  test_ti_thread_flag(current_thread_info(), flag)
      |                      ^~~~~~~~~~~~~~~~~~~
./include/linux/compiler.h:77:42: note: in definition of macro 'unlikely'
   77 | # define unlikely(x) __builtin_expect(!!(x), 0)
      |                                          ^
./include/linux/thread_info.h:100:28: note: in expansion of macro 'test_thread_flag'
  100 | #define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED)
      |                            ^~~~~~~~~~~~~~~~
./include/linux/sched.h:1807:18: note: in expansion of macro 'tif_need_resched'
 1807 |  return unlikely(tif_need_resched());
      |                  ^~~~~~~~~~~~~~~~
./include/linux/thread_info.h:98:22: warning: passing argument 1 of 'test_ti_thread_flag' makes pointer from integer without a cast [-Wint-conversion]
error, forbidden warning:thread_info.h:98
   98 |  test_ti_thread_flag(current_thread_info(), flag)
      |                      ^~~~~~~~~~~~~~~~~~~~~
      |                      |
      |                      int
./include/linux/compiler.h:77:42: note: in definition of macro 'unlikely'
   77 | # define unlikely(x) __builtin_expect(!!(x), 0)
      |                                          ^
./include/linux/thread_info.h:100:28: note: in expansion of macro 'test_thread_flag'
  100 | #define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED)
      |                            ^~~~~~~~~~~~~~~~
./include/linux/sched.h:1807:18: note: in expansion of macro 'tif_need_resched'
 1807 |  return unlikely(tif_need_resched());
      |                  ^~~~~~~~~~~~~~~~
In file included from ./arch/x86/include/asm/preempt.h:7,
                 from ./include/linux/preempt.h:81,
                 from ./include/linux/rcupdate.h:40,
                 from ./include/linux/rculist.h:11,
                 from ./include/linux/pid.h:5,
                 from ./include/linux/sched.h:14,
                 from ./include/linux/blkdev.h:5,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/linux/thread_info.h:82:59: note: expected 'struct thread_info *' but argument is of type 'int'
   82 | static inline int test_ti_thread_flag(struct thread_info *ti, int flag)
      |                                       ~~~~~~~~~~~~~~~~~~~~^~
In file included from ./include/linux/kernel.h:10,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:2:
./include/linux/sched.h: In function 'task_cpu':
./include/linux/sched.h:1820:38: error: 'struct thread_info' has no member named 'cpu'
 1820 |  return READ_ONCE(task_thread_info(p)->cpu);
      |                                      ^~
./include/linux/compiler.h:255:17: note: in definition of macro '__READ_ONCE'
  255 |  union { typeof(x) __val; char __c[1]; } __u;   \
      |                 ^
./include/linux/sched.h:1820:9: note: in expansion of macro 'READ_ONCE'
 1820 |  return READ_ONCE(task_thread_info(p)->cpu);
      |         ^~~~~~~~~
./include/linux/sched.h:1820:38: error: 'struct thread_info' has no member named 'cpu'
 1820 |  return READ_ONCE(task_thread_info(p)->cpu);
      |                                      ^~
./include/linux/compiler.h:257:22: note: in definition of macro '__READ_ONCE'
  257 |   __read_once_size(&(x), __u.__c, sizeof(x));  \
      |                      ^
./include/linux/sched.h:1820:9: note: in expansion of macro 'READ_ONCE'
 1820 |  return READ_ONCE(task_thread_info(p)->cpu);
      |         ^~~~~~~~~
./include/linux/sched.h:1820:38: error: 'struct thread_info' has no member named 'cpu'
 1820 |  return READ_ONCE(task_thread_info(p)->cpu);
      |                                      ^~
./include/linux/compiler.h:257:42: note: in definition of macro '__READ_ONCE'
  257 |   __read_once_size(&(x), __u.__c, sizeof(x));  \
      |                                          ^
./include/linux/sched.h:1820:9: note: in expansion of macro 'READ_ONCE'
 1820 |  return READ_ONCE(task_thread_info(p)->cpu);
      |         ^~~~~~~~~
./include/linux/sched.h:1820:38: error: 'struct thread_info' has no member named 'cpu'
 1820 |  return READ_ONCE(task_thread_info(p)->cpu);
      |                                      ^~
./include/linux/compiler.h:259:30: note: in definition of macro '__READ_ONCE'
  259 |   __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
      |                              ^
./include/linux/sched.h:1820:9: note: in expansion of macro 'READ_ONCE'
 1820 |  return READ_ONCE(task_thread_info(p)->cpu);
      |         ^~~~~~~~~
./include/linux/sched.h:1820:38: error: 'struct thread_info' has no member named 'cpu'
 1820 |  return READ_ONCE(task_thread_info(p)->cpu);
      |                                      ^~
./include/linux/compiler.h:259:50: note: in definition of macro '__READ_ONCE'
  259 |   __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
      |                                                  ^
./include/linux/sched.h:1820:9: note: in expansion of macro 'READ_ONCE'
 1820 |  return READ_ONCE(task_thread_info(p)->cpu);
      |         ^~~~~~~~~
In file included from ./include/linux/cache.h:6,
                 from ./include/linux/printk.h:9,
                 from ./include/linux/kernel.h:14,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:2:
./include/linux/mmzone.h: At top level:
./arch/x86/include/asm/cache.h:13:31: error: 'CONFIG_X86_INTERNODE_CACHE_SHIFT' undeclared here (not in a function); did you mean 'INTERNODE_CACHE_SHIFT'?
   13 | #define INTERNODE_CACHE_SHIFT CONFIG_X86_INTERNODE_CACHE_SHIFT
      |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/cache.h:72:35: note: in expansion of macro 'INTERNODE_CACHE_SHIFT'
   72 |  __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT))))
      |                                   ^~~~~~~~~~~~~~~~~~~~~
./include/linux/mmzone.h:114:3: note: in expansion of macro '____cacheline_internodealigned_in_smp'
  114 | } ____cacheline_internodealigned_in_smp;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ./include/linux/mm_types.h:18,
                 from ./include/linux/fs.h:23,
                 from ./include/linux/genhd.h:69,
                 from ./include/linux/blkdev.h:11,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/mmu.h:28:2: error: unknown type name 'atomic64_t'
   28 |  atomic64_t tlb_gen;
      |  ^~~~~~~~~~
In file included from ./include/linux/genhd.h:69,
                 from ./include/linux/blkdev.h:11,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./include/linux/fs.h:667:2: error: unknown type name 'atomic64_t'
  667 |  atomic64_t  i_version;
      |  ^~~~~~~~~~
In file included from ./arch/x86/include/asm/realmode.h:15,
                 from ./arch/x86/include/asm/acpi.h:33,
                 from ./arch/x86/include/asm/fixmap.h:29,
                 from ./arch/x86/include/asm/pgtable_64.h:17,
                 from ./arch/x86/include/asm/pgtable.h:694,
                 from ./include/linux/memremap.h:7,
                 from ./include/linux/mm.h:27,
                 from ./include/linux/pagemap.h:8,
                 from ./include/linux/blkdev.h:16,
                 from ./include/linux/ide.h:13,
                 from /home/alientek/sdk/chenwei/01_chrdevbase/chrdevbase.c:4:
./arch/x86/include/asm/io.h:44:10: fatal error: asm/early_ioremap.h: No such file or directory
   44 | #include <asm/early_ioremap.h>
      |          ^~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
compilation terminated.
make[1]: 离开目录“/home/alientek/sdk/kernel”

Linux 内核中**编译指定驱动模块**(如你正在开发的 `vrdma.ko`),是驱动开发中的常见需求。你可以通过 **Kbuild 系统** 精确控制只编译某个子目录或某个源文件对应的模块,而无需重新编译整个内核。 --- ## ✅ 目标 假设你的驱动代码位于: ``` drivers/infiniband/ulp/vrdma/ ``` 包含文件:`vrdma_main.c`, `Makefile` 你想单独编译出 `vrdma.ko` 模块。 --- ## ✅ 方法一:使用 `make M=` 编译指定目录(推荐) 这是最常用、最标准的方法。 ### 🔧 步骤: ```bash # 假设你在内核源码根目录下 cd /path/to/linux-kernel-source # 清理旧对象(可选) make clean # 编译指定模块:M= 表示模块所在的相对路径 make M=drivers/infiniband/ulp/vrdma modules ``` ### ✅ 输出结果: 如果成功,会生成: ``` drivers/infiniband/ulp/vrdma/vrdma.ko ``` > ⚠️ 注意:你需要已经配置过内核(`.config` 文件存在)。如果没有,请先运行: > ```bash > make defconfig > # 或 > make menuconfig > ``` --- ## ✅ 方法二:使用完整路径 + KBUILD_OUTPUT(适用于外部构建) 如果你把驱动放在外部目录(例如 `/home/user/vrdma_driver`),可以这样: ```bash make -C /path/to/kernel/source \ M=/home/user/vrdma_driver \ modules ``` 这表示: - `-C`:进入内核源码目录; - `M=`:指定编译的外部模块路径。 --- ## ✅ 方法三:修改内核 Makefile 强制内置或模块化(不推荐用于单独编译) 你可以在 `drivers/infiniband/ulp/vrdma/Makefile` 中添加: ```makefile obj-$(CONFIG_VRDMA) += vrdma.o ``` 然后在 `.config` 中设置: ```bash CONFIG_VRDMA=m # 编译模块 # 或 CONFIG_VRDMA=y # 静态编入内核 ``` 再执行: ```bash make modules SUBDIRS=drivers/infiniband/ulp/vrdma ``` > ❌ 已废弃:`SUBDIRS=` 是旧语法,新内核建议用 `M=`。 --- ## ✅ 示例:完整的模块 Makefile 在 `drivers/infiniband/ulp/vrdma/Makefile` 中写: ```makefile # Makefile for vrdma driver obj-$(CONFIG_VRDMA) := vrdma.o vrdma-objs := vrdma_main.o vrdma_dev.o vrdma_qp.o ``` 并在 `.config` 中启用: ```bash CONFIG_VRDMA=m ``` 然后运行: ```bash make M=drivers/infiniband/ulp/vrdma modules ``` --- ## ✅ 如何清理? ```bash # 清理指定模块 make M=drivers/infiniband/ulp/vrdma clean # 或进入该目录手动清除 rm -f *.o *.mod.c *.ko .*.cmd .tmp_versions ``` --- ## ✅ 调试技巧:查看详细编译命令 ```bash make M=drivers/infiniband/ulp/vrdma modules V=1 ``` `V=1` 会打印每一条 gcc 编译命令,便于排查错误。 --- ## ✅ 加载与测试 编译完成后,拷贝到目标机器并加载: ```bash sudo insmod vrdma.ko dmesg | tail ``` 卸载: ```bash sudo rmmod vrdma ``` --- ## ✅ 常见问题及解决 | 问题 | 原因 | 解决方法 | |------|------|---------| | `No rule to make target` | 路径错误没有 Makefile | 检查路径和 Makefile 存在 | | `Unknown symbol ib_register_device` | 缺少依赖模块 | 确保 `ib_core` 已加载 `modprobe ib_core` | | 编译报错 missing headers | 头文件未找到 | 安装 kernel-devel 包 | | `struct module_layout` mismatch | 内核版本不匹配 | 使用对应版本内核源码 | --- ## ✅ 提示:快速验证是否能独立编译 创建一个最简测试 `test_vrdma.c`: ```c #include <linux/module.h> #include <rdma/ib_verbs.h> static int __init test_init(void) { pr_info("Hello VRDMA\n"); return 0; } static void __exit test_exit(void) { pr_info("Bye VRDMA\n"); } module_init(test_init); module_exit(test_exit); MODULE_LICENSE("GPL"); ``` 配合 Makefile: ```makefile obj-m := test_vrdma.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean ``` 运行 `make` 即可验证环境是否正常。 --- ### ❓相关问题: 1. 如何将自定义 RDMA 驱动注册为 `CONFIG_VRDMA=m` 并出现在 `menuconfig` 中? 2. 当 `insmod vrdma.ko` 报错 `Unknown symbol ib_register_device` 时,如何定位缺失的依赖模块? 3. 如何交叉编译 ARM64 架构下的 `vrdma.ko` 模块? 4. 是否可以在不修改内核源码的情况下,以外部模块形式编译并加载 RDMA 驱动? 如果你提供你的 `Makefile` 和 `.c` 文件结构,我可以帮你生成完整的编译脚本和 Kconfig 条目。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值