linux驱动
文章平均质量分 78
韩半仙
这个作者很懒,什么都没留下…
展开
-
Linux内核IS_ERR/ERR_PTR/PTR_ERR
对于一个指针,一般分为3类:1、有效指针;2、NULL;3、非法指针IS_ERR/ERR_PTR/PTR_ERR均定义在include/linux/err.h文件中。1、IS_ERRstatic inline bool __must_check IS_ERR(__force const void *ptr) { return IS_ERR_原创 2021-07-23 10:23:42 · 321 阅读 · 0 评论 -
Linux 设备总线驱动模型
在开发中我们并不会真的去写一个总线模型,我们分析总线驱动模型是为了搞清楚总线是如何将driver和device匹配的,即当我们插入我们的设备时,总线是如何找到这个设备对应的驱动,并且调用驱动的probe函数的。不管是先有驱动后有设备、还是先有设备后有驱动。都会调用驱动driver中的probe,而不是设备device。在开发中,我们都是在kernel中已有的总线上去开放设备驱动程序,如 usb_...转载 2020-01-16 10:10:31 · 320 阅读 · 0 评论 -
linux IIC驱动笔记
一、IIC 驱动框架应用层 open read write——————————————————驱动层IIC设备驱动(drv_open drv_read drv_write) IIC总线驱动 ——————————————————硬件 (例如: AT24C02 )IIC设备驱动的drv_open、drv_read、drv_wri转载 2013-04-23 10:51:44 · 712 阅读 · 0 评论 -
Android ImageSwitcher和Gallery 综合使用
一个简易的相册功能描述: 点击按钮进入下一屏,在屏幕上面展示一个大图,在屏幕的下面是一组可以滚动的图片,点击滚动的图片可以显示在上面的控件中。效果图如下: 开发环境:eclipse3.4.2 AndroidSDK2.0 ADT0.9.7代码:1.MainActivity 单击按钮时,跳转到 ImageShowActivity Java代码原创 2013-07-15 15:52:46 · 721 阅读 · 0 评论 -
安装Android NDK
ubuntu 64位系统下安装Android NDK后必须要安装ia32-libs,即sudo apt-get install ia32-libs,否则会报错:/opt/Android-Tools/android-ndk-r8d/ndk-build: 193: /opt/Android-Tools/android-ndk-r8d/prebuilt/linux-x86/bin/make: not f原创 2013-07-15 14:00:26 · 1088 阅读 · 0 评论 -
GPIO及中断API函数
#include// 标准 GPIO_API intgpio_request(unsigned gpio, const char *label); 获得并占有GPIO port 的使用权,由参数 gpio 指定具体 port,非空的lables指针有助于诊断。主要是告诉内核这地址被占用了。当其它地方调用同一地址的gpio_request就会报告错误,该地址已被申请。原创 2013-07-26 10:04:53 · 1437 阅读 · 0 评论 -
编译内核出现:没有规则可以创建kernel.release需要的目标include/config/auto.conf
刚刚编译内核时出现:*** Error during update of the configuration.make[2]: *** [silentoldconfig] 错误 1make[1]: *** [silentoldconfig] 错误 2make: *** 没有规则可以创建“include/config/kernel.release”需要的目标“include/co原创 2013-07-26 10:26:17 · 15422 阅读 · 0 评论 -
Linux与Android 多点触摸协议
单点触摸信息是以ABS承载并按一定顺序发送,多点触摸信息则是以ABS_MT承载并按一定顺序发送,然后通过调用input_mt_sync()产生一个 SYN_MT_REPORT event来标记一个点的结束,告诉接收方接收当前手指的信息并准备接收其它手指的触控信息。为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据。这个文档所描述的多点触控协议可以让内核驱动程转载 2013-07-29 16:56:56 · 606 阅读 · 0 评论 -
request_queue, request, bio 关系
记录一下bio 代表一个IO 请求request 是bio 提交给IO调度器产生的数据,一个request 中放着顺序排列的bio当设备提交bio 给IO调度器时,IO调度器可能会插入bio,或者生成新的request request_queue代表着一个物理设备,顺序的放着request ===========================分割线==========原创 2013-08-06 11:27:18 · 952 阅读 · 0 评论 -
块设备驱动程序
块设备驱动程序.块设备和字符设备的区别 1,读取数据的单元不同,块设备读写数据的基本单元式块,字符设备的基本单元是字节。 2,块设备可以随机访问,字符设备只能顺序访问。.linux内核中块设备的描述 struct gendisk { int major;主设备号 int first_minor;次设备号 int minors; char disk_nam原创 2013-08-06 11:09:01 · 711 阅读 · 0 评论 -
将驱动中的printk信息打印出来
要将linux内核的带级别控制的printk内容打印出来,在命令行 输入 dmesg -n 8 就将所有级别的信息都打印出来 Linux命令:dmesg 功能说明:显示开机信息。 语 法:dmesg [-cn][-s ] 补充说明:kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/va转载 2013-08-19 10:47:57 · 1131 阅读 · 0 评论 -
android电池驱动
学习要点:1、电池驱动的架构;2、电池电压的获取,百分比的转换(包括不同用电情况下的分析);3、充电管理;当我们要写一个驱动的时候,首先要知道内核提供给驱动的接口,就是当驱动挂载到内核上的时候,内核怎么知道驱动中的信息的,如何来控制驱动。而内核提供给电池驱动的接口就是结构体power_supply。Battery驱动程序需要通过sys文件系统向用户空间提供接口,sys文件系统的路径转载 2013-08-06 15:58:07 · 864 阅读 · 0 评论 -
i2c驱动难点解疑
一、关于匹配i2c_client->dev和i2c_driver->driver的总线类型都是i2c_bus_type。 i2c_adapter->dev的总线类型并不是i2c_bus_type。在注册后设备与驱动匹配,是i2c_client->dev和i2c_driver->driver的匹配。i2c_client的建立都是依赖于 "new style" driversi2c_d转载 2013-08-07 18:34:41 · 888 阅读 · 0 评论 -
Android/linux(earlysuspend、lateresume)睡眠唤醒机制简介
背景介绍:睡眠/唤醒是嵌入式Linux非常重要的组成部分,因为优秀的睡眠唤醒机制可以是嵌入式设备尽可能的进入休眠状态,来延长电池的续航时间(这在移动终端消费类电子设备中是非常重要和有意义的!!)。但标准的Linux睡眠唤醒机制有其自身的一些缺陷(所有模块必须同时睡下或者唤醒),在某些情况下,这会导致能耗的白白浪费。因此Android在标准Linux睡眠唤醒的机制上作了新的改动(wake_l转载 2013-08-08 10:16:54 · 815 阅读 · 0 评论 -
earlysuspend调用过程
1.电源管理的状态Android的Linux内核为系统提供了4种电源状态,内核的源代码为其中的3种定义了名字和对应的宏定义,名字定义在kernel/power/suspend.c中:1234567constchar*const pm_states[PM_SUSPEND_MAX]={#ifdef CONFIG_EARLY转载 2013-08-08 10:39:33 · 1528 阅读 · 0 评论 -
对于接收到的GPS信息详解
最近一直在做gps驱动方面的东西,对于底层接收到的gps信息不是很了解,查询了资料对这些信息做出总结:GPS 接收信号输出信息NMEA-0183 Ver3.0协议的输出信息有如下6种GPGLL 地理位置和经纬度信息GPGGA 位置信息GPGSA GPS DOP和活动卫星信息GPGSV 当前GPS卫星状态信息GPRMC 推荐的最简定位信息GPVTG 地面速原创 2013-08-16 14:54:02 · 11409 阅读 · 3 评论 -
S3C2410 I2C 总线驱动实例
1.S3C2410I2C控制器硬件描述S3C2410处理器内部集成了一个I2C控制器,通过4个寄存器就可方便地对其进行控制,这4个寄存器如下。1 IICCON:I2C控制寄存器。2 IICSTAT:I2C状态寄存器。3 IICDS:I2C收发数据移位寄存器。4 IICADD:I2C地址寄存器。S3C2410处理器内部集成的I2转载 2013-08-20 16:29:03 · 1128 阅读 · 0 评论 -
bash: ./onekey.sh:/bin/bash^M:损坏的解释器: 没有那个文件或目录
这个问题大多数是因为你的脚本文件在windows下编辑过。windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r,用cat -A filename时你可以看到这个\r字符被显示为^M,这时候只需要删除这个字符就可以了。可以使用命令sed -i 's/\r$//' filenam原创 2013-08-21 16:00:55 · 691 阅读 · 0 评论 -
用户空间使用i2c-dev.c
第1章 用户空间使用i2c_dev对于注册的i2c适配器,用户空间也可以使用它们。在Linux内核代码文件/include/linux/i2c-dev.c中针对每个适配器生成一个主设备号为89的设备节点,实现了文件操作接口,用户空间可以通过i2c设备节点访问i2c适配器。适配器的编号从0开始,和适配器的设备节点的次设备号相同。i2c适配器的设备节点是/dev/i2c-x,其中x是数字,代表转载 2013-08-21 18:51:38 · 2314 阅读 · 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-08-21 18:52:12 · 695 阅读 · 0 评论 -
Linux LCD驱动(一)——硬件分析和FrameBuffer
一、开发环境主 机:VMWare--Fedora 9开发板:TQ2440--64MB Nand, Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.3二、背景知识1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形转载 2013-08-21 18:57:30 · 3838 阅读 · 0 评论 -
linux kernel初始化分析
转载 2013-08-09 10:05:56 · 651 阅读 · 0 评论 -
I2C驱动总体框架图
转载 2013-08-09 10:05:07 · 1003 阅读 · 0 评论 -
嵌入式经典面试题
这些题实在太经典了!预处理器(Preprocessor)1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2) 懂得预处理器将为你计转载 2013-08-21 18:53:12 · 814 阅读 · 0 评论 -
I2c-s3c2440.c 分析
此文件是I2C适配器的驱动加载文件,设备加载文件为bsp文件,如果使用的是mini2440,则为mach-mini2440.c程序运行流程:1、module_init(i2c_adap_s3c_init); 模块初始化函数登记。2、驱动启动后自动执行: static int __init i2c_adap_s3c_init(void)转载 2013-08-21 18:48:29 · 610 阅读 · 0 评论 -
i2c-core.c分析
在IIC驱动(一)中,我们初步分析了需要移植部分的代码,当然还留下了不少未解之谜,为了把这些问题给弄清楚,所以本部分我们分析一下I2C-CORE.C的代码。 分析之前先看一下I2C驱动的结构图:一条I2C线上可以挂很多个I2C设备,每一条I2C线对应一个适配器(Adapter),每一个I2C设备对应一个Client。简单点理解,adapter就是一个集合,里面包含了多个clie转载 2013-08-21 14:49:59 · 3620 阅读 · 0 评论 -
I2C-dev.c驱动代码分析
程序运行流程:1、 module_init(i2c_dev_init); 加载初始化函数。2、 运行i2c_dev_init函数,注册设备,注册设备驱动,以_init为头的函数,在运行过后系统将回收其内存static int __init i2c_dev_init(void){ int res;//代码看到这里的时候,顺便看了一眼我的Linux启动转载 2013-08-21 18:50:36 · 1349 阅读 · 0 评论 -
Linux LCD驱动(二)——图形显示
BMP和JPEG图形显示程序1) 在LCD上显示BMP或JPEG图片的主流程图首先,在程序开始前。要在nfs/dev目录下创建LCD的设备结点,设备名fb0,设备类型为字符设备,主设备号为29,次设备号为0。命令如下:mknod fb0 c 29 0在LCD上显示图象的主流程图如图1所示。程序一开始要调用open函数打开设备,然后调用ioctl获取设备相关信息,接下来就是读取图形转载 2013-08-21 18:58:12 · 2659 阅读 · 0 评论 -
MODULE_DEVICE_TABLE
1. MODULE_DEVICE_TABLE (usb, skel_table);该宏生成一个名为__mod_pci_device_table的局部变量,该变量指向第二个参数。内核构建时,depmod程序会在所有模块中搜索符号__mod_pci_device_table,把数据(设备列表)从模块中抽出,添加到映射文件/lib/modules/KERNEL_VERSION/modules.pci转载 2013-08-22 14:16:00 · 776 阅读 · 0 评论 -
Linux设备驱动之——I2C总线
2 I2C子系统2.1 LinuxI2C子系统架构在内核中已经提供I2C子系统,所以在做I2C驱动之前,就必须要熟悉该子系统。2.2 三大组成部分1、I2C核心(i2c-core)I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(algorithm)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。 2、I2C总线驱转载 2013-08-10 10:14:37 · 718 阅读 · 0 评论 -
Linux下I2C设备驱动开发和实现
I2C总线具有结构简单使用方便的特点。本文描述了linux下I2C驱动的结构,并在此基础上给出了I2C设备驱动和应用的实现。 1 引言 I2C (Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线最主要的优点是其简单性和有效性。由于 接口直接在组件之上,因此I2C总转载 2013-08-10 10:31:59 · 794 阅读 · 0 评论 -
第十五章 Linux I2C核心、总线与设备驱动
第十五章 Linux I2C核心、总线与设备驱动本章导读I2C总线仅仅使用SCL、SDA两根信号线就实现了设备之间的数据交互,极大地简化对硬件资源和PCB板布线空间的占用。因此,I2C总线被非常广泛地应用在EEPROM、实时钟、小型LCD等设备与CPU的接口中。Linux定义了系统的I2C驱动体系结构,在Linux系统中,I2C驱动由3部分组成,即I2C核心、I2C总线驱动和I2C设转载 2013-08-10 10:33:25 · 1049 阅读 · 0 评论 -
手把手教你写Linux I2C设备驱动
Linux I2C驱动是嵌入式Linux驱动开发人员经常需要编写的一种驱动,因为凡是系统中使用到的I2C设备,几乎都需要编写相应的I2C驱动去配置和控制它,例如 RTC实时时钟芯片、音视频采集芯片、音视频输出芯片、EEROM芯片、AD/DA转换芯片等等。 Linux I2C驱动涉及的知识点还是挺多的,主要分为Linux I2C的总线驱动(I2C BUS Driver)和设备驱动(I2C转载 2013-08-10 11:45:00 · 855 阅读 · 0 评论 -
linux I2C设备驱动编写
实例解析linux内核I2C体系结构 http://blog.csdn.net/hongtao_liu/archive/2009/12/08/4964244.aspx http://blog.csdn.net/sfrysh/archive/2010/08/19/5823057.aspx)谈到在linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C设备当作一个普通转载 2013-08-12 12:54:27 · 3415 阅读 · 0 评论 -
等待队列实现代码浅析
等待队列是很多其他linux内核机制的基石,例如异步事件通知机制,信号量也是。 Linux中等待队列的实现思想:当一个任务需要在某个wait_queue_head上睡眠时,将自己的进程控制块信息封装到wait_queue中,然后挂载到wait_queue的链表中,执行调度睡眠。当某些事件发生后,另一个任务(进程)会唤醒wait_queue_head上的某个或者所有任务,唤醒工作也就转载 2013-08-25 16:17:31 · 601 阅读 · 0 评论 -
hello world驱动
今天是一个值得纪念的日子,我也不知道我花了多长时间才编译成功!在编写这个驱动的过程中,真的体会到驱动编程不是那么简单的~,现在有点小小的激动,真的,很不容易啊~我把整个过程在重复一遍吧!在编写这个驱动的过程中参考了网上的很多文档,最终的结果是弄的我头都晕了,每个人写的都不一样,其实我现在还有一些概念不是很清楚。1:到底丫的什么是内核源码树?2:为什么要编译内核源码树?1:内核源码树转载 2013-08-26 10:46:11 · 642 阅读 · 0 评论 -
poll机制分析
最近看了一下Linux Poll 机制的实现,看了韦老师的分析文档,总结如下: int poll(struct pollfd *fds,nfds_t nfds, int timeout);总的来说,Poll机制会判断fds中的文件是否可读,如果可读则会立即返回,返回的值就是可读fd的数量,如果不可读,那么就进程就会休眠timeout这么长的时间,然后再来判断是否有文件可读,如果有,返回fd转载 2013-08-25 16:16:13 · 526 阅读 · 0 评论 -
I2C子系统分析
本文以s3c2440的I2C子系统为例, 分析其代码实现本人学习驱动不久, 如有瑕疵纰漏, 欢迎指教, 谢谢从硬件的角度看, I2C子系统由总线适配器和挂在总线上的设备组成因此, 很容易想到, Linux的I2C子系统至少要提供: 总线上设备的支持, 以及其驱动 总线适配器的支持, 以及其驱动1. S3C2440的I2C总线作为一个平台设备, 来看下转载 2013-08-26 08:53:47 · 1206 阅读 · 0 评论 -
Source Insight快捷键及使用技巧
source insight快捷键及使用技巧 退出程序 : Alt+F4重画屏幕 : Ctrl+Alt+Space完成语法 : Ctrl+E复制一行转载 2013-08-26 09:11:13 · 671 阅读 · 0 评论 -
I/gps_gsd4e( 100): in RMC, fixStatus=V I/gps_gsd4e( 100): gps fd event end I/gps_gsd4e( 100): gps
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,linux/posix_types.h头文件有这样的声明:#define __FD_转载 2013-08-15 10:47:32 · 742 阅读 · 0 评论