1. 功能:创建以个等待队列头 2. 函数原型 #define DECLARE_WAIT_QUEUE_HEAD (name)                            /     wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)         #define __WAIT_QUEUE_HEAD_INITIALIZER (name) {                    /     .lock       =…
linux驱动的入口函数module_init的加载和释放 http://blog.csdn.net/zhandoushi1982/article/details/4927579 void free_initmem(void) { if (!machine_is_integrator() && !machine_is_cintegrator()) { free_area((unsigned long)(&__init_begin), (unsigned long)(&__i…
驱动注册的probe函数 probe函数在设备驱动注册最后收尾工作,当设备的device 和其对应的driver 在总线上完成配对之后,系统就调用platform设备的probe函数完成驱动注册最后工作.资源.中断调用函数以及其他相关工作.下面是probe被调用的一些程序流程. 从driver_register看起: [cpp] view plain int driver_register(struct device_driver * drv) { klist_init(&drv->klis…
本文转载自:http://blog.csdn.net/zhandoushi1982/article/details/4927579 就像你写C程序需要包含C库的头文件那样,Linux内核编程也需要包含Kernel头文件,大多的Linux驱动程序需要包含下面三个头文件: #include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>其中,init.h 定义了驱动的初始化和退出相关的函数,k…
前段时间在kernel 添加了 USB to LAN 模块 AX88772B 的驱动. 根据相关添加解析一下 usb_register_driver 函数 drivers/net/usb/asix.c 1677 static int __init asix_init(void) 1678 { 679 return usb_register(&asix_driver); //---> usb注册 1680 } 1681 module_init(asix_init); include/linux…
(一)解析class_device_create函数   (二)当我们使用class_create创建一个类之后我们就可以使用class_device_create函数在这个类下面创建一个设备了,class_create创建查看004_linux驱动之_class_create创建一个设备类   (三)class_device_create函数原型 struct class_device *class_device_create(struct class *cls,struct class_de…
(一)学习linux驱动之初,对ioremap函数的个人理解 (二)博客:实验探究 ioremap 这篇文章作者通过验证来阐述自己的观点,个人觉得挺好的 (三)函数原型 基本简介 void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) void *ioremap(unsigned long phys_addr, unsigned long size) 入口: phys_addr:要映射的…
(一)解析file_operations函数 解析002_linux驱动之_register_chrdev注册字符设备中的问题 (二) 1. file_operations结构原型 2. 使用举例   (三)从上面的原型可以看出file_operations函数有很多类型,下面将解析一部分 1. 以.open为例: 当应用程序使用open函数打开这个设备驱动时候,.open中的first_drv_open函数就会被调用,其它的也是一样   2. 安装驱动程序时候001中说明,将主设备号和file…
2.4.1 内存申请和释放 include/linux/kernel.h里声明了kmalloc()和kfree().用于在内核模式下申请和释放内存.    void *kmalloc(unsigned int len,int priority);    void kfree(void *__ptr); 与用户模式下的malloc()不同,kmalloc()申请空间有大小限制.长度是2的整次方.可以申请的最大长度也有限制.另外kmalloc()有priority参数,通常使用时可以为GFP_KER…
1. request_irq()函数原型 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id)   2.  功能:注册中断服务函数 * @irq:要申请的硬件中断号 * @handler: IRQ发生时要调用的函数 * @irqflags:中断类型标志 * @devname:声明设备的ascii名称 * @dev_id:…