1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| /* * @Author: Fanxiaominghang 2309200691@qq.com * @Date: 2025-02-06 16:11:36 * @LastEditors: Fanxiaominghang 2309200691@qq.com * @LastEditTime: 2025-02-06 22:37:29 * @FilePath: /nose/study/hello.c * @Description: */ #include<linux/module.h> #include<linux/moduleparam.h>
#define CNT 1 static int cnt=CNT; static char *fff="hi,fmh\n"; static int arr[]={1,2,3,4,5,6}; static int nums=sizeof(arr)/sizeof(int); /*变量传参数 直接变量=要改的值 sudo insmod hello.ko cnt=3 fff=fuck arr=444,4,5 在sys/module/hello下会有一个parameters文件夹 */ module_param(cnt,int,S_IRUGO); module_param(fff,charp,S_IRUGO); module_param_array(arr,int,&nums,S_IRUGO);
/*符号导出 分着插入 有导出时候,会生成一个Module.symvers文件,可以查看导出符号 也可以在/proc/kallsyms下查看内核符号,但需要过滤 在sys/module/hello下会有一个holders文件夹 */ EXPORT_SYMBOL(fff);
static int __init hello_init(void){ //printk(KERN_INFO "\n"); printk(KERN_INFO "HELLO\n"); printk(KERN_INFO "%s",fff); int i; for ( i = 0; i < cnt; i++) { printk(KERN_INFO "%d:%s",i,fff); } for ( i = 0; i < 6; i++) { printk(KERN_INFO "%d",arr[i]); } printk(KERN_INFO "nums:%d\n",nums); return 0; } static void __exit hello_exit(void){ printk(KERN_INFO "BYE\n"); }
module_init(hello_init); module_exit(hello_exit);
MODULE_LICENSE("GPL"); MODULE_AUTHOR("fff"); MODULE_DESCRIPTION("A simple Linux module"); MODULE_VERSION("0.1");
/* 安装头文件 fxh@fxh-virtual-machine:~/drive/nose/study$ uname -a Linux fxh-virtual-machine 5.15.0-130-generic #140~20.04.1-Ubuntu SMP Wed Dec 18 21:35:34 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
fxh@fxh-virtual-machine:~/drive/nose/study$ sudo apt-get install linux-headers-5.15.0-130 [sudo] fxh 的密码: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 注意,根据正则表达式 'linux-headers-5.15.0-130' 选中了 'linux-headers-5.15.0-130-generic' linux-headers-5.15.0-130-generic 已经是最新版 (5.15.0-130.140~20.04.1)。 linux-headers-5.15.0-130-generic 已设置为手动安装。 升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 186 个软件包未被升级。 */
/* insmod 加载模块 lsmod 查看模块,名字为makefile中的 dmesg 查看内核打印 rmmod 移除模块 */
/* 由于Linux下皆是文件,所以通过文件系统用户可以直接查看 每加载一个模块就会在sys/module/下生成对应的文件夹 */
|