linuxko加载在el0

linuxko加载在el0,第1张

linuxko加载在el0,ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载。

二、优点

(1)这样可以缩小内核体积;

(2)使用方便。

三、.ko文件一般的用处

(1)作为一个功能模块,需要使用时,直接插入运行就行。如在imx6上连接模拟摄像头,先运行模拟摄像头对应的驱动模块 camera.ko文件,然后对应的工程执行文件运行就行。

linux内核支持动态加载模块,内核模块以.ko为后缀,在Linux系统中,内核模块放在/lib/modulex/x.x.x目录中,其中x.x.x为linux版本号

加载模块

insmod xxx.ko

如果带参数 insmod xxx.ko a=1

卸载模块

rmmod xxx.ko

支持的数据类型

bool :布尔类型

invbool:颠倒了值的bool类型

charp :字符指针类型,内存为用户提供的字符串分配

int:整型

long :长整型

short :短整型

uint :无符号整型

ulong :无符号长整型

ushort :无符号短整型

内核模块源码Makefile编写格式和linux源码的格式一样

在OpenWrt系统中,内核模块编译和应用层的package编译类似

make package/模块名/compile V=s

比如:

make package/hello_kernel/compile V=s

编译完成后会生成.ko文件,目录文件在build_dir中,但和应用层的build目录有点区别,内核模块的package放在linux目录,如(X86平台):

build_dir/target-x86_64_musl/linux-x86_64/

将编译完成的ko文件传输到OpenWrt系统中,注意编译平台和开发板平台的系统架构要一致。

假设模块的源文件为hello.c,源码如下:

使用该文件编译内核模块。

正常情况下,Makefile文件内容如下:

执行 make 命令,生成hello.ko文件。

执行 sudo insmod hello.ko 命令,安装该模块。

执行 lsmod 命令,查看安装的模块。就会看到第一行的就是hello模块。

但是,如果想自定义模块名称为 xmodule ,而不是默认的 hello ,如何实现呢?方法如下:

在Makefile中重命名obj-m并将obj-m的依赖关系设置为原始模块(hello)

修改后的Makefile文件内容如下:

将obj-m设置为 xmodule .o,并使 xmodule .o依赖于 hello .o.

执行 make 命令后,生成 xmodule .ko, 而不是 hello .ko,

安装命令: sudo insmod xmodule.ko

查看命令: lsmod ,就会看到被安装名为 xmodule 的模块。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8365172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存