自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

haofeng_ma的博客

哪里会是你的极限

  • 博客(30)
  • 收藏
  • 关注

原创 Linux内核态内存泄漏检测工具--kmemleak工具原理及应用

kmemleak通过追踪kmalloc(), vmalloc(), kmem_cache_alloc()等函数,把分配内存的指针和大小、时间、stack trace等信息记录在一个红黑树中,等到调用free释放内存时就把相应的记录从红黑树中删除。也就是说红黑树中的记录就是已经分配出去但尚未释放的内存,其中有些内存尚未释放是因为还在被使用,这属于正常情况,而不正常的情况,即真正“泄漏”的内存都是不会再被使用的

2022-10-24 10:27:43 3078

原创 Android Sensor调试

Sensor调试总结高通平台高通平台的adsp子系统的打印需要通过QXDM来抓取,但开机初始化的那一段往往是抓取不到的,因为QXDM要开机一段时间后才能连接,但那时候sensor初始化已经过了,所以前期sensor初始化注册不成功定位起来比较麻烦。(1)现有两种办法可以打印出初始化的打印,第一种是在初始化函数里面加延时,步骤如下:在ADSP.VT.5.3/adsp_proc/ssc/utils/osa/hexagon_user_pd_slpi/sns_user_pd_init.c的sns_user_p

2022-09-13 13:56:45 1763

原创 Android Input框架梳理

Android Input框架梳理Android input子系统框架触摸屏驱动上传数据通过input子系统上报,在分析驱动之前,先来看一下Android Input子系统的整体框架(图1)。Android系统基于Linux内核实现,内核作为整个操作系统的核心,对下,它负责整个硬件的驱动、实现对硬件器件的控制管理;对上,它提供各种系统所需的核心功能。Android系统支持的输入设备较多,如按键、触摸屏、手柄等,面对种类繁杂的输入设备,内核通过抽象化的方式来使得各输入设备的的核心处理流程统一化,细节处理流

2022-08-09 15:50:30 2058

原创 Linux input子系统上报事件讲解(以重力传感器lis2dw12驱动为例)

input子系统背景以前我们写一些输入设备(键盘、鼠标等)的驱动都是采用字符设备、混杂设备处理的。问题由此而来,Linux内核为了能够处理各种不同类型的输入设备,(比如 触摸屏 ,鼠标 , 键盘 , 操纵杆 ),设计并实现了为驱动层程序的实现提供统一接口函数;为上层应用提供试图统一的抽象层 , 即是Linux 输入子系统 。引入输入子系统的好处:统一了物理形态各异的相似的输入设备的处理功能。例如,各种鼠标,不论PS/2、USB、还是蓝牙,都被同样处理。驱动不必创......

2022-08-05 13:50:19 1527

原创 Android SensorManager学习

