自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 抄的八股文(2)

这些答案不一定正确1、Linux驱动框架1、设备的初始化/释放:负责对设备进程初始化/释放。检测所有驱动硬件是否正常。如果正常对设备以及相关驱动程序的进行初始化2、上半部分:服务于文件系统I/O,命令字下发。通过文件系统从应用程序读取数据,将数据通过文件系统返回给应用数据。3、下半部分:服务于硬件设备的I/。负责将数据从内核传到硬件,或者是硬件读取数据到内核。大部分是通过中断实现。比如网络设备的收发包我以为是 Linux总线、设备、驱动模型。驱动只管驱动、设备只管设备,总线负责匹

2024-05-19 15:40:26 709

原创 抄的八股文

1、define只是在预处理时进行文本替换,不分配内存空间,它存在于程序的代码段。const会分配空间,存在于程序的数据段,可以被调用2、const常量有数据类型,编译器可以对其进行安全检查等。define不行头文件中定义静态变量会造成资源浪费,引起程序错误等。按照编译步骤,每个头文件都会每个包含的源文件中展开,这样每个源文件都会单独存在一个静态变量。不推荐在头文件中定义任何的变量。

2024-05-16 22:15:58 682

原创 platformd device、driver注册过程

platform device、driver注册过程

2024-05-01 22:50:43 598

原创 linux perf工具使用

性能瓶颈分析

2024-01-20 23:04:37 543

原创 遍历slub分配器申请的object(linux3.16)

slub分配器

2024-01-19 22:38:28 397

原创 读写锁(arm)

(1)假设临界区内没有任何的thread,这时候任何read thread或者write thread可以进入,但是只能是其一。(2)假设临界区内有一个read thread,这时候新来的read thread可以任意进入,但是write thread不可以进入(3)假设临界区内有一个write thread,这时候任何的read thread或者write thread都不可以进入。

2024-01-11 23:18:26 1329 2

原创 内核线程创建-kthread_create

文章参考大概意思就是早期创建内核线程,是交由内核处理,由内核自己完成(感觉好像也不太对呢),创建一个内核线程比较麻烦,会导致内核阻塞。因此就诞生了工作队列以及现在的kthreadd 2号进程。这样我们在创建内核线程时,只需要将消息告诉它们,实际进行内核线程创建的任务有kthreadd完成,感觉类似一个下半部。我环境使用的是kthreadd进行内核线程的创建。

2024-01-06 23:02:18 1550

原创 关于kthread_stop的疑问(linux3.16)

线程一旦启动起来后,会一直运行,除非该线程主动调用do_exit函数,或者其他的进程调用kthread_stop函数,结束线程的运行。之前找销毁内核线程的接口时,发现了kthread_stop这个接口。网上说这个函数能够销毁一个内核线程。最开始以为对于一个已经唤醒的内核线程,我们直接调用这个接口就能够让这个线程自动退出。后面经过试验发现并不是这样的======》

2024-01-05 23:25:20 1255

原创 内核死锁检测--lockdep(linux3.16)

之前看网上说linux内核自带了死锁检测工具。现在试试使用效果怎么样。感觉确实能够检测到,后面有时间在研究原理把。需要开启如下选项(选项应该是开多了,用最后三个就行)这个图我怀疑是 开启了其他的,导致出现了这个打印。经过实测是在内核线程被调用之前就检测到了。//这个文章讲了一些检测原理。

2024-01-04 23:23:59 454

原创 kasan

其原理就是利用额外的内存,去标记内存的可用状态。可以看到申请到obj之后,会 调用__kasan_kmalloc,将实际申请的内存,所对应的shadow memory区域初始化为0,表示全部都可访问。要实现内存的检查,必须要先有这块区域记录内存读写权限(就是上面将的8字节内存是否有效的标记信息)的详细信息,这块区域是如何划分、何时划分的呢?这里入参tag是0,因此可以看到从伙伴系统里面申请出来的page,他们对应的shadow memory的值为0(本来也应该为0,因为全部内存都允许被访问)

2023-12-27 22:54:13 881

原创 Linux 内核栈保护

栈保护

2023-11-27 22:46:52 418

原创 linux内核态内存泄漏检测-kmemleak

内核内存泄漏

2023-11-26 22:17:35 1089

原创 关于preempt count的疑问

另外的7bit为了记录,防止进程被softirq所抢占,关闭/禁止softirq的次数,比如每使用一次local_bh_disable(),softirq count高7个bits(bit 9到bit 15)的值就会加1,使用local_bh_enable()则会让softirq count高7个bits的的值减1。因此为了分清楚是正在处理软中断还是说进程里面显示禁止了软中断,我们只需要判断bit8就行(进入softirq是在softirq上下文,关闭softirq抢占也是在softirq上下文如何区分)

