怎么知道加载了哪些kernal module ?
时间:2004-04-06
来源:互联网
作者: incarnation 发布时间: 2004-04-06
另:你的头像不怕人家告你侵权?
http://www.tianyaclub.com
作者: Eg_zm 发布时间: 2004-04-06
另:还没找到那图 :o ,关于版权问题,:o :o
作者: incarnation 发布时间: 2004-04-06
我也在极力找着答案,可是怎么也找不到,郁闷
作者: 216 发布时间: 2004-04-06
作者: werix 发布时间: 2004-04-06
snd_ich.ko AND snd_pcm.ko
kldstat能知道一个模块的状态,#kldstat MODULE_NAME是知道该模块的状态
其实我这贴的目的是想知道一个模块名,然后在程序中使用用modstat,OR kldstat()。
找到了一个modfind()的使用的例子,modfind()的作用是返回一个模块的modid.
这程序来自:
/usr/share/examples/kld/syscall/test/call.c
#include <stdio.h> #include <sys/syscall.h> #include <sys/types.h> #include <sys/module.h> static void usage (void); static void usage (void) { fprintf (stderr, "call syscall-number\n"); exit (1); } int main(int argc, char **argv) { char *endptr; int syscall_num; struct module_stat stat; stat.version = sizeof(stat); modstat(modfind("syscall"), &stat);/*modfind()里的参数是一个模块的名字*/ syscall_num = stat.data.intval; return syscall (syscall_num); }
自己写了个
#include <sys/param.h> #include <sys/module.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(void) { struct module_stat stat ; if(modstat(modfind("syscall"),&stat)<0) { printf("modstat error\n"); return(1); } printf("version is %d,name is %s,refs is %d ,modspecific_t is %s \n", stat->version,stat->refs,stat->data); return(0); }
但我设置为syscall,snd_ich.ko snd_pcm.ko kernel都输出:modstat error , why ?
如果不能在BSD版解决,请版主把整个主题复制到程序设计版,谢谢!!
作者: incarnation 发布时间: 2004-04-07
bash-2.05b#kldload /usr/share/examples/kld/syscall/module/syscall.ko bash-2.05b#kldstat Id Refs Address Size Name 1 9 0xc0400000 5e16d8 kernel 2 1 0xc09e2000 51ac8 acpi.ko 3 1 0xc2235000 19000 linux.ko 4 1 0xc259d000 2000 syscall.ko |
bash-2.05b# ./call |
系统里加载,call它当然不会顺利。
为了更好的理解,最好的办法是复制几个syscall.c( syscall1, syscall2, syscall3 etc...) 编译好后统统加载到内核里,再改你的程序,打印每一个syscall的ID,name,refs, version,data .... 奇怪的是我以linux.ko,acpi.ko 用call.c都说找不到。。。。其它我加载的却可以。。。
另外你程序有问题,应该是stat.version ...而不是 stat->version。。。
可惜明天我出门,下星期二后才会来,咱们回来再联系。。。
作者: werix 发布时间: 2004-04-07
在/modules/试了,难到在/dev/ *
作者: incarnation 发布时间: 2004-04-07
Good Luck!^_^
作者: Freebird 发布时间: 2004-04-07
作者: incarnation 发布时间: 2004-04-13
最初由 Freebird 发表 Use kldstat to display the dynamic modules you have loaded.Under FreeBSD,the loadable modules are in this directory:/boot/kernel,you can load any of those by the command kldload xxxx.ko.By the way,Modules must have an extension of .ko. Good Luck!^_^ |
他的问题不是怎么调用模块,而是用examples里的范例后,可以调用一个(例如syscall.c)syscall的模块,再用modstat,modfind等库函数去显示这个syscall模块的各个信息(范例是call.c)。问题在于如果我们自己编译几个内核模块,加载以后,可以用modstat,modfind看到这些模块的信息,但是我们不能用modstat, modfind显示系统里事先加载的模块,例如linux.ko,acpi.ko等等。我当时写了几个小程序去测试,也没搞清楚为什么会这样,因为放假出游就放下了。
另外incarnation说的也不清楚,我猜了半天才明白他要说什么。。。真不明白怎么
问问题都不说明白了。。。
作者: werix 发布时间: 2004-04-13
bash-2.05b# kldstat Id Refs Address Size Name 1 7 0xc0400000 5e16d8 kernel 2 1 0xc09e2000 51ac8 acpi.ko 3 1 0xc223a000 19000 linux.ko bash-2.05b# kldload /usr/share/examples/kld/syscall/module/mycall.ko bash-2.05b# kldstat Id Refs Address Size Name 1 8 0xc0400000 5e16d8 kernel 2 1 0xc09e2000 51ac8 acpi.ko 3 1 0xc223a000 19000 linux.ko 4 1 0xc253a000 2000 mycall.ko |
bash-2.05b# kldload /usr/share/examples/kld/syscall/module/syscall.ko bash-2.05b# kldstat Id Refs Address Size Name 1 9 0xc0400000 5e16d8 kernel 2 1 0xc09e2000 51ac8 acpi.ko 3 1 0xc223a000 19000 linux.ko 4 1 0xc253a000 2000 mycall.ko 5 1 0xc253c000 2000 syscall.ko |
bash-2.05b# ./call linux modules modfind is -1 linux modstat -1, ID 671404961 , name ì¿¿ mycall modules modfind is 326 mycall modstat is 0, ID 326 , name mycall syscall modfind is 327 syscall modstat is 0, ID 327 , name syscall |
可以看出用一样的函数去显示信息,mycall,syscall都可以,但是linux.ko却是回false值
作者: werix 发布时间: 2004-04-13
作者: incarnation 发布时间: 2004-04-29
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28