嵌入式Linux驱动调试
文章平均质量分 76
主要涉及一些有关Linux驱动调试的笔记记录
Engineer-Bruce_Yang
本科毕业于华南理工大学,美国Carroll University工商管理硕士,曾就职于世界名企伟易达,安防军工砺剑防卫公司,多年嵌入式产品开发经验,在智能玩具、安防产品、平板电脑、手机开发有丰富的实战开发经验。
展开
-
VIM快速索引Linux内核中的API
在源码目录下:Ctag -R . 前提是已经安装了Ctag这个工具然后会目录下生成索引文件。如何搜索:ep:vim -t memcpy 回车会出现索引,按esc两次,根据信息提示选择标号进入API进到API后 : ctrl + ] 进入另一个api,返回 ctrl + o如果要在一个文件中找本文件中没有的API,可以到VIM的命令行模式,按esc,然后: ep : 输入 ,回车 cst原创 2017-01-19 21:18:36 · 681 阅读 · 0 评论 -
Linux内核编译时会遇到的问题--缺少mkimage
由于各大平台所带的内核不同,所以编译方式也不同,但方法都是大同小异。但是,编译内核有时候会提示缺少mkimage这个命令,如何解决?供应商提供内核的同时也会提供其它的一些,比如Uboot,rootfs等等。这个mkimage来自于对应的uboot源码包里,对uboot源码包进行解压后,编译uboot,后面会生成uboot.bin然后在tool目录下:ls mkimage我们可以看到有mkimgae原创 2016-09-07 16:59:19 · 1719 阅读 · 0 评论 -
linux内核原子变量与原子位操作API
原子变量:arch/arm/include/asm/atomic.h定义并初始化atomic_t v = ATOMIC_INIT(0);写void atomic_set(atomic_t *v, int i);读int atomic_read(atomic_t *v);自增, 并返回新值是否为0int atomic_inc_and_test(atomic_t *v);原创 2016-04-29 10:53:31 · 2093 阅读 · 0 评论 -
Linux内核sysfs文件系统内核文档翻译
Chinese translated version of Documentation/filesystems/sysfs.txtIf you have any comment or update to the content, please contact theoriginal document maintainer directly. However, if you have a prob翻译 2018-01-26 22:35:12 · 601 阅读 · 0 评论 -
linux内核自旋锁API
我们大概都了解,锁这种机制其实是为了保护临界区代码的,关于使用和定义,我总结的API如下:#include 定义自旋锁spinlock_t lock;初始化自旋锁void spin_lock_init(spinlock_t *lock);获取自旋锁void spin_lock(spinlock_t *lock);int spin_trylock(spinlock_t *lo原创 2016-04-29 10:32:20 · 989 阅读 · 0 评论 -
Linux内核中的Proc文件系统(一)
(1)/proc文件系统的特点和/proc文件的说明/proc文件系统是一种特殊的、由软件创建的文件系统,内核使用它向外界导出信息,/proc系统只存在内存当中,而不占用外存空间。/proc下面的每个文件都绑定于一个内核函数,用户读取文件时,该函数动态地生成文件的内容。也可以通过写/proc文件修改内核参数(2)/proc目录下的文件分析/proc/$pid 关于进程$pid的信息目录。每个进程在原创 2017-09-03 00:22:43 · 1015 阅读 · 0 评论 -
linux内核中默认logo的具体位置
/driver/logo/...以下这个目录下对应的是logo的设置原创 2016-09-16 10:10:55 · 1047 阅读 · 1 评论 -
Linux内核分配内存的方式
page = alloc_pages(GFP_KERNEL, get_order(1234));分配失败返回NULLGFP_KERNEL ---> 分配标志,当没有足够内存分配时,睡眠阻塞,直到有内存分配其他常用分配标志 GFP_ATOMIC,不会阻塞,没有足够内存分配时返回错误分配2的get_order(1234)次方个页框分配页框,如果分配多个页,分配的多个页在物理地址上是连续的释放连续的页原创 2016-10-06 09:54:29 · 2040 阅读 · 2 评论 -
Linux内核通用队列的使用笔记(读linux内核设计与实现)
Linux内核通用队列实现 Kfifo位置:kernel/kififo.c使用需要包含头文件#include 1、创建队列(动态创建)int kfifo_alloc(struct kififo *fifo , unsigned int size , gfp_t gfp_mask);该函数会创建并初始化一个大小为size的fifo,内核使用gfp_mask标识分配队列。成功返回0ep : stru原创 2016-06-28 09:34:22 · 4228 阅读 · 0 评论 -
Linux内核中的有关Page的算法
static inline int get_order(unsigned long size){ int order; size = (size-1) >> (PAGE_SHIFT-1); order = -1; do { size >>= 1; order++; } while (size); return order;}上面这个算法是从内核源代码摘抄下来的,其中PAG原创 2016-12-12 14:41:04 · 794 阅读 · 0 评论 -
Linux内核中GPIO操作函数的使用方法
http://blog.sina.com.cn/s/blog_a6559d9201015vx9.html转载 2017-02-09 09:27:40 · 2102 阅读 · 0 评论 -
Linux内核ARM Booting文档描述
Chinese translated version of Documentation/arm/BootingIf you have any comment or update to the content, please contact theoriginal document maintainer directly. However, if you have a problemcommuni翻译 2018-01-26 21:42:03 · 529 阅读 · 0 评论 -
关于linux内核驱动开发中Makefile编译的问题
obj-y:打个比方,我要编译的是hello.c这个文件,obj-y就会把hello.c或者hello.c编译生成的hello.s文件链接到内核中去。obj-m:打个比方,我要编译的是hello.c这个文件,obj-m则是编译成hello.ko,在系统启动的时候,需要手动insmod进行加载,才能加载到内核里面去。除了以上两种方式,其余的obj-xxx的形式不会被编译。原创 2016-04-21 13:42:38 · 1418 阅读 · 0 评论 -
如何来实现一个Linux内核的系统调用(基于tiny4412开发板)
关于系统调用,相信学习过操作系统的同学应该都不陌生。那么,什么是系统调用?百度的权威解释如下:点击打开链接 由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。是应用程序同系统之间的接口。 那么我们编程实验过程中使用过哪些系统调用呢? 当我们要打开一个文件,对这个文件进行原创 2017-01-29 22:56:27 · 1607 阅读 · 0 评论 -
手把手教你在友善之臂tiny4412上用uboot启动Linux内核
要想用uboot启动内核,我推荐一种方法,用dnw下载内核到开发板上,然后用uboot命令启动:首先我在网上随便下了一个dnw工具,经过移植修改后,代码如下:/*YYX--->for tiny4412 dnwversion:20170423 v1*/#include #include #include #include #include #include #include原创 2017-04-23 00:46:12 · 4996 阅读 · 7 评论 -
从Tiny4412--mma7660 gsensor驱动探索Linux内核I2C总线驱动框架
源码位于: driver/hwmon/mma7660.c参考博客:http://www.cnblogs.com/pengdonglin137/p/5240416.html参考mma7660的芯片数据手册:https://wenku.baidu.com/view/3ef59c28ed630b1c59eeb521.html 那么驱动分析完了,设备板级配置文件配置在哪里呢?代码位置:/arch/arm/原创 2017-08-21 21:33:54 · 2061 阅读 · 0 评论 -
Linux内核中断和异常分析(下)
这节,我们继续上,中(以前的日志有)篇目进行分析,结合一个真实的驱动案例来描述linux内核中驱动的中断机制,首先我们先了解一下linux内核中提供的中断接口。 这个接口我们需要包含一个头文件:#include 在中断接口中,最重要的是以下的接口函数:1、这个是请求中断函数int request_irq(unsigned int irq, irq_handler_原创 2016-04-23 13:00:58 · 2184 阅读 · 0 评论 -
Linux内核魔数中文说明文档
Chinese translated version of Documentation/magic-number.txtIf you have any comment or update to the content, please post to LKML directly.However, if you have problem communicating in English you can翻译 2018-01-26 21:23:41 · 1744 阅读 · 0 评论 -
在Linux内核中读写文件
http://blog.csdn.net/tommy_wxie/article/details/8193954转载 2017-02-11 10:13:51 · 900 阅读 · 0 评论 -
linux内核中访问共享资源
访问共享资源的代码区域称为临界区,临时以某种互斥机制加以保护。中断屏蔽、原子操作自旋锁和信号量是Linux设备驱动中可采用的互斥途径。在单CPU范围内避免竞态的一种简单方法是在进入临界区之前屏蔽系统的中断。CPU一般都具备屏蔽中断和打开中断的功能。中断屏蔽的使用方法:Local_irq_disable(); //屏蔽中断--->和它不同的是local_irq_原创 2016-03-08 22:04:50 · 1105 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(一)----Linux内核基础
1. Linux内核驱动模块机制 静态加载, 把驱动模块编进内核, 在内核启动时加载 动态加载, 把驱动模块编为ko, 在内核启动后,需要用时加载2. 编写内核驱动 #include <linux/module.h> #include <linux/init.h> static int __init test_init(void) { return 0; //返回0...原创 2018-03-26 22:49:51 · 932 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(二)----地址映射
#include <asm/io.h>#define ioremap(cookie,size) __arm_ioremap(cookie, size, MT_DEVICE)//cookie表示物理地址, size表示映射大小。 ioremap把指定的物理地址映射到空闲的虚拟地址void __iomem *__arm_ioremap(unsigned long phys_addr, s...原创 2018-03-26 23:01:50 · 451 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(三)----Linux内核模块加载机制
#include <linux/moduleparam.h>1. 模块参数 在驱动定义变量 static int num = 0; //当加载模块不指定num的值时则为0 module_param(变量名, 类型, 权限); 类型: byte, int, uint, short, ushort, long, ulong, bool, charp 权限不能有写的权限 传参数: ...原创 2018-03-26 23:10:09 · 351 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(四)----高级字符设备驱动
/****************** * 高级字符设备驱动 ******************/(1)ioctl除了读取和写入设备外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制。比如弹出介质,改变波特率等等。这些操作通过ioctl方法支持,该方法实现了同名的系统调用。在用户空间,ioctl系统调用的原型是:int ioctl(int fd, unsigned l...原创 2018-03-26 23:28:45 · 434 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(五)---proc文件系统
/***************** * proc文件系统 *****************/(1)/proc文件系统的特点和/proc文件的说明/proc文件系统是一种特殊的、由软件创建的文件系统,内核使用它向外界导出信息,/proc系统只存在内存当中,而不占用外存空间。/proc下面的每个文件都绑定于一个内核函数,用户读取文件时,该函数动态地生成文件的内容。也可以通过写/proc文件修改内核...原创 2018-03-26 23:31:25 · 430 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(六)----内核中链表的使用
/******************** * 内核中链表的应用 ********************/(1)介绍在Linux内核中使用了大量的链表结构来组织数据,包括设备列表以及各种功能模块中的数据组织。这些链表大多采用在include/linux/list.h实现的一个相当精彩的链表数据结构。链表数据结构的定义很简单:struct list_head { struct list_head...原创 2018-03-26 23:33:31 · 541 阅读 · 3 评论 -
Linux内核设备驱动学习笔记整理(七)----Linux内核调试技术
/****************** * 内核的调试技术 ******************/(1)内核源代码中的一些与调试相关的配置选项内核的配置选项中包含了一些与内核调试相关的选项,都集中在"kernel hacking"菜单中。包括:CONFIG_DEBUG_KERNEL使其他的调试选项可用,应该选中,其本身不会打开所有的调试功能。...具体的调试选项说明可参见驱动一书,或通过menuc...原创 2018-03-26 23:38:39 · 363 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(八)----系统调用
/**************************** * 系统调用 ****************************/SWI(1)什么是系统调用系统调用是内核和应用程序间的接口,应用程序要访问硬件设备和其他操作系统资源,必须通过系统调用来完成。在linux中,系统调用是用户空间访问内核的唯一手段,除异常和中断外,他们是内核唯一的合法入口。系统调用的数量很少,在i386上只有大概30...原创 2018-03-26 23:43:18 · 464 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(九)----虚拟文件系统
/******************** * 虚拟文件系统VFS ********************/(1)VFS介绍虚拟文件系统VFS作为内核的子系统,为用户空间程序提供了文件系统的相关接口。VFS使得用户可以直接使用open()等系统调用而无需考虑具体文件系统和实际物理介质。VFS提供了一个通用的文件系统模型,该模型囊括了我们所能想到的文件系统的常用功能和行为。通过这个抽象层,就可以实...原创 2018-03-26 23:47:04 · 355 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(十)----字符设备
/******************** * 字符设备驱动 ********************/(1)字符设备驱动介绍字符设备是指那些按字节流访问的设备,针对字符设备的驱动称为字符设备驱动。此类驱动适合于大多数简单的硬件设备。比如并口打印机,我们通过在/dev下建立一个设备文件(如/dev/printer)来访问它。用户应用程序用标准的open函数打开dev/printer,然后用writ...原创 2018-03-26 23:55:05 · 562 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(十一)----时间管理
/****************** * linux内核的时间管理 ******************/(1)内核中的时间概念时间管理在linux内核中占有非常重要的作用。相对于事件驱动而言,内核中有大量函数是基于时间驱动的。有些函数是周期执行的,比如每10毫秒刷新一次屏幕;有些函数是推后一定时间执行的,比如内核在500毫秒后执行某项任务。要区分:*绝对时间和相对时间*周期性产生的事件和推迟执...原创 2018-03-27 08:48:39 · 389 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(十二)----内存管理
-------------------------------------/********************** * linux的内存管理 **********************/到目前为止,内存管理是unix内核中最复杂的活动。我们简单介绍一下内存管理,并通过实例说明如何在内核态获得内存。(1)各种地址对于x86处理器,需要区分以下三种地址:*逻辑地址(logical addres...原创 2018-03-27 08:56:00 · 449 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(十三)----中断处理
-------------------------------------/****************** * 中断处理 ******************/(1)中断和异常的概念 (陷入)中断中断是硬件设备和处理器间的通讯机制,是由外部硬件产生的异步事件。Linux处理中断的方式很大程度上与它在用户空间处理信号是一样的。驱动程序只需要为它自己设备的中断注册一个处理程序,并且在中断到达时进...原创 2018-03-27 09:02:18 · 715 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(十四)----内核同步
/***************** * 内核同步的原理 *****************/(1)什么是内核同步所谓的内核同步就是对共享资源进行保护,防止并发访问。如果有多个执行线程(指任何正在执行的代码实例,比如一个在内核执行的进程,一个中断处理程序,或一个内核线程)同时访问和操作共享的数据,就有可能造成进程之间互相覆盖共享数据,造成被访问数据处于不一致的情况。这种错误很难跟踪和调试,但非常重...原创 2018-03-27 09:18:05 · 476 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(十五)---输入子系统与Touch Screen编程指导
<linux/input.h>1. struct input_dev 一个对象表示一个输入设备, 硬件相关struct input_dev { const char *name; //input设备的名称 unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; //支持的事件类型[1] unsigned long keybit[BITS_TO_LONGS...原创 2018-04-01 22:49:57 · 822 阅读 · 0 评论 -
Linux内核设备驱动学习笔记整理(十六)---Linux设备驱动模型与Linux Platfrom平台设备驱动模型
Linux设备驱动模型:1. struct bus_type 的对象来表示一个总线 struct device 的对象来表示一个挂在总线上的设备 struct device_driver 对象来表示一个挂在总线上的设备驱动总线: 一个总线可以挂多个设备和多个驱动。 由总线的match函数来匹配设备对应的驱动, 匹配规则在总线match函数里实现int (*match)(struct de...原创 2018-04-01 22:57:28 · 507 阅读 · 0 评论 -
一个超棒的开源解读项目【Linux内核揭秘】,一定不要错过啦!
最近投入Linux方面的学习更多了,主要是Linux内核以及Linux驱动框架的研究,以下是我自己学习总结的一些笔记,以帮助我快速复习和回忆相关的知识点:还有一个是RK平台的RKmedia...原创 2021-07-17 23:58:27 · 1875 阅读 · 5 评论 -
MTK6577+Android之Camera驱动
MTK6577+Android之Camera驱动《MTK安卓平台的Camera效果在线调试》1. Camera拍照相关概念 1.1 ISP isp——(Image Signal Processor)——影视处理 无论数码相机、摄像机或者摄像手机,其影像数据从前端感应后,皆须经过ASP(Analog Sig转载 2016-01-10 21:17:47 · 4947 阅读 · 0 评论 -
MTK Camera驱动框架学习
前面,我分析了Tpd和Keypad的驱动框架,其实大体都差不多,都是利用平台总线进行管理和注册。那么,今天要总结的是MTK平台的Camera驱动框架。参考博客:http://www.2cto.com/kf/201605/509354.html参考博客:https://wenku.baidu.com/view/5f818d537e21af45b207a807.html 参考博客:http://blo原创 2017-08-15 21:45:22 · 5033 阅读 · 2 评论 -
MTK 平台上如何给 camera 添加一种 preview size
http://blog.csdn.net/fulinwsuafcie/article/details/8351537转载 2017-03-31 00:04:50 · 1043 阅读 · 0 评论