由于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
谢谢!
答案 0 :(得分:7)
内核模块只能调用内核函数(它们位于内核的固定部分)。他们没有也不能使用任何外部库。
所以没有内核标准库(内核本身包含printk
)。
从概念上讲,内核代码采用C的freestanding方言;它不使用任何C标准库函数(出于不明原因,Linux内核代码未编译为-ffreestanding
dialect option到gcc
)
答案 1 :(得分:2)
你得到一个.ko文件,它是一个内核对象文件。海湾合作委员会没有链接它。你插入它的内核在运行时会这样做。