Linux驱动开发
gwKismit
不要想太多,只要有一点灵感就赶紧行动吧,没有什么失败是不可承受的,没有什么成功是一触而就的!
展开
-
驱动模板
#include#include#include#include#includeMODULE_LICENSE("GPL"); //声明本驱动遵循GPL协议/*加载模块*/static int XXX_init() { return 0;}/*卸载模块*/static void XXX_exit(){原创 2016-04-11 21:45:20 · 340 阅读 · 0 评论 -
中断分层
一。中断部分1.中断申请函数 request_irqint request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)输入参数:中断号 中断处理函数 中断类型 设备名字 返回给中断处理函数的设备号成功返回0 失败返回错误代码原创 2016-07-21 17:15:09 · 342 阅读 · 0 评论 -
定时器timer
1.定义一个timer,定时器中断函数funstruct timer_list timer;void fun();2.先初始化timerinit_timer(&timer);then 对timer的相关参数赋值:timer.function = fun;timer.expires = jiffies + TIMER_DELAY;3.注册定时器ad转载 2016-07-21 17:14:13 · 353 阅读 · 0 评论 -
设备驱动模型:总线bus_type 设备device 驱动driver
一.总线 bus_type数据结构struct bus_type{const char *name; //总线类型的名称struct bus_attribute *bus_attrs;struct device_attribute *dev_atrrs;struct driver_attribute *drv_attrs;int (*match) (stru原创 2016-07-14 16:13:34 · 1062 阅读 · 0 评论 -
中断与时钟机制
一.中断 IRQ中断安装与释放1.申请中断线int request_irq(unsigned int irq,irq_handler_t handler,unsigned long irqflags,const char *devname,void *dev_id) 中断号 中断处理函数 中断触发方式 设备名称 共用中断信号线时使用到(一般设备为NULL)一般在init函数中设置原创 2016-07-13 17:21:24 · 532 阅读 · 0 评论 -
printk 消息打印级别
KERN_EMERG 紧急消息,常常是那些崩溃前的消息KERN_ALTER 需要立即动作的情形KERN_CRIT 严重情况,常常与严重的硬件或者软件失效有关KERN_ERR 报告错误使用,常用于报告硬件故障KERN_WARNING 有问题的警告,这些情况自己不会引起系统的严重问题KERN_NOTICE 正常情况,警告一些安全情况原创 2016-07-13 17:20:26 · 323 阅读 · 0 评论 -
阻塞和非阻塞
1. 非阻塞non-block --selectint select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout)参数:最大fd 可读 可写 异常 超时超时参数:秒 微妙struct timeval{ long tv_sec;long tv原创 2016-07-13 17:19:03 · 421 阅读 · 0 评论 -
完成量:线程同步
作用:一个线程发送信号通知另一个线程开始执行某个任务#include struct completion{unsigned int done;wait_queue_head_t wait;}done 0:等待 >0:可执行wait 等待队列定义和初始化完成量定义struct completion com;初始化init原创 2016-07-13 17:16:52 · 303 阅读 · 0 评论 -
锁机制:自旋锁spinlock和信号量semaphore
作用:避免竞争一. 自旋锁使用步骤:1.定义自旋锁spinklock_t lock;2.初始化自旋锁spin_lock_init(&lock);3.获得自旋锁spin_lock(&lock);4.释放自旋锁spin_unlock(&lock);spin_lock [如果获得lock则立即返回,否则将自旋在那里直到其他线程释放]临界资源原创 2016-07-13 17:15:39 · 1667 阅读 · 0 评论 -
file_operation
struct file_operations ***_ops={ .owner = THIS_MODULE, .llseek = ***_llseek, .read = ***_read, .write = ***_write, .ioctl = ***_ioctl, .open = ***_open, .release = ***_release, }原创 2016-07-13 17:13:37 · 253 阅读 · 0 评论 -
platform_driver平台设备驱动模型
一。平台设备 platform_device结构struct platform_device {const char * name; /*平台设备的名字,与驱动的名字对应*/int id; /*一般为-1*/struct device dev; /*设备结构,platform_device 派生于device*/u32 num_resources; /*设备使用的资原创 2016-07-21 17:16:23 · 496 阅读 · 0 评论