Linux kernel 为什么要使用内置内核模块';s init函数赢得';启动时不会被调用吗?

Linux kernel 为什么要使用内置内核模块';s init函数赢得';启动时不会被调用吗?,linux-kernel,linux-device-driver,embedded-linux,kernel-module,elf,Linux Kernel,Linux Device Driver,Embedded Linux,Kernel Module,Elf,我在一个没有MMU的ARM平台上使用Linux,所以普通的ELF文件不起作用,我应该使用FDPIC_ELF可执行文件。但是我的内核无法执行fdpic可执行文件(错误-8(ENOEXEC)) 我已经决定在binfmt_elf_fdpic.c->init()函数中放置一些printk()调用来跟踪它。但这行不通 static int\uu init init\u elf\u fdpic\u binfmt(void) { printk(“Mahyar:elf\u fdpic:init start\n”

我在一个没有MMU的ARM平台上使用Linux,所以普通的ELF文件不起作用,我应该使用FDPIC_ELF可执行文件。但是我的内核无法执行fdpic可执行文件(错误-8(ENOEXEC))

我已经决定在binfmt_elf_fdpic.c
->init()
函数中放置一些
printk()
调用来跟踪它。但这行不通

static int\uu init init\u elf\u fdpic\u binfmt(void)
{
printk(“Mahyar:elf\u fdpic:init start\n”);//稍后删除我!
寄存器\u binfmt(&elf\u fdpic\u格式);
printk(“Mahyar:elf_fdpic:init finished\n”);//稍后删除我!
返回0;
}
静态无效\uuuu退出\uu elf\uFDPIC\uBINFMT(无效)
{
取消注册\u binfmt(&elf\u fdpic\u格式);
}
core_initcall(init_elf_fdpic_binfmt);
模块退出(退出elf fdpic binfmt);

我已经在menuconfig->executable formats中将fdpic ELF支持作为内置功能(不是内核模块)启用。另外,我的内核日志级别是15(最高级别(应该打印所有内容))

当我更改binfmt_elf_fdpic.c文件中的某些内容并运行
make
命令时,它会再次编译该文件。所以这意味着这个文件应该可以工作。
但为什么启动时它不会加载到内核中呢?

现有的函数是不够的。应该有
module_init
或类似的东西(可能有,但您没有显示足够的代码,所以我猜)。您还缺少
printk
的日志级别,这里有
core\u initcall
,现在我将其添加到本文中。但正如我在问题中提到的,日志级别是最高的(15)。我还在github上添加了指向此完整文件的链接。谢谢你的帮助!我说的不是15岁。检查printk和KERN_u宏的任何用法。printk应该出现在日志中,所以这有点奇怪。它们适用于其他代码吗?Idk,但当我将日志级别设置为15时,我可以在引导时看到很长的日志(但不能看到我的printk消息)。我应该改用Kdebug函数吗?@domen我也用Kdebug测试了它,但还是不起作用。现有的函数是不够的。应该有
module_init
或类似的东西(可能有,但您没有显示足够的代码,所以我猜)。您还缺少
printk
的日志级别,这里有
core\u initcall
,现在我将其添加到本文中。但正如我在问题中提到的,日志级别是最高的(15)。我还在github上添加了指向此完整文件的链接。谢谢你的帮助!我说的不是15岁。检查printk和KERN_u宏的任何用法。printk应该出现在日志中,所以这有点奇怪。它们适用于其他代码吗?Idk,但当我将日志级别设置为15时,我可以在引导时看到很长的日志(但不能看到我的printk消息)。我应该改用Kdebug函数吗?@domen我也用Kdebug进行了测试,但还是不起作用。