gpt4 book ai didi

linux-kernel - 在linux内核中链接共享库

转载 作者:行者123 更新时间:2023-12-04 03:58:04 33 4
gpt4 key购买 nike

我想修改linux内核。

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

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

当我将它放入 Makefile 时,我收到以下错误:

ld:尝试动态对象的静态链接

有没有办法将共享库文件放入 Linux 内核,或者我是否需要重新编译我的库以获得目标文件。

最佳答案

不可能将共享库链接到内核代码(ELF 共享对象是用户空间的东西,使用ld-linux(8) ...)你应该考虑制作一个kernel module (并使用 modprobe(8) 加载它)。阅读Loadable Kernel Module HowTo .

内核模块 *.ko 在概念上类似于共享对象 *.solinking机制不同。

顺便说一句,您通常应该避免编写内核代码,而应该更喜欢编写应用程序代码。换句话说,修改内核通常不是一个好主意,而且是不受欢迎的。

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

Userland 应用程序正在使用 system calls 与内核交互列于 syscalls(2) (libc 正在使用它们,例如 printfsystem(3))。内核代码(包括内核模块)不能直接使用系统调用(因为它们由内核提供,参见 syscalls(2))。

另请阅读 Advanced Linux Programming (主要是关于应用程序编程)和 Operating Systems: Three Easy Pieces (以更广泛地了解操作系统)。

关于linux-kernel - 在linux内核中链接共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31928255/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com