
linux
文章平均质量分 84
Mar`
这个作者很懒,什么都没留下…
展开
-
Linux内核态内存泄漏检测工具--kmemleak工具原理及应用
kmemleak通过追踪kmalloc(), vmalloc(), kmem_cache_alloc()等函数,把分配内存的指针和大小、时间、stack trace等信息记录在一个红黑树中,等到调用free释放内存时就把相应的记录从红黑树中删除。也就是说红黑树中的记录就是已经分配出去但尚未释放的内存,其中有些内存尚未释放是因为还在被使用,这属于正常情况,而不正常的情况,即真正“泄漏”的内存都是不会再被使用的原创 2022-10-24 10:27:43 · 3801 阅读 · 0 评论 -
Linux input子系统上报事件讲解(以重力传感器lis2dw12驱动为例)
input子系统背景以前我们写一些输入设备(键盘、鼠标等)的驱动都是采用字符设备、混杂设备处理的。问题由此而来,Linux内核为了能够处理各种不同类型的输入设备,(比如 触摸屏 ,鼠标 , 键盘 , 操纵杆 ),设计并实现了为驱动层程序的实现提供统一接口函数;为上层应用提供试图统一的抽象层 , 即是Linux 输入子系统 。引入输入子系统的好处:统一了物理形态各异的相似的输入设备的处理功能。例如,各种鼠标,不论PS/2、USB、还是蓝牙,都被同样处理。驱动不必创......原创 2022-08-05 13:50:19 · 1922 阅读 · 0 评论 -
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 · 916 阅读 · 0 评论 -
malloc申请内存问题
问题描述 最近发现了一个越界有概率会造成段错误的问题。具体问题是这样的,首先malloc申请一块内存,但使用时比实际的大一个字节,比如我申请了52个字节,使用了53个或者申请50个使用了51个,然后我发现的现象是当我申请了52个字节使用了53个字节的时候,程序肯定会挂掉,但申请了50个字节使用了51个的时候程序是不会挂的。同样是越界,为什么会造成这样的结果呢?问题排查于是,做了一个的...原创 2019-09-18 09:08:24 · 6315 阅读 · 7 评论 -
Makefile自动增量编译
前言前两天在工作中用到了Makefile的自动增量编译,发现它非常好用,尤其在工程中,你添加了新的模块,仅仅需要在Makefile里添加你模块文件夹的路径,就可以推导出该文件夹下的.c或者.cpp文件的编译。实例首先,我在一个test的文件夹下创建了三个文件夹include test1 test2,这三个文件夹下分别放着test2.h\test1.c\test2.c ,然后在创建...原创 2019-08-02 16:57:19 · 3453 阅读 · 0 评论 -
关于内存泄漏问题(共享内存、请求调页、缺页异常处理)
1. 问题描述 最近发现了一个问题,当不同的进程申请了同一块共享内存时,会有内存泄漏现象,即当程序运行时,有些进程的内存会逐渐 增加,波动幅度较为明显。2.问题排查 通过调试排查,我们发现是共享内存引起的。我们用两个进程分别初始化同一个共享内存(5M),然后什么都不做,测试结果是第一个进程占用的内存是5M左右,第二个进程占用的内存是200K左右,结果如下图所示。...原创 2019-04-26 16:15:10 · 2169 阅读 · 0 评论 -
信号量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 · 4394 阅读 · 0 评论 -
与线程有关的几个函数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 · 4879 阅读 · 6 评论 -
一些常用的shell脚本命令和用法
$#:代表命令行参数个数$*:代表所有参数$n:第n个参数$?:代表最后一个命令返回值$$:代表当前shell的进程号PID$是变量的引用符 = 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值 declare: //定义变量declare -a array //数组declare -i s...原创 2018-06-30 14:27:28 · 3964 阅读 · 0 评论 -
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 · 930 阅读 · 0 评论 -
Linux下闹钟函数alarm的常见用法
alarm(闹钟函数),是一个比较简单且实用的函数。当定时器指定的时间到时,它向进程发送SIGALRM信号。可以设置忽略或者不捕获此信号,如果采用默认方式其动作是终止调用该alarm函数的进程。 在调用前需要写处理函数myAlarm,当捕获到该信号时(设置的时间到了)就会执行该函数。signal( SIGALRM, myAlarm ); alarm函数只有一个...原创 2019-01-26 14:52:24 · 2533 阅读 · 0 评论 -
makefile自动增量编译技术
#makefile#################################################################################################用wildcard通配符指定当前路径下的所有以.cpp结尾的文件名CXX_CPP := $(wildcard *.cpp)#把所有以.cpp结尾的文件名转换为.o结尾的文件名,编...转载 2019-01-14 16:55:24 · 2887 阅读 · 0 评论 -
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 · 494 阅读 · 0 评论