![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux驱动
sanchuyayun
真诚,友好
展开
-
linux驱动头文件位置的说明
在不同版本的内核源码上,头文件所在的位置是不同的,比如说在#include#include同样是regs-gpio.h,是在比较低的版本(比如2.6.25)上位于arch/arm/include/asm中,而mach/regs-gpio.h则是位于arch/arm/mach-s3c2410/include/mach中,2.6.30版本的内核是这种结构,所以,要根据所采用的不转载 2012-12-01 21:16:07 · 542 阅读 · 0 评论 -
《Linux内核修炼之道》精华分享与讨论(13)——驱动开发三件宝:spec、datasheet与内核源码 .
设备模型之外,对于驱动程序的开发者来说,有三样东西是不可缺少的:第一是协议或标准的spec,也就是规范,比如usb协议规范;第二是硬件的datasheet,即你的驱动要支持的硬件的手册;第三就是内核里类似驱动的源代码,比如你要写触摸屏驱动的话,就可以参考内核里已经有的一些触摸屏驱动。spec、datasheet、内核源代码这三样东西对于每个开发设备驱动的人来说都是再寻常不过了,但正是因为它们的转载 2014-08-01 14:52:51 · 1264 阅读 · 0 评论 -
设备驱动调试和移植的一般方法
设备驱动调试和移植的一般方法(一) 做linux底层软件工作也有两年了,算上研究生时期对底层软件的研究,加起来也快四年了。慢慢地发现有必要总结一些一般性的方法了。因为一般性的方法有宏观上的指导意义,以后调试和移植驱动时,经常性地回味这些一般性的方法可以防止自己犯同样的错误,进而少走弯路,以最高的效率完成工作。当谈到底层软件,我们一般都会想到bootloader、BSP、device转载 2014-07-31 11:01:23 · 5622 阅读 · 0 评论 -
dump_stack的简单使用
刚刚接触内核,在调试过程中用printk打印信息当然是直接有效的办法,但当我们不知到一个函数或者一个模块到底在哪里出了问题时我们可以利用dump_stack有效的找到问题的根源,下面只是简单的给出了使用方法。 我在自己的主机上试了一下dump_stack() Makefile文件点击(此处)折叠或打开 obj-m := hello.oKERNE转载 2014-09-10 17:33:13 · 9315 阅读 · 1 评论 -
linux内核代码阅读的几个技巧 .
这些技巧都是平时我自已在阅读的时候总结的,想到哪就说到哪了,其实我总结的技巧远不止这些,但是先说这些吧。后面想到了再补充,只有在拿到代码做分析的时候遇到实际的问题时,才能见招拆招,想些办法。其实linux内核源码还是比较难跟踪的,我刚开始阅读内核源码的时候,感觉很多东西经常找着找着就失去头绪了,很郁闷。通过一些阅读后发现内核也就那么几招用的比较多,摸清楚其脾气后,剩下的就是耐心了。1.转载 2014-09-10 17:34:59 · 568 阅读 · 0 评论 -
linux I2C读写实例 .
这段时间搞一个电容触摸屏,经过实验摸索终于试出来了,因为以前是没有专门搞过这块的,这下积攒了十足的经验。有两个关键地方做下说明:(1)I2C器件读写函数。时序如下:根据特性,我没有使用smbus的读写函数,还是用的I2C读写函数来处理:static struct i2c_client *g_client; //本I2C器件注册的client端static转载 2014-09-27 09:40:42 · 1963 阅读 · 0 评论 -
二进制实用程序(objdump, readelf,ar, nm等) .
GNU 二进制实用程序Binutils (GNU binary utilities)包括:objdump、readelf、addr2line、strip、ar、nm、ldd、ngprof、gcov等。一。 objdump - 显示二进制文件信息objdump可以根据目标文件来生成可读性比较好的汇编文件。常用的命令如下:gcc -g3 test.c -o test.o objdump转载 2014-11-12 17:02:01 · 625 阅读 · 0 评论 -
关于学习Linux的经典书籍 (深入理解Linux内核、Linux设备驱动程序等) .
成为一名精通 Linux 程序设计的高级程序员一直是不少朋友孜孜以求的目标。根据中华英才网统计数据,北京地区 Linux 程序员月薪平均为 Windows 程序员的 1.8 倍、Java 程序员的 2.6 倍, Linux 程序员年终奖金平均为 Windows 程序员的 2.9 倍。同时数据显示,随着工作经验的增长, Linux 程序员与 Windows 程序员的收入差距还有扩大的趋势。Denis转载 2014-10-13 15:19:32 · 524 阅读 · 0 评论 -
const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义2008-07-25 11:04几个容易混淆的概念,记在这里一、=====C语言声明的方法,对理解下面的两个都有帮助===========================(http://bbs.chinaunix.net/viewthread.php?tid=6转载 2014-12-03 10:30:24 · 431 阅读 · 0 评论 -
linux下获取按键响应事件
1、问题 通过一个死循环将读取键盘对应的设备文件将触发键盘事件在屏幕上打印出来,按esc退出程序 代码是在unbuntu10.04编译执行通过的 2、input_event描述 在Linux内核中,input设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作就是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过input_转载 2014-12-03 15:32:54 · 840 阅读 · 0 评论 -
git 实用积累---git svn
1, Git SVN 工作流程 尽管你可以从网上找到成千上万篇关于Git和git-svn, 但是本文主要介绍如何在一个以svn作为版本管理软件的项目里使用git。(假如你已经有了git-svn工具, 那我们就开始用git吧!) 先介绍些背景知识, Git 是 Linus Torvalds 为Linux内核开发的一套版本控制软件。他对版本控制有些特殊的要求,但是没有一个能满足转载 2015-01-28 18:28:04 · 1077 阅读 · 0 评论 -
如何在svn系统中使用git
如果正在使用svn,打算换到git,又暂时不想放弃已有的svn代码库,可以选择git-svn。说一说我自己从svn到git的经验吧。开始安装最新版本的git,从git 1.5.3以后支持git-svn,git和svn的配合就要借助这个功能。安装完毕后要做一些简单的配置。最直接的做法就是创建修改~/.gitconfig。下面是我的.gitconfig[user]转载 2015-01-29 09:22:34 · 399 阅读 · 0 评论 -
Linux __setup解析
_setup这条宏在Linux Kernel中使用最多的地方就是定义处理Kernel的启动参数的函数及数据结构,宏定义如下:#define __setup(str, fn) \__setup_param(str, fn, fn, 0)#define __setup_param(str, unique_id, fn, early) \static char __setup转载 2014-12-05 17:26:28 · 415 阅读 · 0 评论 -
Linux内核学习的一些国外网站
http://www.kernel.orgThe Linux Kernel Archivesftp://ftp.kernel.org本站点是Linux内核开发的主站点,其中包含了最新的内核发行版本以及相关信息。注意该FTP站点的镜像已遍布全球,因此可以选择最近的镜像下载Linux源代码。http://www.linuxdoc.orgLinux Documen转载 2014-12-05 12:04:15 · 818 阅读 · 0 评论 -
Linux设备驱动之Ioctl控制
Linux设备驱动之Ioctl控制 大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力。 一、在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd,unsigned long cmd,...);/*fd:文件描述符cmd:控制命令...:可选参数:插入*argp,具体内容依赖于cmd*/ 用户程序所作的转载 2015-05-27 14:24:33 · 432 阅读 · 0 评论 -
i2c 编程接口
2012-10-17 14:04 12435人阅读 评论(1) 收藏 举报 分类:内核接口(3) 版权声明:本文为博主原创文章,未经博主允许不得转载。1、通信接口i2c发送或者接收一次数据都以数据包 struct i2c_msg 封装[cpp] view plain copyst转载 2017-03-15 17:00:48 · 496 阅读 · 0 评论 -
I2S音频总线学习(一)数字音频技术
[+]IIS音频总线学习一数字音频技术一声音的基本概念二声音的数字化声音信号的类型声音数字化过程声音数字化过程示意图声音数字化三要素声音数字化的数据量三音频的文件格式WAV文件MP3文件WMA文件MIDI文件四数字音频压缩标准音频压缩方法概述音频信号能压缩的基本依据音频信号压缩编码的分类音频压缩技术标准五声卡声卡的主要功能芯片类型转载 2014-04-11 14:20:58 · 1080 阅读 · 0 评论 -
获知当前时间
7.2. 获知当前时间内核代码能一直获取一个当前时间的表示, 通过查看 jifies 的值. 常常地, 这个值只代表从最后一次启动以来的时间, 这个事实对驱动来说无关, 因为它的生命周期受限于系统的 uptime. 如所示, 驱动可以使用 jiffies 的当前值来计算事件之间的时间间隔(例如, 在输入驱动中从单击中区分双击或者计算超时). 简单地讲, 查看 jiffies 几乎一直是转载 2014-05-15 14:55:17 · 625 阅读 · 0 评论 -
kernel 启动过程之三, start_kernel()函数 概叙!init/main.c .
核心数据结构初始化--内核引导第一部分 start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。这些动作有的是公共的,有的则是需要配置的才会执行的。在start_kernel()函数中, 输出Linux版本信息(printk(linux_banner))设置与体系结构相关的环境(setup_arch())页表结构初始化(paging_init(转载 2012-12-04 09:27:29 · 488 阅读 · 0 评论 -
Linux内核启动过程
Linux内核启动过程概述 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序。其中 Bootloader是系统启动或复位以后执行的第一段代码,它主要用来初始化处理器及外设,然后调用 Linux 内核。Linux 内核在完成系统的初始化之后需要挂载某个文件系统做为根文件系统(Root转载 2012-12-04 09:46:03 · 410 阅读 · 0 评论 -
解密module_init
在Linux底下写过driver模块的对这个宏一定不会陌生。module_init宏在MODULE宏有没有定义的情况下展开的内容是不同的,如果这个宏没有定义,基本上表明阁下的模块是要编译进内核的(obj-y)。1.在MODULE没有定义这种情况下,module_init定义如下:#define module_init(x) __initcall(x);因为#define __ini转载 2012-12-04 10:36:35 · 479 阅读 · 0 评论 -
platform_device与platform_driver
platform_device与platform_driver分类: Linux驱动 2010-01-04 16:25 2558人阅读 评论(1)收藏 举报 做Linux方面也有三个多月了,对代码中的有些结构一直不是很明白,比如platform_device与platform_driver一直分不清关系。在网上搜了下,做个总结。两者的工作顺序是先定义p转载 2012-11-20 19:35:44 · 404 阅读 · 0 评论 -
17.1.2 注册函数input_register_device()(1)
button_init()函数中的28行调用了input_register_device()函数注册输入设备结构体。input_register_device()函数是输入子系统核心(input core)提供的函数。该函数将input_dev结构体注册到输入子系统核心中,input_dev结构体必须由前面讲的input_allocate_device()函数来分配。input_register_转载 2012-12-05 17:52:37 · 871 阅读 · 0 评论 -
container_of 理解 .
问题:如何通过结构中的某个变量获取结构本身的指针???关于container_of见kernel.h中:/*** container_of - cast a member of a structure out to the containing structure* @ptr: the pointer to the member.* @type: the t转载 2012-12-06 17:18:09 · 585 阅读 · 1 评论 -
linux-2.6.30-4内核下arm的头文件位置和对应的内容使用
今天在查看一些驱动地址头文件,找了半天才发现~~~~2.6.30.4的头文件的位置和2.6.25.8的不一样,除去内核源码下的include目录外,在arch/arm/mach-s3c2410/和arch/arm/plat-s3c24xx/目录下都有include目录的。 网上大多说的地址都不同,找到头晕在arch/arm/mach-s3c2410/mach找到~~~~~~~~~~~~转载 2012-12-07 22:31:19 · 1673 阅读 · 0 评论 -
关于class_device_create和class_device_destroy
我在linux-2.6.27版本下面编译驱动程序到时候,发现找不到class_device_create和class_device_destroy到声明。在网上搜索以下,发现有人也遇到了此问题。解决办法如下: 2.6.15中的函数: class_device_create(); class_device_destroy();在2.6.27中变为: device_crea转载 2012-12-09 09:57:40 · 1381 阅读 · 0 评论 -
Linux驱动子系统之输入子系统
[内容概要]介绍了input-subsystem的三个组成部分,并对主要结构体和函数进行了分析以及它们如何关联。[概述]内核的输入子系统是对分散的、多种不同类别的输入设备(如键盘、鼠标、跟踪球、操作杆、触摸屏、加速计和手写板)进行统一处理的驱动程序。输入子系统带来的好处:统一了物理形态各异的相似的输入设备的处理功能。例如,各种鼠标,不论是PS/2、USB,还是蓝牙,都做同样的处转载 2012-12-10 16:31:34 · 447 阅读 · 0 评论 -
linux中input_register_device注册函数分析
17.1.2 注册函数input_register_device()(1)button_init()函数中的28行调用了input_register_device()函数注册输入设备结构体。input_register_device()函数是输入子系统核心(input core)提供的函数。该函数将input_dev结构体注册到输入子系统核心中,input_dev结构体必须由前面讲的in转载 2012-12-12 23:11:39 · 799 阅读 · 0 评论 -
内核打补丁,uImage zImage和bzImage的区别,内核编译技巧
如何给内核打补丁:补丁就是一个文本文档,由diff工具创建,存放2个内核版本源代码的差异给内核打补丁 patch举例:例1、2.6.23升级到24Patch –pl 例2、 2.6.23.8升级到2.6.24.6首先退回23的版本接着升级到24,再升级到24.6patch –R –pl patch –pl转载 2012-12-13 18:02:23 · 1092 阅读 · 0 评论 -
Linux驱动子系统之输入子系统
Gpio-keys是基于input架构实现的一个通用GPIO按键驱动。该驱动基于platform_driver架构,实现了驱动和设备分离,符合Linux设备驱动模型的思想。工程中的按键驱动我们一般都会基于gpio-keys来写,所以我们有必要对gpio_keys进行分析。[gpio-keys驱动分析]Gpio-keys的代码在drivers/input/keyboard/gpio_ke转载 2012-12-17 11:26:55 · 449 阅读 · 0 评论 -
史上最经典的Linux内核学习方法论
【IT168 技术分析】 Makefile不是Make Love 从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉。毕业的时候,人家跟我说Makefile我完全不知,但是一说Make Love我就来劲了,现在想来依然觉得丢人。 毫不夸张地说,Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。基本上,Linux内核中每一个目录下边都会有转载 2013-07-04 11:30:46 · 503 阅读 · 0 评论 -
SecureCRT 绝佳配色方案, 保护你的眼睛
端有一个好的配色,不仅能保护自己的眼睛,也能给人一个好心情,本配色方案适合任意一种SSH客户端软件.设置背景颜色Options => Sessions options => Terminal => Emulation,在 Terminal下拉列表下选择Linux,勾选 ANSI Color。默认的 ANSI Color 的背景颜色是黑色,感觉看久了很不舒转载 2013-11-21 14:41:47 · 4362 阅读 · 0 评论 -
Linux系统调用
目录:1. Linux系统调用原理2. 系统调用的实现3. Linux系统调用分类及列表4.系统调用、用户编程接口(API)、系统命令和内核函数的关系5. Linux系统调用实例6. Linux自定义系统调用1.系统调用原理系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特转载 2014-01-23 18:32:03 · 877 阅读 · 0 评论 -
[linux-内核][转]内核日志及printk结构浅析
这段时间复习了一下内核调试系统,注意看了一下printk的实现以及内核日志的相关知识,这里做一下总结。1、问题的引出:做DPDK项目时,调试rte_kni.ko时,发现printk并不会向我们想想的那样把log信息显示在我们的终端上。有人总结了三个原因:原因1:printk()有一个控制日志级别的字段,如果该字段的日记级别高于console默认的日志级别那么才会打印出来(数转载 2017-04-14 17:04:16 · 687 阅读 · 0 评论