C 让内核模块链接到的标准内核库在哪里?

C 让内核模块链接到的标准内核库在哪里?,c,linux,linux-kernel,kernel,kernel-module,C,Linux,Linux Kernel,Kernel,Kernel Module,内核模块无法调用libc,因为libc在用户空间下运行。 还有其他一些内核指定的API,如printk()可以使模块正常工作。 据我所知,libc是几个标准c函数obj的集合。 它应该存在一个集合(或库)来包含几个内核标准函数对象。 这样我就可以把我的内核模块和这些内核标准库链接起来工作了,对吗 简单地说,我的问题如下 在用户空间中: aaa.o链接bbb.o以调用myfunc() aaa.o链接libc.so以调用printf() 在内核空间中: aaa.ko链接bbb.ko调用myfunc(

内核模块无法调用libc,因为libc在用户空间下运行。
还有其他一些内核指定的API,如printk()可以使模块正常工作。
据我所知,libc是几个标准c函数obj的集合。
它应该存在一个集合(或库)来包含几个内核标准函数对象。
这样我就可以把我的内核模块和这些内核标准库链接起来工作了,对吗

简单地说,我的问题如下

在用户空间中:
aaa.o链接bbb.o以调用myfunc()
aaa.o链接libc.so以调用printf()

在内核空间中:
aaa.ko链接bbb.ko调用myfunc()?这是问题1
aaa.ko链接xxx以调用printk()?xxx叫什么,问题2


谢谢

内核模块只能调用内核函数(位于内核的固定部分)。他们没有也不能使用任何外部库

因此没有内核标准库(它是包含
printk
的内核本身)


从概念上讲,内核代码是用C语言编写的;它不使用任何C标准库函数(由于模糊的原因,Linux内核代码没有使用
-ffreestanding
gcc
)编译)

您会得到一个.ko文件,它是一个内核对象文件。GCC没有链接它。您插入它的内核在运行时执行此操作。

我对模块构建过程感到困惑。在编译时,由于我指定了内核头目录,GCC检查了我的模块所包含的头文件(例如init.h module.h)。在链接时,GCC检查我的模块调用的函数的定义(例如printk()),如果没有任何库向我的模块提供函数的定义,它如何能够传递而没有任何错误???我知道模块在“运行时”中调用内核函数。谢谢相关的|