SensorManager在SensorManager.java文件的开头,有一段sensor应用的示例。应用层获取sensor的数据主要是通过SensorManager的onAccuracyChanged和onSensorChanged两个监听接口。public class SensorActivity extends Activity, implements SensorEventListener { private final SensorManager mSensorManager; p

2022-08-04 10:52:04 1977

原创 Linux内核高精度定时器hrtimer

Linux内核高精度定时器hrtimer一、内核为高精度定时器重新设计了一套软件架构,它可以为我们提供纳秒级的定时精度,以满足对精确时间有迫切需求的应用程序或内核驱动,下面简单介绍下hrtimer(high resolution timer)高精度定时器的使用。二、hrtimer_init函数初始化定时器工作模式。clock_id一般是CLOCK_REALTIME、CLOCK_MONOTONIC,mode则可以是相对时间HRTIMER_MODE_REL,也可以是绝对时间HRTIMER_MODE_ABS。

2022-08-04 10:49:09 786

原创 Android系统框架学习

Android系统框架 下图为一张Google官方提供的经典分层架构图,从下往上依次分为Linux内核层、硬件抽象层HAL、系统运行库层、应用程序框架层以及应用程序层这5层架构,其中每一层都包含大量的子模块或子系统。 Linux内核层 Android的底层是基于Linux操作系统的。从严格意义上来讲,它属于Linux操作系统的一个变种。Android选择在Linux内核的基础上来搭建自己的运行平台有几个好处。首先,避开了与硬件直接打交道。Li...

2021-03-03 15:57:05 770 1

原创 busybox制作文件系统--文件系统篇

文件系统是用来做什么的?存储设备(块设备,像硬盘、flash等)是分块(扇区)的,物理上底层去访问存储设备时是按照块号(扇区号)来访问的。文件系统是一些代码,是一套软件,这套软件的功能就是对存储设备的扇区进行管理,将这些扇区的访问变成了对目录和文件名的访问。我们在上层按照特定的目录和文件名去访问一个文件时,文件系统会将这个目录+文件名转换成对扇区号的访问。最后,不同的文件系统的差异就在于对这些...

2019-11-11 23:32:08 1171

原创 malloc申请内存问题

问题描述 最近发现了一个越界有概率会造成段错误的问题。具体问题是这样的,首先malloc申请一块内存,但使用时比实际的大一个字节,比如我申请了52个字节,使用了53个或者申请50个使用了51个,然后我发现的现象是当我申请了52个字节使用了53个字节的时候,程序肯定会挂掉,但申请了50个字节使用了51个的时候程序是不会挂的。同样是越界,为什么会造成这样的结果呢?问题排查于是,做了一个的...

2019-09-18 09:08:24 5948 7

原创 通过libxml2的xpath解析xml

Xpath简介XPath 是一门在 XML 文档中查找信息的语言, 基于XML的树状结构,提供在数据结构树中找寻节点的能力,用于在 XML 文档中通过元素和属性进行导航。XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。xpath表达式的基本格式xpath通过"路径表达式"(Path Expression...

2019-08-12 10:35:12 3251

原创 基于s5pv210的Linux内核裁剪--Linux内核篇

Linux内核裁剪操作系统的内核是应用程序赖以运行的环境,内核可以说是操作系统的核心部分。因为Linux是开源的操作系统,可以将不需要的功能进行裁剪,所以本设计将需要的功能添加,不需要的功能将删除,本设计的内核采用Linux2.6.35版本。本人的开发环境是window10、VMWare 12.5.2和Ubuntu 16.04,交叉编译器是arm-2009q3具体的裁剪如下:1.修改M...

2019-08-11 21:58:20 741

原创 基于s5pv210的Uboot配置--Uboot篇

U-Boot简介每个操作系统都需要一个引导程序,如下表所示,是几种Linux支持的引导程序,目前还没有做到可以适应全部嵌入式产品的引导程序,所以只能尽量的让一个Boot Loader 代码支持多种不同的构架和操作系统,并让它有很好的可移植性。而U-boot 就是一个支持多平台多操作系统的引导程序,这也是U-boot 的优势所在,而且U-boot 的代码是开源的,对于新功能的添加也十分容易。...

2019-08-08 22:57:00 776

原创 Makefile自动增量编译

前言前两天在工作中用到了Makefile的自动增量编译,发现它非常好用,尤其在工程中,你添加了新的模块,仅仅需要在Makefile里添加你模块文件夹的路径,就可以推导出该文件夹下的.c或者.cpp文件的编译。实例首先,我在一个test的文件夹下创建了三个文件夹include test1 test2,这三个文件夹下分别放着test2.h\test1.c\test2.c ,然后在创建...

2019-08-02 16:57:19 3117

原创 基于Linux+ARM的远程视频监控--硬件篇

硬件资源本视频监控系统主要采用的硬件是GEC210为主板的开发板和USB数码高清摄像头,开发板将从USB摄像头收集到的视频数据发送到网络服务器,然后电脑和手机客户端通过网络服务器将视频数据接收并显示。可能有人想问为什么是采用GEC210,主要是本人手上当时就这一个开发板,而且我需要的基本功能都满足了,所以那就用它啦。GEC210开发板GEC210采用了S5pv210处理器,S5pv210是一...

2019-07-31 22:46:26 2298 2

原创 基于Linux+ARM的远程视频监控--系列开题

前言毕业一个多月了,时间过得很快,一直想着记录一下自己做的毕设,出来工作后发现属于自己的时间不多了,有时候还是挺怀念在学校实验室的时光。我毕设的名称,基于Linux+ARM的远程视频监控。可能有人会感兴趣为什么要做这个作为毕设,一方面主要是我现在从事的是安防行业,想提前了解一下这相关方面的知识,还有另一方面主要是我想在家里装一个摄像头在远程监控,所以就想着自己动手做一个咯。有不足和不对的地方还望...

2019-07-29 22:55:19 1447 2

原创 关于内存泄漏问题(共享内存、请求调页、缺页异常处理)

1. 问题描述 最近发现了一个问题,当不同的进程申请了同一块共享内存时,会有内存泄漏现象,即当程序运行时,有些进程的内存会逐渐 增加,波动幅度较为明显。2.问题排查 通过调试排查,我们发现是共享内存引起的。我们用两个进程分别初始化同一个共享内存(5M),然后什么都不做,测试结果是第一个进程占用的内存是5M左右,第二个进程占用的内存是200K左右,结果如下图所示。...

2019-04-26 16:15:10 1896

原创 字符串转换十六进制、二进制、十进制返回int类型(类似实现atoi函数)

 刚做了笔试,记录一下其中一道算法题。编写一个函数,该函数功能就是把传入的字符串识别出十六进制、十进制、二进制,然后进行转换返回int类型,十六进制的前缀"0x",如"0x1f",二进制的前缀是"0",如"01011",十进制无前缀。下面代码仅供参考,如有错误还望指出。#include <stdio.h>#include <stblib.h>int fun(con

2019-02-21 21:37:58 922

原创 输入一个IP地址判断其合法性(运用strtok函数)

   之前遇到过一道这样的面试题,编写一个函数,功能是判断一个IP地址的合法性,传入参数为字符串,而且需要匹配十六进制的IP地址(例B2.168.2.13是合法的,因为转换成十进制后等于112.168.2.13)。当时我就想到了牛客上的一道题目:输入一个ip地址,判断是否合法。然后就想到了当时看到的答案,代码如下:#include <stdio.h>int main(){ ...

2019-02-21 13:29:06 977

原创 返回在字符串1中字符串2首次出现的地址,重新复现strstr(使用KMP算法)

  之前面试碰到一道这样的题目,实现一个函数,返回在字符串1中字符串2首次出现的地址,并打印出处于字符串1的第几位。我当场就想到了用strstr函数,于是很快就写出了下面的代码。#include <stdio.h>#include <string.h>int main(){ char a[10]="abcdefg"; char b[10]="cdef...

2019-02-19 11:41:24 601

原创 与线程有关的几个函数pthread_create、pthread_detach、pthread_join、pthread_mutex_lock、pthread_cond_wait等用法

     线程,有时被称为轻量进程,在我们平常开发中经常会用到,关于线程的介绍网上有很多,在这里我就不再做介绍了。我主要介绍下载Linux我们经常用到的几个与线程有关的函数。pthread_create    创建线程函数,函数声明为        int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *res...

2019-02-02 16:44:12 4152 6

原创 信号量sem_init()、sem_wait()、sem_post()的简单用例

sem_init:int sem_init(sem_t *sem, int pshared, unsigned int value); sem_init函数是Posix信号量操作中的函数。sem_init() 初始化一个定位在 sem 的匿名信号量。value 参数指定信号量的初始值。 pshared 参数指明信号量是由进程内线程共享,还是由进程之间共享。如果 pshared 的值为...

2019-01-28 17:18:01 4171

原创 C程序中根据ifconfig命令的过程获取Linux本地ip

    Ifreq结构用来配置ip地址、获取ip、获取MTU等等关于网卡的信息,Linux下可以使用ioctl()函数以及结构体struct ifreq来获取网卡的各种信息。    在Linux系统中获取IP地址通常都是通过ifconfig命令来实现的,然而ifconfig命令实际是通过ioctl接口与内核通信。    ioctl( Sock, SIOCGIFCONF, &ifr)...

2019-01-26 15:33:22 857

原创 Linux下闹钟函数alarm的常见用法

      alarm(闹钟函数),是一个比较简单且实用的函数。当定时器指定的时间到时,它向进程发送SIGALRM信号。可以设置忽略或者不捕获此信号,如果采用默认方式其动作是终止调用该alarm函数的进程。   在调用前需要写处理函数myAlarm,当捕获到该信号时(设置的时间到了)就会执行该函数。signal( SIGALRM, myAlarm );  alarm函数只有一个...

2019-01-26 14:52:24 2370

转载 makefile自动增量编译技术

#makefile#################################################################################################用wildcard通配符指定当前路径下的所有以.cpp结尾的文件名CXX_CPP := $(wildcard *.cpp)#把所有以.cpp结尾的文件名转换为.o结尾的文件名,编...

2019-01-14 16:55:24 2738

原创 Linux基础

1.什么是进程? "进程是可并发执行的程序在一个数据集合上的运行过程"。进程是一个程序的一次执行的过程。它和程序是有本质区别的,程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念;而进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程。它是程序执行和资源管理的最小单位。因此,对系统而言,当用户在系统中键入命令 执行一个程序的时候,它将启动一个进程...

2018-07-02 16:19:27 213

原创 Linux下常见的GDB调式用法

关于gdb===========================1,编译的时候,要加上-g : gcc debugme.c -o debugme -g2,使用gdb来启动待调试代码:gdb ./debugme3,列出待调试代码:ll 10l 1,304,设置断点:b 10 (在程序的第10行,设置一个断点)b 20 if i>= 5 (在程序的第2...

2018-07-01 21:03:05 433

原创 一些常用的shell脚本命令和用法

$#:代表命令行参数个数$*:代表所有参数$n:第n个参数$?:代表最后一个命令返回值$$:代表当前shell的进程号PID$是变量的引用符 = 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 declare: //定义变量declare -a array //数组declare -i s...

2018-06-30 14:27:28 3844

原创 Linux下修改/etc/passwd。ubuntu不小心改了用户名登陆不上去(忘记密码可破解密码)

  前几天手贱想修改一下用户名,然后打开/etc/passwd找到对应的文件名并修改了,而且把用户家目录都改名了,然后就上不去了。在网上找了很多方法,现记录下亲测有效的一种方法: 1、重启ubuntu,随即长按shirft进入grub菜单;2、按"e"键进入编辑页面;如下 3、将ro single替换为rw single init=/bin/bash; (上述的界面...

2018-03-17 17:20:29 6490 4

原创 APP Inventor,蓝牙部分详解。

前几天通过APP inventor制作了个有关智能窗户的APP--室内智能花园APP,https://blog.csdn.net/haofeng_ma/article/details/79587537,过程中认为蓝牙传送有点疑惑,所以就上网找教程。网上的教程较少,大多都是以前谷歌还在中国时候的教程,当我直接抄过来的时候发现根本它根本显示不了(可能是我哪方面和教程的不同,但我找不出),然后经过多...

2018-03-17 16:49:58 28910 17

原创 APP Inventor,一个能快速做出app的工具。只要会C语言就行,很好的调试单片机工具。基于arduino的蓝牙数据传送在APP显示,室内花园的制作。

  今天记录一下前几天做的一个关于智能窗户APP的制作过程。这次制作是通过APP inventor来实现的下面是最原始的版本,虽然有点丑,但这都不是重点,以后有待改进。(1)APP初次打开的显示:如图所示,这一APP有获取蓝牙地址、连接蓝牙、开关灯、气泵的开关、智能模式的开关、湿度的显示等功能。图中程序的作用是:当初次打开APP程序,屏幕会出现提醒语“欢迎使用本软件”,然后使按...

2018-03-16 22:16:42 11040 6

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除