- 博客(138)
- 资源 (1)
- 收藏
- 关注
转载 android.mk转换为android.bp
1.0 类似例子android.mk大家都很熟悉了,就是android下编译模块的配置文件,可以理解为android makefile。从android N之后,我们发现好多模块下面没有了android.mk文件,多了一个android.bp文件。这个是google在android N之后新的编译配置文件。在实际项目中,我们需要把android.mk转换为android.bp,还好sdk中给我提...
2019-02-18 14:18:59
1938
原创 vndk: (native:vendor) should not link to libcamera_client (native:platform)
1.0 相似例子2-21 17:47:30.305 4365 4365 E CamX : [ERROR][UTILS ] camxosutilslinux.cpp:874 LibMap() dlopen: dlopen failed: library “libstdc++.so” not found, on ‘/vendor/lib64/camera/components/com.**.so’...
2019-02-18 13:31:00
16166
2
转载 [c++11]多线程编程(六)——条件变量(Condition Variable)
转自:https://www.jianshu.com/p/c1dfa1d40f53互斥锁std::mutex是一种最常见的线程间同步的手段,但是在有些情况下不太高效。假设想实现一个简单的消费者生产者模型,一个线程往队列中放入数据,一个线程往队列中取数据,取数据前需要判断一下队列中确实有数据,由于这个队列是线程间共享的,所以,需要使用互斥锁进行保护,一个线程在往队列添加数据的时候,另一个线程...
2019-01-30 17:25:30
342
转载 [c++11]多线程编程(五)——unique_lock
[c++11]多线程编程(五)——unique_lock转自:https://www.jianshu.com/p/34d219380d90互斥锁保证了线程间的同步,但是却将并行操作变成了串行操作,这对性能有很大的影响,所以我们要尽可能的减小锁定的区域,也就是使用细粒度锁。这一点lock_guard做的不好,不够灵活,lock_guard只能保证在析构的时候执行解锁操作,lock_gua...
2019-01-18 20:55:30
284
转载 [c++11]多线程编程(四)——死锁(Dead Lock)
[c++11]多线程编程(四)——死锁(Dead Lock)转自:https://www.jianshu.com/p/c01e992a3d9d死锁如果你将某个mutex上锁了,却一直不释放,另一个线程访问该锁保护的资源的时候,就会发生死锁,这种情况下使用lock_guard可以保证析构的时候能够释放锁,然而,当一个操作需要使用两个互斥元的时候,仅仅使用lock_guard并不能保证不会...
2019-01-18 20:45:41
393
2
转载 [c++11]多线程编程(三)——竞争条件与互斥锁
[c++11]多线程编程(三)——竞争条件与互斥锁转自:https://www.jianshu.com/p/4a2578dd9b5d竞争条件并发代码中最常见的错误之一就是竞争条件(race condition)。而其中最常见的就是数据竞争(data race),从整体上来看,所有线程之间共享数据的问题,都是修改数据导致的,如果所有的共享数据都是只读的,就不会发生问题。但是这是不可能的,...
2019-01-18 20:02:00
643
转载 [c++11]多线程编程(二)——理解线程类的构造函数
[c++11]多线程编程(二)——理解线程类的构造函数转自:https://www.jianshu.com/p/109df8a7e627构造函数的参数std::thread类的构造函数是使用可变参数模板实现的,也就是说,可以传递任意个参数,第一个参数是线程的入口函数,而后面的若干个参数是该函数的参数。第一参数的类型并不是c语言中的函数指针(c语言传递函数都是使用函数指针),在c++...
2019-01-18 15:27:50
344
转载 [c++11]多线程编程(一)——初识
[c++11]多线程编程(一)——初识转自:https://www.jianshu.com/p/5d273e4e3cbb什么是并发并发在生活中随处可见,边走路边说话,边听歌边写代码。计算机术语中的"并发",指的是在单个系统里同时执行多个独立的活动,而不是顺序的一个接一 个的执行。对于单核CPU来说,在某个时刻只可能处理一个任务,但它却不是完全执行完一个任务再执行一个下一任务,而是一直在...
2019-01-18 14:51:59
220
转载 vim的分屏功能
vim的分屏功能总结起来,基本都是ctrl+w然后加上某一个按键字母,触发一个功能。(1)在shell里打开几个文件并且分屏: vim -On file1 file2 ... vim -on file1 file2 ...大O表示垂直分割(vertical),小o表示水平分割(默认horizontal),后面的n表示分几个屏,实际上我觉得不用写,默认按后面要分割的文件数来决定分几个屏。(2)在...
2018-07-03 16:48:51
215
转载 dts实例分析
1. dts和dtsi完成的功能以下是两段较为常见的dtsi和dts代码 1 uart5: serial@021f4000 { 2 compatible = "fsl,imx6sx-uart", 3 "fsl,imx6q-uart", "fsl,imx21-uart"; 4 reg = <0x021f4000 0x4000>; 5...
2018-05-16 20:41:43
690
转载 内核泄露检测(kmemleak)
内核泄露检测(kmemleak)介绍:Kmemleak 提供了一种可选的内核泄漏检测,其方法类似于跟踪内存收集器。(http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29#Tracing_garbage_collectors)当独立的对象没有被释放时,其报告记录在 /sys/kernel/debug/kmemle...
2018-05-16 20:17:27
853
转载 Linux中动态内存的分配与回收
1.malloc 和free的原理(http://m.blog.csdn.net/article/details?id=39496057)从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。1、brk是将数据段(.data)的最高地址指针_edata往高地址推;2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的...
2018-05-16 20:10:20
3024
转载 linux物理内存管理-伙伴系统
linux使用伙伴系统来管理物理内存页。一、伙伴系统原理1. 伙伴关系定义:由一个母实体分成的两个各方面属性一致的两个子实体,这两个子实体就处于伙伴关系。在操作系统分配内存的过程中,一个内存块常常被分成两个大小相等的内存块,这两个大小相等的内存块就处于伙伴关系。它满足 3 个条件 : 两个块具有相同大小记为 2^K 它们的物理地址是连续的 从同一个大块中拆分出来2. 伙伴算法的实现原理为了便于页面...
2018-05-16 20:07:29
3377
转载 linux内核内存管理-slab分配器
一、内核内存分配在linux内核中伙伴系统用来管理物理内存,其分配的单位是页,但是向用户程序一样,内核也需要动态分配内存,而伙伴系统分配的粒度又太大。由于内核无法借助标准的C库,因而需要别的手段来实现内核中动态内存的分配管理,linux采用的是slab分配器。slab分配器不仅可以提供动态内存的管理功能,而且可以作为经常分配并释放的内存的缓存。通过slab缓存,内核能够储备一些对象,供后续使用。需...
2018-05-16 19:03:02
367
转载 进程分配内存的两种方式--brk() 和mmap()(不设计共享内存)
如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看。 majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误。 这两个数值表示一个进程自启动以来所发生的缺页中断的次数。发成缺页中断后,执行了那些操作?当一个进程发生缺页中断的时候,进程会陷...
2018-05-16 16:17:12
345
转载 brk系统调用实现分析
brk(addr)直接修改堆的大小。addr指定current->mm->brk的新值,返回值是线性区新的结束地址,这是一个系统调用。当用户态的进程调用brk()系统调用时,内核执行sys_brk(addr)函数。下面分析这个函数的执行流程:1:检测addr参数是否位于进程代码段所在的线性区,如果是直接返回,因为堆不能与进程代码段所在的线性区重合。[cpp] view plain co...
2018-05-16 16:01:41
1360
转载 crash工具分析sysdump
kdump简介 kdump是系统崩溃的时候,用来转储运行内存的一个工具。系统一旦崩溃,内核就没法正常工作了,这个时候将由kdump提供一个用于捕获当前运行信息的内核,该内核会将此时内存中的所有运行状态和数据信息收集到一个dump core文件中以便之后分析崩溃原因。一旦内存信息收集完成,可以让系统将自动重启。 kdump是RHEL5之后才支持的,2006被主线接收为内核的一部分。它的原理简单来说是...
2018-05-15 21:07:30
5190
转载 dmesg 命令的使用范例
dmesg 命令的使用范例‘dmesg’命令设备故障的诊断是非常重要的。在‘dmesg’命令的帮助下进行硬件的连接或断开连接操作时,我们可以看到硬件的检测或者断开连接的信息。‘dmesg’命令在多数基于Linux和Unix的操作系统中都可以使用。下面我们展示一些最负盛名的‘dmesg’命令工具以及其实际使用举例。‘dmesg’命令的使用语法如下。# dmesg [options...]1. 列出加...
2018-05-15 20:48:59
573
转载 dmesg总结
1.dmesg介绍在dmesg里我们可以查看到开机信息,printk产生的信息等。若研究内核代码,在代码中插入printk函数,然后通过dmesg观察是一个很好地方法。 2.dmesg输出含义dmesg 输出的数字含义是什么,纠结了一会儿,下面给出解释终端输入dmesg,可以看到每行最开始显示的是一个综括号,里面的数字为timestamp,时间戳,该时间指示的系统从...
2018-05-15 20:47:57
536
转载 内核日志及printk结构浅析
一、printk概述 对于做Linux内核开发的人来说,printk实在是再熟悉不过了。内核启动时显示的各种信息大部分都是通过她来实现的,在做内核驱动调试的时候大部分时候使用她就足矣。她之所以用得如此广泛,一个是由于她使用方便,还有一个重要的原因是她的健壮性。它使用范围很广,几乎是内核的任何地方都能调用它。你既可以在中断上下文、进程上下中调用她,也可以在任何持...
2018-05-15 20:18:20
232
转载 pr_debug、dev_dbg等动态调试三
pr_debug、dev_dbg等动态调试三转:https://www.cnblogs.com/pengdonglin137/p/4622460.html阅读目录(Content)IntroductionDynamic debug has even more useful features:Controlling dynamic debug BehaviourViewing Dynamic Deb...
2018-05-15 20:09:43
346
转载 kernel文件动态调试功能 -- dynamic_debug 打开及半闭
Kernel def_config中需要打开以下两个宏:/kernel/arch/arm/configsCONFIG_DEBUG_FS=y CONFIG_DYNAMIC_DEBUG=y (1)step1:open pr_debugadb rootadb remountadb shell打开动态调试#echo 'file sprdfb_main.c +p' > /sys/kernel/debu...
2018-05-15 20:02:42
846
转载 自旋锁
自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。 由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。 信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用(_trylock的变种能够...
2018-05-15 16:26:33
112
转载 Linux common clock framework(2)_clock provider
Linux common clock framework(2)_clock provider转自:http://www.wowotech.net/pm_subsystem/clock_provider.html1. 前言本文接上篇文章,从clock driver的角度,分析怎么借助common clock framework管理系统的时钟资源。换句话说,就是怎么编写一个clock driver。由...
2018-05-07 14:17:09
490
转载 Linux common clock framework(1)_概述
Linux common clock framework(1)_概述转自:http://www.wowotech.net/linux_kenrel/clk_overview.html1. 前言common clock framework是用来管理系统clock资源的子系统,根据职能,可分为三个部分:1)向其它driver提供操作clocks的通用API。2)实现clock控制的通用逻辑,这部分和硬...
2018-05-07 13:37:14
159
原创 __raw_readl/__raw_writel与readl/writel
What's the difference between __raw_readl/__raw_writel and readl/writel in linux kernel? raw denotes native byte ordering, non-raw means little-endianthe __ prefix alternatives don't include memory b...
2018-05-07 12:42:47
1441
原创 gpio简单使用
1.0 struct gpio_chipstruct gpio_chip代表一个gpio控制器。用一个全局数组保存所有的gpio控制器。 90 struct gpio_chip { 91 >---const char>->---*label; 92 >---struct device>-->---*dev; 93 >---struct device&...
2018-05-07 10:28:23
2582
转载 android 休眠唤醒机制分析— wake_lock
Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一有效的wake_lock,系统就不能进入深度休眠,但可以进行设备的浅度休眠操作。wake_lock一般在关闭lcd、tp但系统仍然需要正常运行的情况下使用,比如听歌、传输很大的文件等。Wake lock - wakelock在android的电源管理系统中扮演一个核心的角色,wakelock是一种锁的机制, 只要有task拿...
2018-04-26 20:14:11
627
原创 dts文件解读
/ {compatible = "acme,coyotes-revenge";#address-cells = <1>;#size-cells = <1>;interrupt-parent = <&intc>;cpus {#address-cells = <1>;#size-cells = <0>;cpu@0 {..
2018-04-26 14:55:48
6368
转载 i2c时序图的详细讲解
i2c简易时序图 启动信号: SCL为高电平的时候,SDA由高电平向低电平跳变。结束信号:SCL为高电平的时候,SDA由低电平向高电平跳变。 应答信号: I2C总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规...
2018-04-25 21:25:22
209050
13
转载 linux下I2C驱动架构全面分析
I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线。 因此,I2C总线被非常广泛地应用在EEPROM,实时钟,小型LCD等设备与CPU的接口中。 linux下的驱动思路 在linux系统下编写I2C驱动,目前主要有两种方法,一种是把I2C设备当...
2018-04-25 19:37:31
182
转载 [转载]Linux设备驱动程序架构分析之I2C架构(基于3.10.1内核)
I2C体系架构的硬件实体包括两部分:硬件I2C Adapter:硬件I2C Adapter表示一个硬件I2C适配器,也就是I2C控制器。一般是SOC中的一个接口,也可以用GPIO模拟。硬件I2C Adapter主要用来在I2C接口上产生I2C时钟信号和数据信号。硬件I2C Device:表示一个I2C从设备,I2C从设备并行的挂接在I2C总线上,通过I2C接口与I2C主控制器通信。Linux的I2...
2018-04-25 17:18:31
355
原创 原子操作
整型原子操作atomic_t v = ATOMIC_INIT(0);//定义原子变量v并初始化为0void atomic_set(atomic_t *v, int i);//设置原子变量的值为iatomic_read((atomic_t v);//返回原子变量的值void atomic_add(int i, atomic_t v);//原子变量加ivoid atomic_sub(int i...
2018-04-20 15:39:54
367
1
转载 kmalloc参数flags
#include <linux/slab.h> void *kmalloc(size_t size, int flags);给 kmalloc 的第一个参数是要分配的块的大小. 第 2 个参数, 分配标志, 非常有趣, 因为它以几个方式控制 kmalloc 的行为.最一般使用的标志, GFP_KERNEL, 意思是这个分配((内部最终通过调用 __get_free_pages 来进行,...
2018-04-20 14:39:59
995
原创 字符设备驱动
1.字符设备结构体 12 struct cdev { 13 >---struct kobject kobj; 14 >---struct module *owner;//THIS_MODULE 15 >---const struct file_operations *ops;//支持的文件操作 16 >---struct list_head list; 17 &g...
2018-04-20 11:11:13
106
转载 内核文件操作
一 内核文件操作1.filp_open()打开文件struct file * filp_open(const char * name, int open_mode, int mode)参数说明:name:要打开或创建的文件名(包含路径)open_mode:文件打开方式,O_CREAT,O_RDWR,ORDONLY等。mode:创建文件时使用,设置文件权限,其他情况可设为02.读写文件ker...
2018-04-19 12:16:29
1246
转载 AXI总线简介
原文链接 http://www.cnblogs.com/lkiller/p/4773235.html原文内容:0.绪论AXI是高级扩展接口,在AMBA3.0中提出,AMBA4.0将其修改升级为AXI4.0。AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-streamAXI4.0-lite是AXI的简化版本,ACE4.0 是AXI缓存一致性扩展接口,AXI4.0...
2018-04-18 20:31:24
319
原创 linux内核并发控制-互斥体、自旋锁、中断屏蔽
在linux内核中,主要的竞态发生于如下几种情况:1.对称多处理器(SMP)的核间并发cpu0的进程/中断与cpu1的进程\中断之间的并行。2.单cpu内进程与抢占它的进程进程与抢占它的进程访问共享资源类似于SMP的多个cpu3.中断与进程之间(核间或核内并发)中断可以打断正在执行的进程,如果中断服务程序访问进程正在访问的资源,则竞态也会发生。linux2.6.35之后就取消了中断的嵌套,...
2018-04-17 14:02:21
587
原创 android消息分发机制之Java层Handler,Looper,Message及MessageQueue
先看android提供的一个关于Handler、Looper使用的最简单范例:class LooperThread extends Thread {//线程类,在这个线程中会启用消息分发机制 public Handler mHandler; //启动线程时会调用线程的run()方法 public void run() { Looper.prepar...
2018-04-15 17:32:06
734
转载 android开发之多线程编程Thread和Runnable使用
Android有两种方式实现多线程,一种是继承Thread类,覆写run()方法。一种是实现Runnable接口,再用该实现创建Thread。第一种方式:Java中一个类只能继承一个父类,该方式的局限性所在。package com.vixtel.tools; public class SyncThread extends Thread { @Override ...
2018-04-14 19:26:17
490
OpenCV.2.Computer.Vision.Application.Programming.Cookbook.pdf
2014-08-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人