2023-10-30 23:24:03 212

原创 VM设置共享文件夹方法

主机与VMware虚拟机共享文件夹:解决虚拟机找不到共享文件夹问题 - 知乎

2023-10-15 21:54:51 256

原创 ARM硬件断点

文档可以在这个网站下载。hw_breakpoint 是由处理器提供专门断点寄存器来保存一个地址,是需要处理器支持的。处理器在执行过程中会不断去匹配,当匹配上后则会产生中断。可以看到应该是每个cpu都注册了一个。感觉应该是在一个cpu上注册,所有cpu都会去检查(原理不清楚,上面的文档没有看明白,猜测的)内核自带了硬件断点的样例linux-3.16\samples\hw_breakpoint\data_breakpoint.c。

2023-10-08 23:03:11 2084

原创 arm栈推导

栈推导

2023-09-11 23:19:17 519

原创 关于单核/多核死机问题

2023-08-08 22:38:34 1033

原创 arm 函数栈回溯

栈回溯

2023-07-26 23:02:32 2137

原创 qemu搭建arm环境以及文件共享

qemu搭建arm实验环境

2023-07-23 14:19:24 2272

原创 ptrace修改进程数据

ptrace

2023-07-13 23:22:53 541

原创 ELF文件(1)

由于段和节的数量不固定,自然程序头表以及节头表的大小也不固定了。这些表就相当于一个数组,程序头表里面的元素就对应了一个段,节头表的原因对应了一个节。段是由节组成了,多个节经过链接之后就合并成一个段了(elf文件里面的section header和program header其实都是描述的同一个东西)elf header的信息如下:从elf header中能够看到程序头表以及节头表的起始位置,以及对应的元素个数等信息。通过读取出来的符号地址可以看到上述的几个符号的地址,也确实落在了对应的section中。

2023-06-29 22:26:29 227

原创 符号表生成

2023-05-20 23:08:17 279

原创 栈保护杂记

栈保护

2023-05-15 21:58:11 113

原创 slub debug(linux4.16.1)

slub debug

2023-05-14 16:44:18 632

原创 slub 分配器(linux3.16)

在构建object之间的单链表的时候,object首地址实际上都会加上一个red_left_pad的偏移,这样实际的layout就如同图片中转换之后的layout。slab和slub是不同的分配器(内存布局就不同),但是他们最后都是基于伙伴系统实现的。检测的方法和Red zone区域一样,填充的magic num也一样,差别只是检测的区域不一样而已。kmem_cache_create->do_kmem_cache_create->__kmem_cache_create(slub.c)到这里就不一样了。

2023-05-08 22:50:09 215

原创 ARM体系结构相关杂记

由于不同的模式使用者几个相同的寄存器,在进行模式切换的时候,容易造成寄存器的数据被破坏。在特权模式下,程序可以访问所有的系统资源,也可以任意的进行处理器运行模式切换。在地址中存放的结果为A(0x12),A+1(0x34),A+2(0x56),A+3(0x78)在地址中存放的结果为A(0x78),A+1(0x56),A+2(0x34),A+3(0x12)2、6个状态寄存器(32位),CPSR,SPSR_svc,SPSR_abt,SPSR_und,SPSR_irq,SPSR_fit。程序寄存器PC:R15。

2023-04-25 22:00:24 241

原创 进程调度相关

进程调度

2023-04-09 21:35:44 154

原创 linux时钟相关

2023-04-02 22:05:44 137

原创 mutex互斥体-2

互斥锁

2023-03-23 23:08:28 217

原创 mutex互斥体-1

互斥锁

2023-03-21 22:16:35 148

原创 中断下半部-中断线程化

中断下半部

2023-03-05 22:27:00 338

原创 arm系统调用过程

2023-02-13 23:27:27 1112

原创 关于Block ACK(BA)

802.11

2023-01-31 21:28:17 748 2

原创 进程相关杂记

进程地址空间

2023-01-15 22:56:44 222

原创 线性地址到物理地址的转换

地址转换

2023-01-05 22:29:23 318

原创 缺页中断处理

缺页中断

2022-12-29 22:05:31 369

原创 kmalloc,vmalloc,malloc,mmap

2022-12-25 22:40:58 504

原创 slab分配器

slab

2022-12-10 23:23:18 383

原创 伙伴系统杂记

伙伴系统

2022-11-27 21:29:00 445

原创 linux时钟中断

linux定时器

2022-11-02 23:14:21 522

Block ACK空口抓包

Block ACK空口抓包

2023-01-31

空空如也

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

TA关注的人

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