首页 > 其他分享 >使用fpm 构建一个kernel module rpm包

使用fpm 构建一个kernel module rpm包

时间:2023-04-29 09:12:42浏览次数:54  
标签:kernel depmod 模块 conf fpm modules module https

昨天参考社区的示例,开发了一个简单的kernel 模块,尽管我们可以通过insmod 进行模块安装,但是对于实际的分发是很不方便的
比较推荐的做法是制作一个rpm包,方便模块的分发以及共享

一些问题

  • 模块的安装位置
    一般我们外部开发的模块都在/lib/modules/${uname}\extra 目录下,之后需要执行depmod 进行依赖的更新
  • 模版的加载处理
    默认kernel 包含了模版加载的处理,配置在/etc/depmod.d/*.conf 下边,具体查找的为,实际上也会依赖depmod 进行依赖的更新
 
#
# depmod.conf
#
 
# override default search ordering for kmod packaging
search updates extra built-in weak-updates
  • 模版的开机自自动
    开机自启动会通过modules-load.d 配置加载,指定模块名称就可以了
  • kernel 升级对于模版的影响
    上边也说了,默认的安装模式依赖内核路径,不是很方便,weak-updates 是一种解决方法,通过兼容测试的,然后添加软连接

以上问题解决方法

实际上,linux 修通支持通过不同的配置进行模块的位置配置,比如通过自定义depmod.d 可以知道如何加载我们的模块,通过自定义modules-load.d
可以解决我们开机自启动的问题,因为指定了不同的位置,我们的模块就和系统的内核名称不依赖了,兼容相对比较好做了

基于fpm 的kernel 模块构建

  • 一些问题
    我们的模块安装完成之后,需要更新依赖(通过depmod),所以我们开发的rpm 需要在然后完成之后运行depmod 命令
  • 参考构建命令
 
fpm -s dir -t rpm -n hello_world_module --after-install=$PWD/post_install.sh --rpm-os linux -v v1.0-centos7 \
  ./build/hello_world.ko=/lib/modules/mymod/hello_world.ko \
  ./dalong.conf=/etc/modules-load.d/dalong.conf  \
  ./mymod.conf=/usr/lib/depmod.d/mymod.conf 

简单说明:
post_install.sh 进行依赖更新的

 
#!/bin/sh
depmod

dalong.conf 开机模块加载的

hello_world

/mymod.conf 配置自定义模块加载的

search external
external * /lib/modules/mymod

说明

完整demo 我已经放github 上了,大家可以参考使用,实际上对于kernel module 的打包还有基于官方标准的玩法可以参考学习

参考资料

https://fpm.readthedocs.io/en/v1.14.0/cli-reference.html
https://www.cnblogs.com/rongfengliang/p/17362946.html
https://www.freedesktop.org/software/systemd/man/modules-load.d.html
https://man7.org/linux/man-pages/man8/modprobe.8.html
https://man7.org/linux/man-pages/man5/depmod.d.5.html
https://unix.stackexchange.com/questions/229521/weak-modules-from-module-init-tools-directory
https://github.com/rongfengliang/kernel-module-learning/releases/tag/v1.0.0
https://access.redhat.com/solutions/3536351
https://wiki.centos.org/HowTos/BuildingKernelModules

标签:kernel,depmod,模块,conf,fpm,modules,module,https
From: https://www.cnblogs.com/rongfengliang/p/17363551.html

相关文章

  • [oeasy]python0141_自制模块_module_reusability_复用性
    自制包内容回忆上次内容上次导入了外部的py文件importmy_module导入一个自己定义的模块 可以使用my_module中的变量不能直接使用my_module.py文件中的变量只要加my_module.作为前缀就可以  直接导入导入变量、函数frommy_mo......
  • Linux kernel 模块开发&构建学习
    主要是学习下kernel模块的玩法,代码来自社区简单kernel代码hello_world.c#include<linux/init.h>#include<linux/module.h>MODULE_LICENSE("DualBSD/GPL");staticinthello_init(void){printk(KERN_ALERT"Hello,world\n");......
  • [未解决] Internal server error: loadModule is not a function
    [vite]Internalservererror:loadModuleisnotafunctionPlugin:commonjsFile:E:/project/xxxx/knockout-es5/knockout-es5.min.jsatanalyzeRequiredModule(E:\project\xxxx\node_modules\@rollup\plugin-commonjs\dist\cjs\index.js:680:13)......
  • Python relative import local package module file All In One
    PythonrelativeimportlocalpackagemodulefileAllInOne$tree└──project├──package1│├──module1.py│└──module2.py└──package2├──__init__.py├──module3.py├──module4.py......
  • How to get Linux kernel Information using the command line All In One
    HowtogetLinuxkernelInformationusingthecommandlineAllInOne如何使用命令行获取Linux内核信息uname#macOS$uname-aDarwinxgqfrms-mm.local22.2.0DarwinKernelVersion22.2.0:FriNov1102:08:47PST2022;root:xnu-8792.61.2~4/RELEASE_X86_64x......
  • VirtualBox 7.0.8发布:初步支持Linux Kernel 6.3
    甲骨文于发布了VirtualBox7.0.8版本更新。VirtualBox是一款开源、免费和跨平台的虚拟化工具,适用于GNU/ Linux、macOS和Windows平台。OracleVMVirtualBox中文版是一款甲骨文公司旗下的免费开源轻量级虚拟机软件.它主要优势是完全免费,性能稳定,可以在Linux/Win......
  • VirtualBox 7.0.8发布:初步支持Linux Kernel 6.3
    甲骨文于发布了VirtualBox7.0.8版本更新。VirtualBox是一款开源、免费和跨平台的虚拟化工具,适用于GNU/ Linux、macOS和Windows平台。OracleVMVirtualBox中文版是一款甲骨文公司旗下的免费开源轻量级虚拟机软件.它主要优势是完全免费,性能稳定,可以在Linux/Win......
  • VirtualBox 7.0.8发布:初步支持Linux Kernel 6.3
    甲骨文于发布了VirtualBox7.0.8版本更新。VirtualBox是一款开源、免费和跨平台的虚拟化工具,适用于GNU/ Linux、macOS和Windows平台。OracleVMVirtualBox中文版是一款甲骨文公司旗下的免费开源轻量级虚拟机软件.它主要优势是完全免费,性能稳定,可以在Linux/Win......
  • 【win10】No module named “Crypto”
    1、问题  下载视频解析的时候报错Nomodulenamed“Crypto”,已经pip安装  2、解决pipuninstallcryptopycryptodomepipinstallpycryptodome pycrypto和crypto是同一个库,crypto在python中又被称为pycrypto,它是一个第三方库,但是已经停止更新了,所以不建议大......
  • Spring cloud:分布式module
     新增一个业务模块,统一将业务模块放在hc-modeules下在resources资源目录下新增application-properties.yml文件 该文件用来配置注册中心、配置中心信息等..在pom.xml文件添加jar包的依赖以及配置指向的父级<parent> <groupId>com.github.pig</groupId> <artifactId>pig-modu......