一年前有一个这样的问题,但从未得到过回答。我没有在旧线程上提出新问题,而是打开一个新问题。无论如何,关于这个问题。
在为Linux编译Zen内核时,我在make-kpkg
内核源代码时遇到了这个错误:
arch/x86/platform/intel-mid/early_printk_intel_mid.c: In function ‘dw_kmsg_dump’:
arch/x86/platform/intel-mid/early_printk_intel_mid.c:121:3: error: too few arguments to function ‘early_mrst_console.write’
early_mrst_console.write(&early_mrst_console, line, len);
这里是early_mrst_console.write的代码(early_mrst_console是struct
顺便说一句,其early_mrst_spi_write
函数的函数write
的链接:< / p>
static void early_mrst_spi_write(struct console *con, const char *str,
unsigned n)
{
int i;
for (i = 0; i < n && *str; i++) {
if (*str == '\n')
early_mrst_spi_putc('\r');
early_mrst_spi_putc(*str);
str++;
}
}
现在,我不是C专家(甚至不是业余爱好者),但看起来early_mrst_spi_write
需要3个参数,而对它的调用会产生3个参数。为什么它会调用错误,如何更改它以解决问题?
编辑:根据请求,struct
:
struct console early_mrst_console = {
.name = "earlymrst",
.write = early_mrst_spi_write,
.flags = CON_PRINTBUFFER,
.index = -1,
};
答案 0 :(得分:1)
给我们&#34; struct console&#34;的定义。我想它的写作需要更多的参数。
某些编译器可能不会根据其设置给出关于不兼容类型功能分配的警告。
在决定参数的数量和类型是否正确的情况下,编译器只会查看它在struct console中的内容,而不关心你如何声明early_mrst_spi_write(这在初始化early_mrst_console期间可能很重要,可能会给出一个警告)。