linux app
文章平均质量分 71
linux app
wmzjzwlzs
这个作者很懒,什么都没留下…
展开
-
dirty file page
0.前言Linux 内核Page Cache 和Buffer Cache 关系及演化历史 一文中讲过Linux 2.4之后将Page Cache和Buffer Cache 进行了融合,在buffer_head 中添加了b_page,很容易就能找到缓存的Page Cache,而buffer_head 的存在就是能够快速确定页中的一个块在磁盘中的地址。原创 2024-01-12 21:03:03 · 978 阅读 · 0 评论 -
UDP-组播,广播
UDP是面向非连接的协议,它不与对方建立连接,而是直接把数据报发给对方。UDP无需建立类如三次握手的连接,使得通信效率很高。因此UDP适用于一次传输数据量很少、对可靠性要求不高的或对实时性要求高的应用场景。原创 2023-07-19 14:11:28 · 280 阅读 · 0 评论 -
获取网络包的硬件时间戳
在发送完或接收完报文后,时间戳被记录到一个 cmsg_level为SOL_SOCKET, cmsg_type 为SCM_TIMESTAMPING, data为 struct scm_timestamping 的一个control message中。为了验证获取的时间戳的正确性,我们使用两块飞灵科技的TSync时钟同步开发板作为报文的发送端和接收端,并分别在两个板子上捕获发送和接收的硬件时间戳。从发送端和接收端的log可以看到, 报文的接收时间戳和发送时间戳之差,就是路由器的链路延时。原创 2023-07-17 22:28:54 · 1363 阅读 · 1 评论 -
Linux信号机制-3
信号很早就在 unix 系统中出现了,它用于用户进程之间的交互,几十年以来,变化都不大。信号是一个发送给进程或者进程组的消息,它只是一个数字,没有参数或者其他辅助的信息。以 SIG 为前缀的宏定义表示着这些不同的信号数字。信号的最大特点是它是异步的,也就是在进程执行的任意时刻信号都可能产生,此时进程的状态是不可知的。发送给进程的信号如果没有被执行,就会由内核将它保存起来,直到进程被唤醒开始执行。如果某个信号被进程配置为屏蔽,那么这个信号就会一直被挂起而不会被触发,直到它被 unblock。原创 2023-07-11 17:12:15 · 455 阅读 · 0 评论 -
Linux信号机制-2
send_signal() 首先调用 kmem_cache_alloc() 函数来申请一个类型为 struct sigqueue 的队列节点,然后把节点添加到 pending 队列中,接着根据参数 info 的值来进行不同的操作,最后通过 sigaddset() 函数来设置信号对应的标志位,表示进程接收到该信号。事实上,进程也不知道信号到底什么时候到达。sys_kill() 的代码比较简单,首先初始化 info 变量的成员,接着调用 kill_something_info() 函数来处理发送信号的操作。原创 2023-07-11 12:26:48 · 188 阅读 · 0 评论 -
Linux进程调度
转自:深入理解Linux进程调度(0.4)_进程调度 城_城中之城的博客-CSDN博客一、进程调度概览进程调度是操作系统最重要的内容之一,也是学习操作系统的重点和难点。关于进程本身的实现和管理请参看《深入理解Linux进程管理》。关于进程调度,我们首先就会问出一些问题,什么是进程调度,为什么要进程调度,如何进行调度。下面我们用一幅图把这些问题关联起来: 在这里插入图片描述这张图把进程调度的所有问题和知识点都关联了起来,本文后面所有的内容都是对这张图的解释和扩展延伸,下面让我们来一一讲解。1.1 什么是调度原创 2023-07-08 23:09:24 · 1269 阅读 · 0 评论 -
Linux时间子系统
转自:深入理解Linux时间子系统(0.7)_城中之城的博客-CSDN博客一、时间概念解析我们住在空间里,活在时间中。时间对我们来说是既熟悉又陌生。熟悉是因为我们每天都在时间的驱动下忙碌着,陌生是因为我们从来没有停下来认真思考过时间是什么。今天我们先从对时间的使用需求开始说起。1.1 时间使用的需求我们对使用时间有三种需求:知时、定时和计时。知时就是我们需要知道现在的时间是多少,表达方式是时分秒、年月日。定时是我们需要在某个时间点被告知,时间点可以是相对的或者绝对的,告知可以是一次性的或者是周期性的,比如每原创 2023-07-08 22:35:57 · 1304 阅读 · 0 评论 -
Linux信号机制
转自:深入理解Linux时间子系统(0.7)_城中之城的博客-CSDN博客一、信号机制概览相信大家对信号并不陌生,很多人都用过kill命令或者Ctrl+C组合键杀死过进程,或者遇到过程序因为收到SIGSEGV信号而崩溃的。而对信号的基本原理,估计很多人都不太了解,今天我们就来详细讲解一下。1.1 信号基本原理信号机制是UNIX系统最古老的机制之一,它不仅是内核处理程序在运行时发生错误的方式,还是终端管理进程的方式,并且还是一种进程间通信机制。信号机制由三部分构成,首先是信号是怎么产生的,或者说是谁发送的,然原创 2023-07-08 22:01:14 · 1487 阅读 · 0 评论 -
__pthread_mutex_lock_full
static intint oldval;while (1)oldvalbreak;= 0)#else#endifnewvalif (newval!= oldval)continue;#endifNULL);NULL);return 0;原创 2023-07-06 17:11:44 · 524 阅读 · 0 评论 -
makefile-2
工作作用,将头文件放在include文件夹,cpp文件放在source文件夹,test.cc为可执行文件。方式一:$(shell shell_command)打印用info,Makefile提供了三个命令。结果输出当前工作目录:home/sc/test。三、简提Makefile中打印日志信息。表示比目标还要新的依赖文件列表。Makefile中,格式为这样的。一、理解$@、$^、$<的含义。$^ 表示所有的依赖文件。$< 表示第一个依赖文件。Makefile文件为。目标:需要依赖的条件。原创 2023-07-06 13:37:05 · 151 阅读 · 0 评论 -
malloc原理
事实是这样的,_edata + 30K 只是完成虚拟地址的分配,A 这块内存现在还是没有物理页与之对应的,等到进程第一次读写 A 这块内存的时候,发生缺页中断,这个时候,内核才分配 A 这块内存对应的物理页。由此,当我们需要访问一个比较大的文件,尤其是当我们只需要访问其中的一小部分数据的时候,我们可以尝试通过 mmap 的方式来进行访问,减少由于该文件过大而对物理内存的过度占用。在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。原创 2023-07-04 14:37:51 · 268 阅读 · 0 评论 -
Makefile之 =, :=, ?=
"进行赋值的时候如果该变量已经赋值过了,那么将跳过这一句,使用"="的时候,如果变量已经赋值过了,它会在进行一次赋值。用“:="进行变量的赋值时,如果右边有变量,那么只会使用在这条语句之前定义的变量,如果变量此时未定义,就默认这个变量为空。用“=”定义变量的时候,右边如果有变量,则这个变量的定义可以是整个Makefile文件中的任意位置。正常赋值这方面来说,"?="是和"="一样使用。原创 2023-07-03 22:56:02 · 361 阅读 · 0 评论 -
arm64函数参数
【代码】可变参数。原创 2023-04-20 22:01:31 · 600 阅读 · 0 评论 -
arm64栈帧结构
转自:https://www.cnblogs.com/zhiminyu/p/15669062.html原创 2023-04-20 21:48:39 · 128 阅读 · 0 评论 -
gcc 原子操作
int cc = 0;int test=0;while(1){while(1){test = 0;原创 2023-02-18 17:48:49 · 1053 阅读 · 0 评论 -
perf使用
x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。perf top类似top命令,主要用于实时分析各个函数在某个性能事件上的热度,能够快速的定位热点函数,包括应用程序函数、调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。事件太多,不一一列举,有兴趣增加知识宽度的,可以网络搜索或者 man 解决。原创 2022-12-02 17:08:38 · 572 阅读 · 0 评论 -
编译perf
已经嵌入到linux的tools目录下。2.进入到tools目录下 执行。1. perf工具的。原创 2022-12-02 11:17:56 · 1552 阅读 · 0 评论 -
perf原理
如果读者在 perf 的分析结果中只看到一串地 址,而没有对应的函数名时,通常是由于在编译时利用 strip 删除了 ELF 文件中 的符号表。根据上述的 perf 采样原理可以得知,perf 假设两次采样之间,即两次相邻 的 PMI 中断之间系统执行的是同一个进程的同一个函数。内核在 PMI 中断的处理函数中保存 PMC 的计数值,触发中断时的指令地址(Register IP:Instruction Pointer),当前 时间戳以及当前进程的 PID,TID,comm 等信息。原创 2022-12-02 10:56:50 · 721 阅读 · 0 评论 -
ld-linux-armhf.so.3
#原创 2022-12-01 17:48:16 · 737 阅读 · 0 评论 -
strace
armv7:4.make。原创 2022-12-01 16:21:37 · 116 阅读 · 0 评论 -
pthread_mutex_unlock
int{return}int{{}{}{= 0)}else{||!}}static int{{{= 0)}= 0)!||!= 0))futex_wake。原创 2022-12-01 15:20:40 · 727 阅读 · 0 评论 -
pthread_mutex_lock
{{}{}#endif{{}}{= 0){do{{(mutex);}}= 0= 0);}}else{}#endifreturn 0;}# definelll_lockFUTEX。原创 2022-12-01 10:42:14 · 914 阅读 · 0 评论 -
sem_wait
int{*/if (else}sem_waitstatic int{do{break;}#elsedo{break;}#endif}static int{for (;;){{we{}}else{原创 2022-12-01 10:19:35 · 559 阅读 · 0 评论 -
sem_post
int{*/do{{}}while (!futex_wake#elsedo{{}}while (!= 0)#endifreturn 0;},sem_post。原创 2022-12-01 09:53:33 · 271 阅读 · 0 评论 -
glibc源码下载
第二个链接也可以在线阅读Linux内核源码。glibc源码下载地址。原创 2022-10-23 18:12:18 · 3084 阅读 · 0 评论 -
neon lib-1
【代码】neon lib-1。原创 2022-10-14 22:47:16 · 145 阅读 · 0 评论 -
ARM GCC Inline Assembler Cookbook
Stop!asm();asmEachasm);%[result]y, and%[value]x.%0%1r3asmi++;x += 3;i++;x += 3;i += 2;c *= b;ccmemoryc *= b;c *= b;branch+value+"0"&&__asm__asmandvolatile);{);return val;GCC。原创 2022-10-14 22:45:32 · 398 阅读 · 0 评论 -
ARM 内联汇编-1
其中ARM架构的CSPR寄存器中的关键几位N,Z,C,V与8086架构EFLAG中的NF ,SF ,ZF ,CF,OF相对应,主要是用于汇编计算中,使用源操作数计算的目标结果的状态记录和压栈、出栈、跳转状态保存和恢复。Q 该指令常用在饱和算法中,如果运算结果发生饱和(超出数据类型,导致溢出),这些状态将被FPSCR寄存器记录,则将结果自动截断,使其避免溢出。注)、上表指令后面可以追加一些后缀,比如"B", "H"和"W"分别表示从给定的内存地址依次取1个字节(8位),2个字节和4个字节。原创 2022-10-14 22:43:34 · 1071 阅读 · 0 评论 -
test-dmb-0
{count;}}}{}}}原创 2022-09-18 15:40:15 · 194 阅读 · 0 评论 -
OpenDDS-1
转自:软件开发.OpenDDS设计智能座舱时ECU之间通信及与TSP通信选择使用OpenDDS是可以的,因此不少人都认为OpenDDS是属于汽车以太网(Aumotive Ethernet,AE),但事实上autosar AE中定义中有SomeIP、DoIP、AVB、gPTP/PTP等却是没有OpenDDS。把OpenDDS归类到物联网协议中,这个是比较合适的。谈起OpenDDS,不得不与Mqtt及SomeIP先做一下简单的对比:1)OpenDDS是基于topic发布订阅机制,需要DCPSInfoRepo b原创 2022-07-09 16:15:54 · 580 阅读 · 0 评论 -
DMA_BUF_SYNC_START
DMA_BUF_SYNC_START原创 2022-06-18 13:40:34 · 639 阅读 · 0 评论 -
关于Android中ION的libion
转自:关于Android中ION的libion - 技术经验 - W3xue在高通的OpenCL SDK中,其Android.mk文件中,有判断当前kernel的版本,如果大于4.12,那么就使用libion.so,否则则使用ion kernle uapi: 从Andriod P开始,Kernel 4.14已推到AOSP, libion在Android P上已支持新的kernel ion接口,强烈建议 使用原创 2022-06-18 09:24:51 · 606 阅读 · 0 评论 -
ION内存分配
转自:Android系列-ION内存管理简介 - 简书Android系列-ION内存管理简介Android的ION子系统的目的主要是通过在硬件设备和用户空间之间分配和共享内存,实现设备之间零拷贝共享内存。说来简单,其实不易。在Soc硬件中,许多设备可以进行DMA,这些设备可能有不同的能力,以及不同的内存访问机制。ION是Google在Android 4.0 ICS中引入,用于改善对于当前不同的android设备,有着各种不同内存管理接口管理相应内存的状况。当前存在着各种不同的但是功能却类似的内存管理接口,例原创 2022-06-18 09:25:24 · 2525 阅读 · 0 评论 -
pthread_cond_wait
转自:【代码测试】先pthread_cond_signal, 后pthread_cond_wait,会阻塞_weixin_44764006的博客-CSDN博客当无线程在pthread_cond_wait等待时, 发送pthread_cond_signal,啥都不会发生,pthread_cond_signal依旧返回0#include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX...原创 2022-06-18 09:14:34 · 114 阅读 · 0 评论 -
linux atof 返回0
转自:Linux平台下atof总是返回0.0 - SegmentFault 思否原创 2022-05-07 19:53:03 · 459 阅读 · 0 评论 -
NEON-1
#include <stdio.h>#include "arm_neon.h"void rgb2bgr_with_neon(unsigned char *img, int height, int width){ const int total_bytes = height * width * 3; const int stride_bytes = 48; for (int i = 0; i < total_bytes; i += stride_byte...原创 2022-05-03 13:11:44 · 427 阅读 · 0 评论 -
ASAN原理-3
转自:理解ASAN的shadow memory和读懂报错信息_sif_666的博客-CSDN博客_asan 影子内存什么是ASANASAN(Address Sanitizer)是一个内存检测工具。gcc4.8版本及以上自带。支持多平台(x86, ARM, MIPS (both 32- and 64-bit versions of all architectures), PowerPC64)、多操作系统(Linux, Darwin (OS X and iOS Simulator), FreeBSD,原创 2022-05-02 20:37:41 · 654 阅读 · 0 评论 -
ASAN原理-2
转自:[芦半山]Android native分析工具ASAN和HWASAN原理解析_mb60ffdbe016b5d的技术博客_51CTO博客ASAN和HWASAN原理解析由于虚拟机的存在,Android应用开发者们通常不用考虑内存访问相关的错误。而一旦我们深入到Native世界中,原本面容和善的内存便开始凶恶起来。这时,由于程序员写法不规范、逻辑疏漏而导致的内存错误会统统跳到我们面前,对我们嘲讽一番。这些错误既影响了程序的稳定性,也影响了程序的安全性,因为好多恶意代码就通过内存错误来完成入侵原创 2022-05-02 19:38:18 · 1047 阅读 · 0 评论 -
ASAN原理-1
转自:Address Sanitizer(Asan)原理及实战定位_或许对了的博客-CSDN博客_asan Asan ASAN(AddressSanitizer的缩写)是一款面向C/C++语言的内存错误问题检查工具,可以检测如下内存问题: 使用已释放内存(野指针) 堆内存越界(读写) 栈内存越界(读写) 全局变量越界(读写) 函数返回局部变量 内存泄漏 ASAN工具主要由两部分组成:...原创 2022-05-02 19:28:15 · 1222 阅读 · 0 评论 -
ASAN-demo
/* main.c */#include <stdio.h>int hello(int *a){ return a[1]+1;}int main(void){ int a; a=1; hello(&a); return 0;}aarch64-linux-gnu-gcc -g main.c -fsanitize=address -fno-omit-frame-pointercp libasan.so.6...原创 2022-05-01 15:26:49 · 482 阅读 · 0 评论