在linux内核中使用静态库

Posted

技术标签:

【中文标题】在linux内核中使用静态库【英文标题】:Use static library in linux kernel 【发布时间】:2017-03-03 08:50:03 【问题描述】:

我正在为 Linux 内核开发一个模块。它在系统调用中为我的伙伴调用导出了一些函数(我的伙伴在 Linux 内核中修改了系统调用源代码)。 我可以为我的模块构建静态库,只需为我的合作伙伴发送库、头文件吗?

【问题讨论】:

可以,为什么不呢? 你意识到静态库基本上只是一个目标文件,对吧?或者你很好奇,如何在内核 Makefile 中链接静态库? 你的意思是我可以在 Linux 内核中使用像 *.o 文件这样的库吗? 不清楚为什么您不能将源代码发送给您的合作伙伴,甚至为什么您不共享同一个 Git 存储库。 @rum 不,我的意思是静态库只是一个存档的目标文件。而且你伙伴的代码当然可以在链接阶段与之链接,这只是正确准备他的Makefile的问题。但它在内核开发人员中并不常用,所以我不推荐它。 0andriy 告诉你应该如何以最合适的方式完成它:只需与你的合作伙伴分享你的 git repo(其中包含你的模块的源代码)。如果您的模块是专有的,并且您不想与您的合作伙伴共享代码(如果是这样就非常糟糕),只需将构建的 .ko 模块发送给他。 【参考方案1】:

通常,我们将它们作为内核模块本身提供......而不是库......不知道你的确切意思。您想运行“ar”命令并将其构建为静态库格式并在编译时链接它吗?

从未尝试过,但没有人在内核空间中这样做...

如果需要,可以创建单独的模块,即库。

如您所知,printk、strcpy、memcpy 和所有这些都在内核空间中可用,但据我所知,没有人将其链接为“库格式”。

【讨论】:

内核无法为静态库加载 *.a 文件。内核无法加载 *.so 文件。将库交付给内核的唯一方法是 *.ko

以上是关于在linux内核中使用静态库的主要内容,如果未能解决你的问题,请参考以下文章

请教nginx是怎么处理静态文件的

如何在linux内核以静态加载方式添加usb设备

Linux基础IO篇

静态插入linux内核模块

linux静态路由表和动态路由表在内核吗

Linux内核的启动流程之基础概念