![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
文章平均质量分 72
wuyuwei45
这个作者很懒,什么都没留下…
展开
-
Android中对标准内核的按键映射-Android按键驱动
Linux内核的平台代码的按键定义如下:/* GPIO_KEY for Tablet */static struct gpio_keys_button tablet_gpio_keys_buttons[] = { [0] = { .code = KEY_VOLUMEUP, .gpio = 177, .desc = "volume up", .active_lo原创 2013-04-01 13:24:41 · 2003 阅读 · 1 评论 -
Linux的开关中断
如果你要禁止所有的中断该怎么办? 在2.6内核中,可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理。 这两个函数定义在 中: void local_irq_save(unsigned long flags); void local_irq_disable(void); 对 local_irq_save的调用将把当前中断状态保存到flags原创 2013-05-03 09:12:15 · 1229 阅读 · 0 评论 -
Linux Gadget的一点研究之U盘和USB虚拟串口
Linux kernel2.6以上的版本中,USB设备驱动的接口改为了gadget,在kernel/driver/usb/gadget目录下主要包含了平台USB UDC驱动和gadget接口驱动。 kernel/driver/usb/gadget目下的serial.c是一个常用的驱动文件,它可以配置为bulk传输驱动或CDC ACM驱动(USB转串口驱动)。配置的方式有两种,一可原创 2013-05-14 18:02:18 · 10325 阅读 · 2 评论 -
Linux的电源管理架构
设备电源管理Copyright (c) 2010 Rafael J. Wysocki, Novell Inc.Copyright (c) 2010 Alan Sternstern@rowland.harvard.edu *************************************************************本文由DroidP翻译 2013-05-04 13:29:54 · 736 阅读 · 0 评论 -
S3C24xx的LCD驱动(详细)
转载:点击打开链接转载 2013-05-03 17:53:16 · 878 阅读 · 0 评论 -
Linux Gadget的一点研究之例程分析
学习Gadget比较有效的办法是掌握基本架构后,认真研读例程。其实不单Gadget如此,其他Linux驱动或子系统都是如此。另外Linux下的外设驱动通常有分层的概念,有带有面向对象的思想,因此研读代码是比较有效的领悟办法。一般一个Linux的USB设备驱动,包括两大部分,一是CPU USB控制器部分的驱动,驱动文件名往往是xxx_udc.c,此部分驱动很多是与硬件CPU相关,包含寄存器设置、原创 2013-05-17 14:47:46 · 2202 阅读 · 0 评论 -
Linux驱动调试手段:打印信息日志
1.printk1.1 printk的优点: a. 在中断中调用 b. 在进程上下文中调用 c.在持有锁时调用 d.在多处理器上同时使用1.2 printk的缺点: a.终端启动前无法调用1.3 printk打印信息的级别1.4 printk的使用eg. printk( KERN_WARNING“This is原创 2013-05-24 15:20:10 · 4536 阅读 · 0 评论 -
Linux驱动调试手段:KDB
1.KDB介绍KDB是Linux内核调试补丁,提供一种在系统能运行时对内核内存和数据结构进行检查的办法。它不允许进行源代码级别上的调试。可以添加额外的命令,给出该数据结构的标识或地址。2.KDB操作a.处理器单步执行。b.执行到某条特定指令时停止。c.当存取(或修改)某个特定的虚拟内存位置时停止。d.当存取输入/输出地址空间中的寄存器时停止,通过进程ID对当前活动的原创 2013-05-24 15:53:24 · 1106 阅读 · 0 评论 -
用户空间与内核空间的接口:proc文件系统
最早在接触Linux BSP时,项目中有一项规格就是底层需向上层提供硬件PCB及BOM信息。由于在Linux的根文件系统/proc目录下有硬件CPU、内存、存储器等与硬件相关的信息,并且在用户空间通过cat命令就可以轻易获得,于是有个想法,就是设法将项目中硬件PCB及BOM等信息展现在/proc目录下,然后用户空间可以通过cat或通过读写文件的形式获得这些信息。所以就查阅了关于Linux proc原创 2013-05-27 10:17:41 · 1020 阅读 · 0 评论 -
用IDE去开发Linux驱动
以前因项目进度太紧,没能好好花时间琢磨一些Linux的开发手段,近日陆续学习利用eclipse IDE调试编译uboot,Linux kernel等,深刻感受到磨刀不误砍柴工啊,利用IDE编辑和浏览文件都极度方便。当前又要面临android linux驱动开发,以往都是在利用linux的gedit/vim编辑linux驱动源码,然后在终端中敲命令编译驱动,相比IDE开发代码,实在是有诸多不便,今天原创 2013-03-27 14:17:15 · 1659 阅读 · 0 评论 -
Linux内核线程
内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,它只在 内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。一 线程的创建struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char namefmt[], ...原创 2013-04-22 15:27:09 · 862 阅读 · 0 评论 -
用户空间与内核空间的接口:sysfs
在调试驱动,或驱动涉及一些参数的输入输出时,难免需要对驱动里的某些变量或内核参数进行读写,或函数调用。此时sysfs接口就很有用了,它可以使得可以在用户空间直接对驱动的这些变量读写或调用驱动的某些函数。sysfs接口与proc文件系统很相似,有人将proc文件系统形容为Windows XP,而将sysfs接口形容为Windows 7。而在Android系统中,振动器、背光、电源系统等往往使原创 2013-05-27 10:18:22 · 2713 阅读 · 0 评论 -
Android/Linux USB Gadget:三层架构
1.前言继Linux Gadget的一点研究后陆续续关注了很久Android USB Gadget,一直想写点什么记录一些认识,可是Linux USB实在是太复杂,让人有点无从下笔的感觉。它的复杂并不是说不可以被人理解,而且涉及的面很广。USB Host的驱动关注比较少,就对USB device驱动的认识来说,需从两大方面去对它进行认识和了解,一方面是USB协议本身,如果连USB端点、设备描述原创 2013-06-07 14:06:04 · 5596 阅读 · 1 评论 -
Android/Linux USB Gadget:续
为保留连贯性,但又急于记录另一篇,所以先mark...原创 2013-06-17 16:23:58 · 1075 阅读 · 0 评论 -
Android中LCD背光驱动
其实Android的底层就是Linux,所以其驱动本质就是Linux驱动,但是这些Linux驱动是服务上层Android的,所以需遵循上Android的一些接口规范。所以涉及到的Android驱动都应应密切关注上层传递的接口。本文介绍的LCD背光驱动就是从上层一直往下层展现,但是笔者毕竟不是专注于Android上层,碍于知识不充裕,所以对上层的东西介绍得相对简单。1.Android的Setti原创 2013-06-17 16:28:40 · 4554 阅读 · 0 评论 -
Linux Gadget的一点研究之HID设备
接上文,配置编译gadget HID模块make modules后在driver/usb/gadget目录下生成g_hid.ko执行加载命令:root@rfODNCC:/mnt# insmod g_hid.ko insmod: can't insert 'g_hid.ko': No such device提示错误。在TI 技术论坛上看到相关技术回复:原创 2013-05-15 15:49:02 · 9204 阅读 · 13 评论 -
怎样写 Linux LCD 驱动程序
基本原理通过 framebuffer ,应用程序用 mmap 把显存映射到应用程序虚拟地址空间,将要显示的数据写入这个内存空间就可以在屏幕上显示出来;驱动程序分配系统内存作为显存;实现 file_operations 结构中的接口,为应用程序服务;实现 fb_ops 结构中的接口,控制和操作 LDC 控制器;驱动程序将显存的起始地址和长度传给 LCD 控制器的寄存器 (一般由 fb_set转载 2013-05-02 14:19:18 · 681 阅读 · 0 评论 -
嵌入式linux内核中常见内存分配
1.原理说明 Linux内核中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示四级页表分别为: * 页全局目录(Page Global Directory) * 页上级目录(Page Upper Directory) * 页中间目录(Page Middle Direc原创 2013-04-16 13:25:22 · 1484 阅读 · 0 评论 -
Linux设备模型
OverviewLinux的sysfs文件系统一般mount在/sys目录。本文主要介绍sysfs文件系统中设备驱动模型的建立过程,内核版本2.6.29。设备驱动信息主要用来表示设备以及驱动的层次关系,以及处理热插拔等。/sys中与之相关的数据有:class 代表一类设备,比如mtd、net、tty等等bus 总线,比如PCI、USB、I2转载 2013-04-03 16:37:45 · 575 阅读 · 0 评论 -
Linux的Netlink机制
Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 Linux 内核(2.6.14)中使用netlink 进行应用与内核通信的应用很多,包括:路由 daemon(NETLINK_ROUTE),1-wire 子系统(NETLINK_W1),用户态 socket 协议(NETLINK_USERSOCK),防火原创 2013-04-07 15:21:49 · 963 阅读 · 0 评论 -
MMC/SD卡驱动实例开发讲解(二)
ccommandioscmdcallback任务嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。共享资源,欢迎转载:http://hbhuanggang.cublog.cn一、开发环境主 机:VMWare--Fedora 9开发板:转载 2013-03-21 18:00:31 · 1136 阅读 · 0 评论 -
MMC/SD卡驱动实例开发讲解(一)
transition平台工作linuxioc嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。共享资源,欢迎转载:http://hbhuanggang.cublog.cn一、开发环境主 机:VMWare--Fedora 9开发板:Mi转载 2013-03-21 17:58:47 · 1519 阅读 · 0 评论 -
Linux I2C驱动:i2c_device_id
Linux I2C设备驱动中,是通过i2c device id名字进行i2c device和i2c driver匹配的。例如以下在板级代码定义"twl4030"作为device名字信息。static struct i2c_board_info __initdata omap3evm_i2c_boardinfo[] = { { I2C_BOARD_INFO("twl4030",原创 2013-04-09 16:08:12 · 10857 阅读 · 0 评论 -
Linux芯片级移植与底层驱动(基于3.7.4内核)
宋宝华 BarrySong 21cnbao@gmail.com>新浪微博: @宋宝华Barry 1. SoC Linux底层驱动的组成和现状为了让Linux在一个全新的ARM SoC上运行,需要提供大量的底层支撑,如定时器节拍、中断控制器、SMP启动、CPU hotplug以及底层的GPIO、clock、pinctrl和DMA硬件的封装等。定时器节拍、中断控制器、S转载 2013-03-26 09:44:31 · 5034 阅读 · 0 评论 -
linux顶半部和底半部中断机制
[cpp] view plaincopy//tasklet使用模板 /*定义tasklet和底半部函数相关联*/ void xxx_do_tasklet(unsigned long); DECLARE_TASKLET(xxx_tasklet,xxx_do_tasklet,0); /*中断处理底半部*/ void xxx_do_taskl转载 2013-03-27 10:57:18 · 781 阅读 · 0 评论 -
底半部机制分析:软中断,tasklet,工作队列
一般在有中断的系统中,中断ISR的设计应该尽可能的小,并且在处理中断时,不允许中断ISR再被其他后来的中断打断,也就是避免中断嵌套。现在大多数系统都是不支持中断嵌套的,Linux的实现就是个典型。防止中断嵌套的做法就是处理一个中断时,CPU执行关中断,不接收其他中断。但是这种关中断状态又不能持续太久,关中断时间过长,又会导致后续中断丢失,因此Linux中,将中断处理程序分为两个部分,即上半部和下半转载 2013-03-27 10:58:45 · 1121 阅读 · 2 评论 -
[SDIO]主机识别SDIO接口卡过程
多媒体卡和SD卡的卡识别过程是有区别的; 对于多媒体卡,卡识别过程以时钟频率Fod开始,所有SDIO_CMD输出为开路驱动,允许在这个过程中的卡的并行连接,识别过程如下:1. 总线被激活2. SDIO卡主机广播发送SEND_OP_COND(CMD1)命令,并接收操作条件3. 得到的响应是所有卡的操作条件寄存器内容的“线与”4. 不兼容的卡会被置于非激活状态原创 2013-03-27 11:20:08 · 2004 阅读 · 1 评论 -
android4.0与2.3版本的触摸屏驱动调试注意
在android2.3上调试TP时,只需要把linux驱动调通,android就可以正常使用了,而到android4.0上又有些不同了,针对linux驱动,需添加如下内容:1、在手指按下时需调用如下函数上报Key Down:input_report_key(struct input_dev *input, BTN_TOUCH, 1);2、在手指释放时需调用如下函数上报Key Up:原创 2013-03-27 11:22:15 · 725 阅读 · 0 评论 -
Linux spi设备驱动
Linux SPI驱动分主机驱动和设备驱动,主机驱动往往由厂商实现好,第三方开发员直接开发设备驱动即可。下面不阐述SPI子系统及驱动相关的架构,直接上一个SPI接口的温度传感器(TMP125)驱动来理解SPI驱动如何运作。这里也涉及Linux 驱动模型的知识。 在板级文件增加SPI设备信息:static struct omap2_mcspi_device_config ads784原创 2013-03-27 13:59:16 · 1897 阅读 · 0 评论 -
驱动中的死等
在外设的初始化配置中,往往会遇到写完某一个寄存器后,需等待某个状态产生了才能继续执行初始化操作。如写了复位寄存器后,往往希望等到复位完成的状态有效后才会执行其他初始化配置操作。在无操作系统中,代码一般为:void reset_device(void){ write_reset_register(); while(!(status&0x1));}无原创 2013-03-27 17:12:10 · 845 阅读 · 0 评论 -
workqueue (详细)
1. 什么是workqueueLinux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程.工作队列(workqueue)是另外一种将工作推后执行的形式.工转载 2013-04-22 13:35:51 · 845 阅读 · 0 评论 -
Linux MTD&Nand Driver
1、Linux MTD架构2、MTD创建设备节点。3、Register一个MTD设备到MTD子系统。4、MTD file operation 调用底层驱动。1、架构图1、设备节点:/dev下MTD字符设备节点(主设备号为90)2、MTD设备层:分为MTD字符设备层(mtdchar.c)和MTD块设备层(Mtdblock.c),完成flas原创 2013-04-26 09:42:19 · 1008 阅读 · 0 评论 -
并发和竞态
并发及其管理1、并发(concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(race condition)。2、在设计自己的驱动程序时,第一个要记住的规则是,只要可能,就应该避免资源的共享。如果没有并发的访问,也就不会有竞态的产生。因此,仔细编写的内核代码应具有最少的共享。这种思想的最转载 2013-04-19 09:52:32 · 833 阅读 · 0 评论 -
input设备的属性设置
以下从驱动角度介绍linux输入设备(触摸屏)的属性设置。在触摸屏驱动中,往往采用以下形式设置触摸屏输入设备的属性。input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);input->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);input_set_abs_params(in原创 2013-04-22 11:14:08 · 1567 阅读 · 0 评论 -
如何输出dev_dbg log
kernel里面默认都配置了CONFIG_DYNAMIC_DEBUG=y; 假如我们要打印acpuclock-krait.c中的 dev_dbg(drv.dev, "ACPU%d speed change complete\n", cpu); 在adb shell中输入: mount –t debugfs none /sys/kernel/debug转载 2013-06-26 15:09:15 · 1394 阅读 · 0 评论