无法包含来自汇编代码文件的新头文件..(linux arm64 内核)

问题描述 投票:0回答:0

我为调试做了一个小代码(见这里。我以前使用过类似的代码,但这个似乎更正确。)
我想制作一个与此相关的宏。它用于在缓冲区中写入任意标记数据。 (当然我不能写这么多数据,因为这个宏不会在边界处向下舍入指针)。

.macro write_mark, data
mov x27, \data
adr_l x26, myptr
ldr x28, [x26]
str x27, [x28], #8
adr_l x26, myptr
str x28, [x26] // store write pointer at myptr
.endm

当我将上面的代码添加到汇编文件的开头时,它工作得很好。

.... (skip) ....

#include <asm/sysreg.h>
#include <asm/thread_info.h>
#include <asm/virt.h>

.global mydstart
.global myptr
.global mydebug2

.macro write_mark, data
mov x27, \data
adr_l x26, myptr
ldr x28, [x26]
str x27, [x28], #8
adr_l x26, myptr
str x28, [x26] // store write pointer at myptr
.endm



#include "efi-header.S"

#define __PHYS_OFFSET   KERNEL_START

我制作了 arch/arm64/include/asm/ckim.h 并将上面的代码替换为“#include ”。
ckim.h文件是这样的

#ifndef __ASM_ASSEMBLER_H
#define __ASM_ASSEMBLER_H

.global mydstart
.global myptr
.global mydebug2

.macro write_mark, data
mov x27, \data
adr_l x26, myptr
ldr x28, [x26]
str x27, [x28], #8
adr_l x26, myptr
str x28, [x26] // store write pointer at myptr
.endm


#endif  /* __ASM_ASSEMBLER_H */

然后当我做'make'时,我得到这个错误。

ckim@ckim-ubuntu:~/prj1/LinuxDevDrv/linux-5.15.68$ make
  CALL    scripts/checksyscalls.sh
  CALL    scripts/atomic/check-atomics.sh
  CHK     include/generated/compile.h
  AS      arch/arm64/kernel/head.o
arch/arm64/kernel/head.S: Assembler messages:
arch/arm64/kernel/head.S:118: Error: unknown mnemonic `write_mark' -- `write_mark 0x4444'
make[2]: *** [scripts/Makefile.build:391: arch/arm64/kernel/head.o] Error 1
make[1]: *** [scripts/Makefile.build:552: arch/arm64/kernel] Error 2
make: *** [Makefile:1898: arch/arm64] Error 2

所有其他 asm/*.h 包含文件都在 arch/arm64 下,所以我把 asm/ckim.h 放在那里。 我错过了什么??

assembly linux-kernel arm arm64
© www.soinside.com 2019 - 2024. All rights reserved.