设为首页 加入收藏

TOP

Linux内核模块和Linux fs 与 sysfs
2014-11-24 12:58:02 来源: 作者: 【 】 浏览:0
Tags:Linux 内核 模块 sysfs

一 Linux 内核模块 :


1. 查找系统中加载的模块: lsmod ; 卸载模块命令 : rmmod ; 装载命令: insmod/modprobe(modprobe 会自动分析模块间的依赖关系);


2. 模块加载函数:利用__init 标识


static int __init ***_init(void)


{


................


}


module_init(***_init);


返回0表示加载成功, 失败则返回一些错误代码,参考


在加载函数中一般用于初始化硬件,申请资源.....


3. 模块卸载函数:利用__exit标识


static void __exit ***_exit(void)


{


.............


}


module_exit(***_exit);


注: 在卸载模块的函数中,一般需要完成以下的几件事情:


# 若模块加载函数中注册了***,则在模块卸载函数中需注销;


# 若在模块加载函数中动态申请了内存,则在此亦需要释放;


# 若在模块加载中申请了一些硬件资源(如:IRQ, DMA channel, I/O ,memory),则在此需释放;


4. 模块参数 : module_param(参数名, 参数类型, 参数读/写权限)


注: 可以利用上述的方法在加载模块时传递需要的参数。


5. 导出符号 : 记录了该符号以及该符号所在的内存地址。


可以使用:


EXPORT_SYMBOL(符号名);


EXPORT_SYMBOL_GPL(符号名);


该功能在内核中使用较多,只要导出该符号,则其他的模块在调用该符号时,只需声明则可;这有点类似于跨文件的函数间调用。


6. 模块声明与描述:


MODULE_AUTHOR(author);


MODULE_DESCRIPTION(description);


MODULE_VERSION(version_string);


MODULE_DEVICE_TABLE(table_info);


MODULE_ALIAS(alternate_name);


7. 模块的编译 :


下面演示一个 Makefile :


#Makefile for wm8350_rtc
obj-m := wm8350_rtc.o


all:
make -C ../../../linux-2.6.26 M=`pwd` modules


clean:
make -C ../../../linux-2.6.26 M=`pwd` clean
rm -f modules.orde


分析: -C 表示Linux内核所在的目录,需注意的是,这个目录是之前设置好的用来编译zImage的源码;


M 表示指定的需要编译成模块的代码源文件和Makefile 文件;


modules ----表示编译为内核模块。


二, Linux文件系统:


1. C中的文件操作: open , write, read, close,


2.在Linux的驱动开发中,需要关注的是如下两个结构:


1) file_operations :应用程序和 VFS(virtual FS)之间通过系统调用链接,而VFS 和普通设备之间则通过file_operation的成员函数(如: read ,write, open ,close ,ioctl ...)


file 结构体 :参考: /linux/include/linux/fs.h:



另外可以参考一下 file_operation 的描述:



2) inode : 包括文件访问权限,属主,组,大小,生成时间,访问时间,最后修改时间等...


inode的结构体定义也是在include/linux/fs.h


3. ps: 可以使用 cat /proc/devices 查询系统中注册的设备。


1. 目的: sysfs 显示设备驱动模型中各个模块间的层次关系: ls /sys ---可以看到其顶级目录 包括 :


block bus class devices firmware module power


其中: block ----显示块设备;


bus ----显示系统中所有的总线;


class ----显示系统中的设备类型;


device --显示系统中所有的设备并根据设备挂接的总线类型组织成层次关系;


drivers ---包括内核中所有已注册的设备驱动程序;


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android开发环境离线搭建(jdk-6u2.. 下一篇Android文件访问权限问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python中文网 - 人生 (2025-12-24 18:49:47)
·【整整648集】这绝对 (2025-12-24 18:49:44)
·Python超详细一条龙 (2025-12-24 18:49:42)
·【超详细】JDK 下载 (2025-12-24 18:19:32)
·Java_百度百科 (2025-12-24 18:19:29)