是否可以使用模块扩展内置 Linux 内核功能?

Is it possible to extend built-in Linux kernel feature with a module?

我在嵌入式环境中使用 3.4.31+ Linux 内核,它内置了对采用 zlib 压缩方法的 SquashFs 的支持。现在我想在不替换内核的情况下添加对 xz 方法压缩的支持,而只是将其添加为模块。可能吗?

之后
  1. Select SquashFs 支持作为内核菜单配置中的模块
  2. 重新编译内核
  3. 在我的目标设备上保留原始内核,但更新 /lib/modules/3.4.31+
  4. 的所有内容
  5. 调用 modprobe squashfs

我明白了

# modprobe squashfs
modprobe: failed to load module squashfs (kernel/fs/squashfs/squashfs.ko): Cannot allocate memorycode

dmesg 显示:

kmem_cache_create: duplicate cache squashfs_inode_cache
[<c000e5e4>] (unwind_backtrace+0x0/0xf0) from [<c0077264>] (kmem_cache_create+0x4a4/0x514)
[<c0077264>] (kmem_cache_create+0x4a4/0x514) from [<bf011024>] (init_module+0x24/0x7c [squashfs])
[<bf011024>] (init_module+0x24/0x7c [squashfs]) from [<c0008840>] (do_one_initcall+0x11c/0x190)
[<c0008840>] (do_one_initcall+0x11c/0x190) from [<c0048c40>] (sys_init_module+0x36c/0x1874)
[<c0048c40>] (sys_init_module+0x36c/0x1874) from [<c00092e0>] (ret_fast_syscall+0x0/0x2c)

是否有解决此问题的方法来强制删除内置 SquashFs 支持?

它不是这样工作的,原始内核二进制文件已经包含 squashfs 代码作为非模块化组件。如果你想从内核中删除代码,那么你需要使用你刚刚编译的新内核(以及刚刚创建的模块)。