易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux设备驱动开发详解 笔记4 Linux内核模块

modprobe命令比insmod命令强大,它在加载某模块时会同时加载该模块所依赖的其他模块。使用modprobe命令加载的模块若以“modprobe –r filename”的方式卸载将同时卸载其依赖的模块。
printk打印到var/log/messages
2.6内核中已加载的信息也存在于/sys/module目录下,加载hello.ko后,内核中将包含/sys/module/hello目录,该目录又包含一个refcnt文件和一个sections目录
/proc/kallsyms文件对应着内核符号表,它记录了符号以及符号所在的内存地址
#include<linux/init.h>
#include<linux/module.h>
 
MODULE_LICENSE("Dual BSD/GPL");
 
int add_integar(int a, int b)
{
    return a+b;
}
 
int sub_integar(int a, int b)
{
    return a-b;
}
 
EXPORT_SYMBOL(add_integar);
EXPORT_SYMBOL(sub_integar);
 
编译后将模块插入,可以从/pro/kallsyms文件中找出add_integar、sub_integar相关信息
cat /pro/kallsyms |grep integar
 
try_module_get()与module_put()的引入与使用与Linux2.6内核下的设备模型密切相关。2.6内核为不同类型的设备定义了struct module *owner域,用来指向管理此设备的模块。当开始使用某个设备时,内核使用try_module_get(dev->owner)去增加管理此设备的owner模块的使用计数;当不再使用此设备时,内核使用module_put(dev->owner)减少对管理此设备的owner模块使用计数。这样,当设备在使用时,管理此设备的模块将不能被卸载。只有设备不再被使用时,模块才允许被卸载
开发人员所写的驱动通常是支持某种具体设备的owner模块,对此设备owner模块的计数管理有内核更底层的代码(如总线驱动或是此类设备公用的核心模块)来实现,从而简化了设备驱动的开发
 
编译步骤:先进入Linux内核所在的目录,并编译出.o文件,运行MODPOST回生成临时的.mod.c文件,而后根据此文件编译出.mod.o,之后连接.o和.mod.o得到模块目标文件.ko,最后离开Linux内核所在目录
 
如果模块包含多个.c文件(如file1.c、file2.c),Makefile如下:
obj-m := modulename.o
module-objs := file1.o file2.o


相关文档:

Linux iptable文档

总览
用iptables -ADC 来指定链的规

,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX ......

深度挖掘Linux操作系统命令“man”

man是manual(手册)的缩写
man可以在不同的版本中使用,主要分为两类。Red Hat和许多其他基于RPM的版本使用传统的man程序,而基于Debian的版本使用一个名为man-db的软件包。
man(1)
在文本窗口中浏览文件的方式在普遍使用HTML和PDF的时代中似乎有些过时了,但在终端窗口中阅读文件仍有其优势。对于那些Linux开发者来 ......

arm linux 等待队列简单分析

Author-------Dansen-----xzd2734@163.com
wait_queue_head_t wait_q;
首先看看
wait_queue_head_t这个等待队列的结构
在wait.h中定义了这个结构
typedef struct
__wait_queue_head wait_queue_head_t;
struct __wait_queue_head {
 wq_lock_t
lock;
 struct list_head task_list;
};
# define wq_ ......

LINUX 进程间 信号

#include <iostream>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <signal.h>
using namespace std;
extern char **environ;
void signal_handle(int signal_no){
cout << "sign:" &l ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号