【问题标题】:Why does compiling the Linux kernel require a lot of storage space?为什么编译Linux内核需要很大的存储空间?
【发布时间】:2020-08-31 05:24:11
【问题描述】:

我正在尝试在自定义 Linux 内核上实现系统调用,如本教程 here 中所述。
我的问题是:

  1. 为什么在实现新的系统调用时必须编译新的自定义内核?首次安装时是否可以向原始内核添加系统调用?
  2. 为什么编译Linux内核的过程会占用大量空间? (在我的情况下最多 20GB)

【问题讨论】:

    标签: linux linux-kernel operating-system system-calls


    【解决方案1】:

    为什么我们在实现新的系统调用时必须编译一个新的自定义内核?

    因为不可能将新的系统调用热补丁到正在运行的内核中。同样,如果不修改其源代码,就不可能向二进制软件添加新功能。正确执行此操作的唯一方法是获取内核源代码,对其进行修改、配置,然后将其编译为全新的内核。

    是否可以在首次安装时向原始内核添加系统调用?

    没有。您的“原始内核”已经编译在您的特定发行版自动为您安装的包中。

    为什么编译Linux内核的过程会占用大量空间?

    因为您很可能会编译很多无用的驱动程序。 Linux 内核为各种设备提供了数千种不同的驱动程序。如果你做一个完整的编译,你会编译很多不需要的东西。你可以做的是:

    1. 从当前内核复制配置,以便在编译时保持相同。请参阅this post 了解更多信息。
    2. 或者使用make localmodconfig 配置内核,它只允许编译当前加载到系统中的模块。

    【讨论】:

    • 有可能。至少有两个竞争项目可以即时修补内核。问题是这不是针对最终用户群。
    • @0andriy 当然有可能,我可以很好地编写一个在内核中注入新代码的模块。不过,这根本不是添加新系统调用的预期方式,而是一种 hack,这就是我试图传达的内容。
    • 这不是无法避免的;原则上,可以让内核提供定制点,这样就可以在不重新构建的情况下添加新的系统调用。这是个好主意吗?看起来 linux 开发人员的回答是否定的(或者至少其他事情更重要)。
    猜你喜欢
    • 2012-12-28
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多