Bri*_*ian 3 makefile shared-libraries dynamic-linking linux-kernel
我想修改linux内核.
我想.so在文件中使用共享库(文件)中的函数kernel/panic.c.
不幸的是我不知道如何编译它.
当我把它放入Makefile我收到以下错误:
ld: attempted static link of dynamic object.
有没有办法将共享库文件放到Linux内核中,或者我需要重新编译我的库以获取目标文件.
将共享库链接到内核代码是不可能的(ELF共享对象是用户空间的东西,使用ld-linux(8) ...)你应该考虑制作一个内核模块(并使用modprobe(8)来加载它).读取可加载内核模块如何.
内核模块*.ko在概念上类似于共享对象,*.so但链接机制是不同的.
顺便说一下,你通常应该避免编写内核代码,而应该更喜欢编写应用程序代码 换句话说,修改内核通常是一个坏主意,并且不赞成.
此外,内核空间中可用的API与用户空间API(扩展C标准库和POSIX函数)不同.例如,内核模块(和内核代码)没有(因此无法调用)fopen或fprintf或fork; 内核是一个独立的C应用程序.另外,内核代码不能使用任何浮点运算!
用户级应用程序是使用与内核交互系统调用中列出的系统调用(2) (以及libc在使用它们,例如,用于printf或系统(3) ).内核代码(包括内核模块)不能直接使用系统调用(因为它们是由内核提供的,请参阅syscalls(2)).
另请阅读高级Linux编程(主要是关于应用程序编程)和操作系统:三个简单的部分(以获得更广泛的操作系统视图).
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |