驱动模块的加载
来源:互联网 发布:linux 打开一个目录 编辑:程序博客网 时间:2024/04/30 09:45
进入生成的目录, insmod ./hello.ko 装载驱动。
Module Size Used by
hello 9472 0
nls_iso8859_1 12032 0
nls_cp437 13696 0
vfat 18816 0
fat 58272 1 vfat
usb_storage 82880 0
isofs 39844 1
lsmod 列出所有驱动。lsmod 读取并分析 /proc/modules 文件。
cat /proc/modules
nls_iso8859_1 12032 0 - Live 0xe1bc6000
nls_cp437 13696 0 - Live 0xe1bba000
vfat 18816 0 - Live 0xe1bad000
fat 58272 1 vfat, Live 0xe1b50000
内核中已加载模块的信息存在于sys/module目录
进入/sys/module目录 tree -a 可以得到目录树:
usb_storage
| |-- drivers
| | `-- usb:usb-storage -> ../../../bus/usb/drivers/usb-storage
| |-- holders
| |-- initstate
| |-- notes
| | `-- .note.gnu.build-id
| |-- parameters
| | |-- delay_use
| | |-- option_zero_cd
| | `-- swi_tru_install
| |-- refcnt
| |-- sections
| | |-- .bss
| | |-- .data
| | |-- .exit.text
| | |-- .gnu.linkonce.this_module
| | |-- .init.text
| | |-- .note.gnu.build-id
| | |-- .parainstructions
| | |-- .rodata
| | |-- .rodata.str1.1
| | |-- .rodata.str1.4
| | |-- .smp_locks
| | |-- .strtab
| | |-- .symtab
| | |-- .text
| | |-- __bug_table
| | `-- __param
| `-- srcversion
l/drivers/hello# modinfo hello.ko
filename: hello.ko
alias: a simplest module
description: A simple Hello World Module
license: Dual BSD/GPL
author: Barry Song <21cnbao@gmail.com>
srcversion: 3FE9B0FBAFDD565399B9C05
depends:
vermagic: 2.6.28-11-generic SMP mod_unload modversions 586
modprobe挂载新模块以及新模块相依赖的模块modprobe我们常用的功能就是挂载模块,在挂载某个内核模块的同时,这个模块所依赖的模块也被同时挂载;这是于insmod挂载模块有区别的地方。当然modprobe也有列出内核所有模块,还有移除模块的功能;下在我们举个例子说一说咱们常用的功能和参数;
modprobe-codprobe-c可以查看modules的配置文件,比如模块的别名是什么等;
modprobe -l 是列出内核中所有的模块,包括已挂载和未挂载的;通过modprobe-l,
读文件:/lib/modules/`uname -r`/modules.dep
我们能查看到我们所需要的模块,然后根据我们的需要来挂载;
[root@localhostbeinan]#modprobe 模块名 注:挂载一个模块;
[root@localhostbeinan]#modprobe-r 模块名 注:移除已加载的模块,和rmmod功能相同;
ifneq ($(KERNELRELEASE),) # KERNELRELEASE 不为空,第二次进入时成立。
obj-m:=hello.o
hello-objs:=main.o add.o
else
KDIR:=/lib/modules/2.6.18-53/build
all :
make -C $(KDIR) M=$(PWD)modules #进入KDIR目录执行make modules
clean :
rm -f *.ko *.o
endif
内核模块参数 :在insmode 执行安装模块时在带在后面传进去。
module_param(name,type,perm) 参数名,参数类型,访问权限
perm 常见值:S_IRUGO :任何用户都对/sys/module中出现的该参数具有读权限
S_IWUSR :ROOT用户对/sys/module中出现的该参数具有读权限
int a=3;//初始化默认值。
module_param(a,int,S_IWUSER);
在内核中就可以使用此参数。
在A模块中实现了的 function必须使用EXPORT_SYMBOL导出它才能被其他模块调用,导出的列表在proc/kallbyms文件中。
EXPORT_SYMBOL(function);
内核模块与应用的差别在于 内核安装了之后,一直会驻留在内存中,作为一个服务,服务于将来的某一个请求,直到卸载
函数被调用。
printk(KERN_EMER," EMERGC");//包含打印级别
- 驱动模块的加载
- 加载驱动模块遇到的问题
- openwrt 驱动模块的编译与加载
- HelloWorld模块加载--驱动
- linux驱动模块的动态加载和静态加载
- *.ko驱动模块的动态加载,*.ipk应用层模块的动态加载,配置文件的拷贝
- camer驱动模块加载分析
- Ubuntu10.10下动态加载模块驱动的方法
- 加载驱动模块时Device or resource busy的解决方法
- linux内核驱动模块的编译及加载
- 加载驱动模块时Device or resource busy的解决方法
- linux内核驱动模块的编译及加载
- Linux块设备驱动的模块加载与卸载
- 【原创】Tiny6410驱动模块的构建、加载和卸载
- 简单的Linux 驱动模块编译,加载过程
- 让 Linux 启动时加载自己的驱动模块 .ko
- 让 Linux 启动时加载自己的驱动模块 .ko
- linux驱动入门---test驱动模块加载
- 黑马程序员五、集合框架Collection
- ubuntu --jdk1.6 安装
- hdu 4123 Bob’s Race 树形DP + 单调队列
- uva 10148 - Advertisement
- windows 7热点
- 驱动模块的加载
- hibernateTemplate的9个常用方法
- 2011-01-08 19:49 Oracle数据导入导出imp/exp sp2-0734
- Oracle权限
- C++标准转换运算符reinterpret_cast
- Cookie中value的设置问题
- Oracle数据库管理
- 如何在 Eclipse 中給args傳遞參數和使用命令行
- Oracle索引