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

时间:2014-04-02 17:33:28

标签: c linux linux-kernel kernel kernel-module

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

简要地说,我的问题如下......

用户空间中的


aaa.o链接bbb.o来调用myfunc()
aaa.o链接libc.so以调用printf()

内核空间中的


aaa.ko链接bbb.ko调用myfunc()?这是问题1 aaa.ko链接xxx来调用printk()?什么是xxx,问题2

谢谢!

2 个答案:

答案 0 :(得分:7)

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

所以没有内核标准库(内核本身包含printk)。

从概念上讲,内核代码采用C的freestanding方言;它不使用任何C标准库函数(出于不明原因,Linux内核代码未编译为-ffreestanding dialect optiongcc

答案 1 :(得分:2)

你得到一个.ko文件,它是一个内核对象文件。海湾合作委员会没有链接它。你插入它的内核在运行时会这样做。