链接linux内核中的共享库

Bri*_*ian 3 makefile shared-libraries dynamic-linking linux-kernel

我想修改linux内核.

我想.so在文件中使用共享库(文件)中的函数kernel/panic.c.

不幸的是我不知道如何编译它.

当我把它放入Makefile我收到以下错误:

ld: attempted static link of dynamic object.

有没有办法将共享库文件放到Linux内核中,或者我需要重新编译我的库以获取目标文件.

Bas*_*tch 5

将共享库链接到内核代码是不可能的(ELF共享对象是用户空间的东西,使用ld-linux(8) ...)你应该考虑制作一个内核模块(并使用modprobe(8)来加载它).读取可加载内核模块如何.

内核模块*.ko在概念上类似于共享对象,*.so链接机制是不同的.

顺便说一下,你通常应该避免编写内核代码,而应该更喜欢编写应用程序代码 换句话说,修改内核通常是一个坏主意,并且不赞成.

此外,内核空间中可用的API与用户空间API(扩展C标准库POSIX函数)不同.例如,内核模块(和内核代码)没有(因此无法调用)fopenfprintffork; 内核是一个独立的C应用程序.另外,内核代码不能使用任何浮点运算!

用户级应用程序是使用与内核交互系统调用中列出的系统调用(2) (以及libc在使用它们,例如,用于printf系统(3) ).内核代码(包括内核模块)不能直接使用系统调用(因为它们是由内核提供的,请参阅syscalls(2)).

另请阅读高级Linux编程(主要是关于应用程序编程)和操作系统:三个简单的部分(以获得更广泛的操作系统视图).