我必须包含哪个头文件才能在内核源文件中获取printk()?

时间:2015-08-18 18:42:04

标签: c linux gcc compiler-errors linux-kernel

假设我想在编译内核之前在printk()内使用arch/x86/boot/string.c。我必须包含哪个头文件,以便链接器知道在哪里找到printk()?我尝试了#include <linux/kernel.h>#include <linux/printk.h>,但在make bzImage期间我始终收到错误,告诉我链接器找不到printk

arch/x86/boot/compressed/string.o: In function `memcmp`:
string.c:(.text+0x19): undefined reference to `printk`

1 个答案:

答案 0 :(得分:4)

您正在尝试检测内核的启动阶段。它有自己的非常小的库,并没有像linux/printk.h这样的标题可用。该函数名为printf(),并在 arch / x86 / boot / printf.c 中实现。

此功能的输出转到BIOS中定义的通道( int 10h ),如果询问,则转到旧版(您不能使用具有32位I的UART) / O,例如)串行线。有关详细信息,请参阅 printf.c 源文件。