Linux驱动-LCD驱动

一、框架分析:我们先来分析一下核心层的代码fbmem.c:① 入口函数fbmem_init:fbmem_init(void) { create_proc_read_entry("fb", 0, NULL, fbmem_read_proc, NULL); if (register_chrdev(FB_MAJOR,"fb",&fb_fops)) printk...
阅读(173) 评论(0)

Linux驱动-platform总线设备驱动

一、简介:      platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则platform_driver。Linux 2.6的设备驱动模型中,把I2C、RTC、LCD等都归纳为platform_device。      总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线...
阅读(218) 评论(0)

Linux驱动-输入子系统框架

部分内容参考Linux学习之路,表示感谢. 输入子系统一般将该类驱动划分为3部分,事件处理层为纯软件的东西,设备层涉及底层硬件,它们通过核心层建立联系,对外提供open write等接口。一、核心层 input.c向外界提供接口 ① 在 input_init 中注册了字符设备驱动 err = register_chrdev(INPUT_MAJOR, "input", &input_fops);...
阅读(415) 评论(0)

字符设备驱动-定时器

当我们用阻塞的方式来驱动按键时: 按下按键由于机械按键的波动性,会导致中断处理函数发生多次。 我们可以采用定时器来解决此bug: Makefile: KERN_DIR = /work/system/linux-2.6.22.6all: make -C $(KERN_DIR) M=`pwd` modules clean: make -C $(KERN_DIR) M=`pwd` m...
阅读(197) 评论(0)

字符设备驱动-同步互斥阻塞

我们想来达到一个目的:同一时刻,只能有一个应用程序打开/dev/buttons 一般的,我们想达到目的会想到下面这种方法:static int canopen = 1; static int sixth_drv_open(struct inode *inode,struct file *file) { if(--canopen != 0) { canopen++;...
阅读(135) 评论(0)

字符设备驱动-异步通知

我们前面的三种按键操作中,都需要通过应用程序不断地主动通过read()来读驱动程序或者通过poll机制利用返回的信息做出决定。 我们想要当按下按键时利用驱动程序来通知应用程序则需要引入异步通知 异步通知:意思就是,一旦设备就绪,则主动通知应用程序,这样应用程序根本不需要查询设备状态,非常类似于硬件上”中断的概念”我们先来看一个例子: Signal.c #include ...
阅读(121) 评论(0)

字符设备驱动-poll机制

先来看三种按键驱动方式: 1、查询方法:一直在查询,不断去查询是否有事件发生,整个过程都是占用CPU资源,非常消耗CPU资源。2、中断方式:当有事件发生时,就去跳转到相应事件去处理,CPU占用时间少。3、poll方式: 中断方式虽然占用CPU资源少,但是在应用程序上需要不断在死循环里面执行读取函数,应用程序不能去做其它事情。poll机制解决了这个问题,当有事件发生时,才去执行读read函数,按键事件...
阅读(89) 评论(0)

字符设备驱动-中断方式操控按键

Linux中断处理体系结构框架总结:我们从内核启动第二阶段可知,进行了中断处理体系结构的初始化. 框架总结以外部中断EIN4~EINT23为例。 初始化中断处理体系结构init_IRQ(arch/arm/kernel/irq.c)void __init init_IRQ(void) { int irq; for (irq = 0; irq < NR_IRQS; irq++)...
阅读(133) 评论(0)

字符设备驱动-Linux内核异常处理体系结构

Linux异常处理体系结构 以中断这种异常来举例分析: 当我们在裸机操作中断时候:① 构建异常向量表② cpu发生中断,跳到异常向量入口执行③ 跳转到某函数③-a 保存被中断的现场③-b 执行中断处理函数④-c 恢复现场Linux驱动层面同样如此:① 通过trap_init构造异常向量表② cpu发生中断,跳到异常向量入口执行(b vector_irq + stubs_offset)③ 跳转到v...
阅读(127) 评论(0)

字符设备驱动-轮询方式操控按键

一般驱动都分为两个部分:一:写出框架二:硬件操作框架搭建:①头文件的拷贝#include #include #include #include #include #include #incl...
阅读(117) 评论(0)

字符设备驱动-LED驱动

写一个LED点灯驱动:①框架(在Linux字符设备驱动开发基础已经搭建好)②完善:硬件的操作a.看原理图-确定引脚 b.看2440数据手册 c.写代码 写代码注意:裸机代码用的是物理地址PA,驱动代码用的是虚拟地址VA 驱动程序first_drv.c #include #include <linux/kernel...
阅读(136) 评论(0)

Linux字符设备驱动开发基础

Linux驱动:封装对底层硬件的操作,向上层应用提供操作接口 一. 概念介绍一般用户在应用程序里调用的 open, read, write 函数是 c 库的函数, 这些函数会触发 swi val异常,从而引发系统调用,进入到内核空间, 内核通过VFS(virtual Filesystem)来实现调用不同的驱动函数。例如:我们有一个函数,int main() { int fd1, fd2;...
阅读(144) 评论(0)
    个人资料
    • 访问:257538次
    • 积分:6613
    • 等级:
    • 排名:第3859名
    • 原创:306篇
    • 转载:13篇
    • 译文:89篇
    • 评论:89条
    【目录索引】

    闲适音乐

    博客专栏
    最新评论

    Email: 457086306@qq.com