- 博客(142)
- 收藏
- 关注
转载 Linux驱动基础:MSM平台IOMMU
IOMMU就是所谓的SMMU,它可以将不连续的物理内存组织成一个连续的虚拟内存(这对于很多驱动来说很有意义)。IOMMU把虚拟内存转换成物理内存的逻辑与CPU的MMU一样。通常,Linux很难分配好几MB大小的连续的物理内存(比如5MB或者10MB)。因为内存在使用当中都被会被碎片化,很难找到这么大且连续的物理内存大小。所以以前通常会在linux内核启动之前,把需要用到的几十MB或者上百MB的内...
2020-11-09 20:46:52
811
原创 申请中断request_irq()与request_threaded_irq()之间的不同?
在linux里,中断处理分为顶半(top half),底半(bottom half),在顶半里处理优先级比较高的事情,要求占用中断时间尽量的短,在处理完成后,就激活底半,有底半处理其余任务。底半的处理方式主要有soft_irq, tasklet, workqueue三种,他们在使用方式和适用情况上各有不同。soft_irq用在对底半执行时间要求比较紧急或者非常重要的场合,主要为一些subsystem用,一般driver基本上用不上。 tasklet和work queue在普通的driver里用的相对较多,主
2020-11-09 20:43:00
2438
原创 如何下载高通android源代码,以sm8250为例
git clone git://codeaurora.org/tools/repo.gitmkdir LA.UM.8.12.r1-11900-sm8250.0cd LA.UM.8.12.r1-11900-sm8250.0/repo/repo init -u git://codeaurora.org/platform/manifest.git -b release -m LA.UM.8.12.r1-11900-sm8250.0.xml --repo-url=git://codeaurora.org/to
2020-10-16 16:44:11
3641
1
转载 系统级性能分析工具perf的介绍与使用
系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化。性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码。代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能。在性能剖析阶段,需要借助于现有的profiling工具,如perf等。在代码优化阶段往往需要借助开发者的经验,编写简洁高效的代码,甚至在汇编级别合理使用各种指令,合理安排各种指令的执行顺序。perf是一款Linux性能分析工具。Linux性能计数器是一个新的基于内核的子系
2020-05-16 22:06:17
3169
转载 Linux内核同步 - spin_lock
一、前言在linux kernel的实现中,经常会遇到这样的场景:共享数据被中断上下文和进程上下文访问,该如何保护呢?如果只有进程上下文的访问,那在这里插入代码片么可以考虑使用semaphore或者mutex的锁机制,但是现在中断上下文也参和进来,那些可以导致睡眠的lock就不能使用了,这时候,可以考虑使用spin lock。本文主要介绍了linux kernel中的spin lock的原理以及...
2020-03-07 17:13:03
502
转载 内核页表和进程页表误区和使用
初学内核时,经常被“内核页表”和“进程页表”搞晕,不知道这到底是个啥东东,跟我们平时理解的页表有和关系。。内核页表:即书上说的主内核页表,在内核中其实就是一段内存,存放在主内核页全局目录init_mm.pgd(swapper_pg_dir)中,硬件并不直接使用。进程页表:每个进程自己的页表,放在进程自身的页目录task_struct.pgd中。在保护模式下,从硬件角度看,其运行的基本对象为“...
2020-03-01 22:20:15
1080
1
转载 Linux驱动基础:MSM平台IOMMU
IOMMU就是所谓的SMMU,它可以将不连续的物理内存组织成一个连续的虚拟内存(这对于很多驱动来说很有意义)。IOMMU把虚拟内存转换成物理内存的逻辑与CPU的MMU一样。通常,Linux很难分配好几MB大小的连续的物理内存(比如5MB或者10MB)。因为内存在使用当中都被会被碎片化,很难找到这么大且连续的物理内存大小。所以以前通常会在linux内核启动之前,把需要用到的几十MB或者上百MB的内...
2020-02-23 20:48:35
1499
转载 linux4.0内核堆栈
每一个进程(包括普通进程和内核进程)的地址空间都分为用户地址空间和内核地址空间两部分,在32位的x86机器上,用户地址空间的范围是0~3G,内核 地址空间的范围是3G~4G.对于不同的进程,其用户地址空间会随着进程不同而不同,但所有进程的内核地址空间则都是一样的。对于内核进程,由于其始终运 行在内核态,所以没有用户地址空间,其对应的tast_struct结构体中的mm域也就被赋值为NULL。而堆的...
2020-02-10 16:44:29
301
翻译 Android p Adding a New Device
Use the information in this page to create the makefiles for your device and product. Please note, unlike the other pages in this section, the contents here are applicable only when creating an entire...
2019-07-02 20:02:13
497
翻译 Android P 系统开发--添加新设备
Android系统开发--添加新设备了解编译层编译产品编写配置产品的Makefile配置产品的编译文件关系使用编译类型编译类型userdebug 准则利用资源叠加层定制版本设置 ANDROID_VENDOR_KEYS 以通过 USB 进行连接了解编译层编译层次结构包括与设备的物理结构对应的抽象层。下表中介绍了这些层。每个层都与上一层存在一对多的关系。例如,一个架构可以有多个板...
2019-07-02 19:55:53
680
转载 【实战】在Linux中如何利用backtrace信息解决问题
在Linux中如何利用backtrace信息解决问题一、导读在程序调试过程中如果遇到程序崩溃死机的情况下我们通常多是通过出问题时的栈信息来找到出错的地方,这一点我们在调试一些高级编程语言程序的时候会深有体会,它们通常在出问题时会主动把出问题时的调用栈信息打印出来,比如我们在eclipse中调试java程序时。当这些换到Linux上的C/C++环境时情况将变的稍微复杂一些,通常在这种情况下...
2019-01-10 11:31:27
335
转载 [笔记分享] [eMMC] 内核eMMC分区及对应名字读取
Chipset: msm8926 OS: Android4.4 Kernel: 3.4.0在N久之前的会议上留下了两个问题: 1. 内核在加载emmc驱动时是如何知道当前有几个分区的? 2. 如何知道/dev/mmcblkXpX对应的是哪个分区呢?读取分区加载sd/emmc驱动的时候,有如下流程: 来看看Check_partition(): 核心的部分是chec...
2019-01-09 17:52:46
4892
1
转载 eMMC之分区管理、总线协议和工作模式
eMMC 分区管理Partitions OvervieweMMC 标准中,将内部的 Flash Memory 划分为 4 类区域,最多可以支持 8 个硬件分区,如下图所示:概述一般情况下,Boot Area Partitions 和 RPMB Partition 的容量大小通常都为 4MB,部分芯片厂家也会提供配置的机会。General Purpose Partitions (GPP) ...
2019-01-09 17:39:46
574
转载 Android O 前期预研之二:HIDL相关介绍
在上一篇博客里,大致介绍了下Android O 中treble计划的一些背景与相关基本架构,这一篇中跟大家一起来探讨下HIDL相关的内容。Android HAL类型 在此之前的ANDROID版本当中Android HAL没有什么特殊的特殊的,也么有什么分类,但是从android 8.0开始,Android重构了HAL与Android FW之间的联系结构,所以Android HAL会被区分成以...
2019-01-07 09:50:27
348
转载 Linux 下的dd命令使用详解
一、dd命令的解释dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2参数注释:1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=ou...
2019-01-04 10:01:55
376
转载 用mtrace检查内存泄漏
内存泄漏检查方法(for Linux) 如果你更想读原始文档, 请参考glibc info的"Allocation Debugging" 一章 (执行info libc);glibc提供了一个检查内存泄漏的方法, 前提是你的程序使用glibc的标准函数 分配内存(如malloc, alloc...): 1. 在需要内存泄漏检查的代码的开始调用void mtrace(void) (在mchec...
2019-01-04 09:52:38
613
转载 linux内核中打印栈回溯信息 - dump_stack()函数分析
简介当内核出现比较严重的错误时,例如发生Oops错误或者内核认为系统运行状态异常,内核就会打印出当前进程的栈回溯信息,其中包含当前执行代码的位置以及相邻的指令、产生错误的原因、关键寄存器的值以及函数调用关系等信息,这些信息对于调试内核错误非常有用。打印函数调用关系的函数就是dump_stack(),该函数不仅可以用在系统出问题的时候,我们在调试内核的时候,可以通过dump_stack()函...
2019-01-03 18:45:11
834
转载 linux中普通文件和块设备文件的区别
1,概述 一直都搞不明白普通文件跟块文件的区别,总觉得一个普通的文件是存放在磁盘块上,那它既属于普通文件又属于块设备文件。刚好下午睡了一个大头觉,比较清醒,集中学习了下普通文件和块设备文件的区别和联系。 本文从基本概念,寻址空间,内核读写几个方面介绍普通文件和块设备文件的辩证统一。2,基本概念 普通文件(Regular File)。指普通意义上的文件,如数据文件、可执行文件等...
2018-12-20 12:11:20
5038
转载 在Android 8.0之后版本上添加Hidl Service
本文以LED为例在aosp上添加HIDL,以熟悉整个过程。1. 编写hal文件并编译 在hardware/interfaces/目录下创建led文件夹和基版本1.0,这个版本号分为两部分,major.minor。major版本不变得话,只能添加api,不能修改。创建ILed.hal和types.halhardware/interfaces/led/1.0/ILed.hal...
2018-12-17 17:30:35
2088
转载 CURL分别以GET、POST方式请求HTTPS协议接口api
PHP:1、curl以GET方式请求https协议接口//注意:这里的$url已经包含参数了,不带参数你自己处理哦GET很简单function curl_get_https($url){ $curl = curl_init(); // 启动一个CURL会话 curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, C...
2018-04-09 10:43:56
5282
转载 HTTP Digest authentication
什么是摘要认证摘要认证( Digest authentication)是一个简单的认证机制,最初是为HTTP协议开发的,因而也常叫做HTTP摘要,在RFC2617中描述。其身份验证机制很简单,它采用杂凑式(hash)加密方法,以避免用明文传输用户的口令。摘要认证就是要核实,参与通信的双方,都知道双方共享的一个秘密(即口令)。摘要认证流程服务器核实用户身份server收到client的HTTP re...
2018-04-04 21:23:10
8091
转载 HTTP认证方式
HTTP请求报头: AuthorizationHTTP响应报头: WWW-AuthenticateHTTP认证 基于 质询 /回应( challenge/response)的认证模式。 ◆ 基本认证 basic authentication ← HTTP1.0提出的认证方法 客户端对于每一个realm,通过提供用户名和密码来进行认证的方式。 ※ 包含密码的明文传递 基本认证步...
2018-04-04 21:21:32
680
转载 CURL库在程序中的运用浅析
这个目录的文章转载freeeyes大牛的作品前一段时间自己写了一个抓取网页代码的类,来满目一些项目需求,结果发现并不稳定,在海量网页抓取的时候,存在一些异常导致抓取失败。虽然能满足大概的要求,但是功能上还是不能让我100%的满意,于是在站长的建议下,下载了一个CUrl通用库。第一次写这样的文章,有失偏颇处请谅解,呵呵。最近把CURL运用在自己的工程里,发现效果非常理想,尤其在海量数据抓取下载的时候...
2018-03-24 21:30:17
1934
1
转载 Linux C]利用libxml2解析xml文件
为了解析xml,可以使用Linux下默认安装的libxml2。[cpp] view plaincopy/* a.c 功能:利用libxml2解析xml文件 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #...
2018-03-06 19:42:29
1839
转载 嵌入式linux对xml文件的操作(expat篇)
前段时间在项目中用到了涉及到了xml文件的解析,环境是嵌入式linux,在此简单总结一下留个记录,也跟大家分享一下。 我在项目中用的是expat解析库,还有很多其它的库可以使用,比如libxml、minixml等,它们之间有些差别,下面是从网上粘来的说法。 目前的xml解析器一般有两种解析的形式.一种是DOM模型的,一种是SAX2模型的.DOM模型是讲xml文件中的结构...
2018-02-28 11:38:16
2110
转载 libcurl 使用及例程
前段时间写了个linux下的多线程下载工具, 使用到了强大的libcurl库. 现将libcurl的使用总结如下:关于libcurl的文章网络上很多, 这里不再描述. 以下是如何使用libcurl的例子.一、常用函数 1) libcurl的全局初始化及释放 CURLcode curl_global_init(long flags) flags: CUR...
2018-02-27 18:13:17
584
转载 libcurl在嵌入式设备C 的使用
最近用海思hi3518E开发了个wifi摄录一体机,现在要用http实现信息推送功能,比如在设备发生报警录像时就会推送一条信息“有异常入侵!”和一张抓拍图像到服务器,然后当客户的手机上网时,就会受到推送的信息。在网上下载了curl的开源库,可以用C实现http功能。一、curl库的编译curl的下载地址是http://curl.haxx.se/download.html,详细的编译步骤参考http...
2018-02-27 16:17:09
424
转载 linux下编译安装libcurl(附使用示例)
linux下编译安装libcurl(附使用示例) qianghaohao(CodeNutter) 说明:在编译任何开源代码前可以先看看README, INSTALL等文件,会提供如何编译的信息。在此教程中通过阅读README和GIT-INFO文件可以得到很多编译安装信息。在GIT-INFO中很明显地说了执行:./buildconf产生configure配置...
2018-02-27 12:09:10
739
转载 linux下LibCurl编程
1.LibCurl简介 LibCurl是免费的客户端URL传输库,支持FTP,FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE ,LDAP等协议,其主页是http://curl.haxx.se/。Libcurl具备线程安全、IpV6兼容、易于使用的特点。本文档主要介绍LibCurl在http协议方面的应用。1.1HTTP协议格式 ...
2018-02-27 11:56:38
861
转载 Linux进程间通信——使用匿名管道
在前面,介绍了一种进程间的通信方式:使用信号,我们创建通知事件,并通过它引起响应,但传递的信息只是一个信号值。这里将介绍另一种进程间通信的方式——匿名管道,通过它进程间可以交换更多有用的数据。一、什么是管道如果你使用过Linux的命令,那么对于管道这个名词你一定不会感觉到陌生,因为我们通常通过符号“|"来使用管道,但是管理的真正定义是什么呢?管道是一个进程连接数据流到另一个进程的通道,它通常是用作...
2018-02-26 15:10:09
172
转载 Linux进程间通信——使用命名管道
在前一篇文章Linux进程间通信——使用匿名管道中,我们看到了如何使用匿名管道来在进程之间传递数据,同时也看到了这个方式的一个缺陷,就是这些进程都由一个共同的祖先进程启动,这给我们在不相关的的进程之间交换数据带来了不方便。这里将会介绍进程的另一种通信方式——命名管道,来解决不相关进程间的通信问题。一、什么是命名管道命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系统中以文件名的形式存...
2018-02-26 15:07:44
134
转载 Linux 信号详解三(sleep,raise)
sleep()函数1.sleep()函数作用:让进程睡眠2.能被信号打断,然后处理信号函数以后,就不再睡眠,直接向下执行代码3.sleep函数的返回值是剩余秒数//sleep 函数#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#in...
2018-02-26 14:55:42
869
转载 Linux 信号详解二(信号分类,信号处理,kill)
信号分类信号分为可靠信号和不可靠信号不可靠信号的缺点 ①:处理完信号,需要重新再注册信号;②信号可能丢失。Linux已经对缺点①做了优化,现在的不可靠问题主要指的是信号可能丢失信号还可以分为实时信号和非实时信号--一般不可靠信号指的是前32种信号,这32种信号已经有了预定义值,每个信号有了确定的用途及含义,并且每种信号都有各自的缺省动作--可靠信号指的后32种信号--非实时信号都不支持...
2018-02-26 14:54:24
284
转载 Linux 信号详解一(signal函数)
SIGABRT 进程停止运行 6SIGALRM 警告钟 SIGFPE 算述运算例外SIGHUP 系统挂断SIGILL 非法指令SIGINT 终端中断 2SIGKILL 停止进程(此信号不能被忽略或捕获)SIGPIPE 向没有读的管道写入数据SIGSEGV ...
2018-02-26 14:50:49
221
转载 linux 使用getopt_long()从命令行获取参数,struct option
函数说明#include函数说明:函数getopt用来解析命令行参数。函数getopt_long支持长选项的命令行解析。函数原型:intgetopt_long(int argc, char* constargv[], const char*optstring, const struct option*longopts...
2018-02-26 14:47:44
514
转载 深入理解CMA
LinuxKernelMemoryManagement摘要:连续内存分配(简称CMA) 是一种用于申请大量的,并且物理上连续的内存块的方法,在LWN上可以追溯到2011年6月。原理虽简单,但是其实现起来却相当复杂,因为需要许多子系统之间相互协作。基于不同人的视角,有很多不同的事需要完成和注意。在本文中,我会描述如何使用CMA并且如何将其集成到一个特...连续内存分配(简称CMA)
2017-12-06 21:40:28
1873
转载 設置Linux保留物理內存arm_memblock_init並使用 (1)
阅读目录(Content)平臺參考博文代碼調用方法一方法二方法三在Linux系統中可以通過memblock來設置系統保留物理內存,防止這些內存被內存管理系統分配出去。 作者: 彭東林郵箱: pengdonglin137@163.com 回到顶部(go to top)平臺硬件平臺: TQ2440Linux版本:L
2017-12-06 21:27:48
1030
转载 How to check memory leaks in android app?
什么是内存泄漏?有些对象只有有限的生命周期。当它们的任务完成之后,它们将被垃圾回收。如果在对象的生命周期本该结束的时候,这个对象还被一系列的引用,这就会导致内存泄漏。持续累加,内存很快被耗尽。比如,当 Activity.onDestroy 被调用之后,activity以及它涉及到的 view 和相关的 bitmap 都应该被回收。但是,如果有一个后台线程持有这个 activ
2017-12-06 11:30:32
615
原创 内存问题的排查工具和方法– Clang的AddressSanitizer
How to use asan to debug native memory bugs?AddressSanitizer (ASan)是Google开发的一款用于检查Native内存错误的工具,类似于Valgrind。其官网介绍如下:AddressSanitizer (ASan) is a fast compiler-based tool for detecti
2017-12-05 21:15:23
4909
转载 kmemleak的使用
目录(?)[-]内核泄露检测kmemleak介绍用法功能实现的基本方法原理Kmemleak API处理假阳性阴性限制和缺点测试的特定部分kmemleak 内核泄露检测(kmemleak)介绍:Kmemleak 提供了一种可选的内核泄漏检测,其方法类似于跟踪内存收集器。(http://en.wikipedia.org/wiki/Garbage_
2017-12-05 17:30:10
890
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人