Linux内核开发
文章平均质量分 83
SweeNeil
这个作者很懒,什么都没留下…
展开
-
Linux内核内存检测工具KASan
一、简介KASan,全称Kernel Address Sanitizer,它是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题。KASan 集成在 Linux 内核中,随 Linux 内核代码一起发布,并由内核社区维护和发展。本文简要介绍 KASan 的原理及使用方法。二、原理与使用2.1 KASan原理KASan利用额外的内存标记可用内存的状态,这部分额外的内存被称作shadow memory(影子区)。在我们Linux内核中有page结构体(页描述符),用来标识物理原创 2020-12-01 09:48:36 · 6444 阅读 · 3 评论 -
Linux页高速缓存内核处理函数,查找页
关于Linux内核页高速缓存的介绍网络上有很多优秀的资源如下:1、Linux 内核之页高速缓存与页回写https://www.jianshu.com/p/d33ec2707e7f2、页高速缓存和页回写https://blog.csdn.net/yusiguyuan/article/details/120228113、《Linux内核设计与实现》读书笔记(十六)页高速缓存和页回写...原创 2018-12-13 15:11:02 · 1077 阅读 · 0 评论 -
Linux页高速缓存与文件读写
了解到了页高速缓存之后,页高速缓存在内核中是怎样具体与文件读写挂钩的呢,在本文中就对这个进行探究,基于:Linux-4.4.4内核源码。一、read分析可参考博文:linux内核分析:read过程分析https://blog.csdn.net/u013837209/article/details/54923508当我们读取一个文件时,首先会检查数据是否已经缓存,如果没有就会预读取,...原创 2018-12-13 15:29:27 · 2830 阅读 · 0 评论 -
Linux页高速缓存缓存回写机制,基于2.6版本内核
注:2.6内核版本使用下列方式,旧版本内核可以参考内核版本3.2页回写机制可参考:https://blog.csdn.net/SweeNeil/article/details/84993387之后版本的页回写机制还有待考证。本文转自:http://oenhan.com/linux-cache-writeback在做进程安全监控的时候,拍脑袋决定的,如果发现一个进程在D状态时...转载 2018-12-13 15:58:54 · 743 阅读 · 0 评论 -
Linux 页高速缓存内核版本3.2回写机制的变革
最近在看《深入理解LINUX内核》书中,介绍了如何把脏页写回磁盘,但是对照着内核版本linux-4.4.4,以及内核版本linux-3.10都没找到相应的接口。在查询资料的过程中,遇到的还都是旧内核版本的:pdflush以及background_writeout()的回写方式。不过,最终还是找到了一篇写linux-3.2内核版本中页高速缓存回写机制变革的文章,所以这里转过来,但是我的目标版本还是l...转载 2018-12-13 18:59:39 · 525 阅读 · 0 评论 -
Linux页高速缓存回写机制机制源码分析,基于内核3.8:Writeback
再转一个基于内核版本3.8的,这个版本与3.2的基本一致,这个版本写的比较详细,所以也转过来,供大家比较。转自:Linux 3.8 Writeback机制源码分析https://blog.csdn.net/bysun2013/article/details/29243573writeback相关数据结构与writeback相关的数据结构主要有:backing_dev_info,...转载 2018-12-13 19:42:22 · 1375 阅读 · 0 评论 -
Linux内核编程打印所有线程信息
转自:https://blog.csdn.net/Tryantking/article/details/80027214一、打印系统中所有内核线程的程序名、PID 号、进程状态及进程优先级、父进程的PID1、首先,我们开始编写模块代码pPid.c,这是Linux内核编程的核心代码,代码如下:#include <linux/init.h>#include <linu...转载 2019-02-18 21:18:31 · 4909 阅读 · 0 评论 -
Linux-mmap映射物理内存到用户空间
转自:https://blog.csdn.net/u014792216/article/details/79020326在内核申请一片物理内存,映射到用户空间使用的方法。环境:Linux ubuntu 4.10.0-42-generic。方法经博主测试,测试环境:ubuntu 16.04,内核版本:linux-4.15一、内核驱动模块map.c:#include <li...转载 2019-03-29 17:23:39 · 3156 阅读 · 0 评论 -
Linux内核printk宏开关
在内核开发时经常使用printk打印调试信息,但是printk又对性能有一定的影响,比如写了一个驱动调试完毕要发布或者做内核实验调试完毕正式测试时将这些printk删除又很麻烦,之后再想调试又要重新添加。在内核中可以使用printk宏开关来控制这些信息的显示:#define DEBUG_A#ifdef DEBUG_A#define DEBUG(fmt, args...) printk...原创 2019-08-16 17:17:10 · 1618 阅读 · 2 评论 -
Linux段错误Segfault内核层面分析
最近编写Linux用户态程序,会涉及到一些对内存的操作,因此经常会遇到段错误。segfault at 99ef469b ip 0000000099ef469b sp 00007ffff238e878 error 14 in zero (deleted)[7f6299ef4000+7a2000]最近老是遇到一个错误码为14的段错误,通过网络查阅资料,发现很多资料都写的是错误码是由三个bit...原创 2018-11-16 11:42:46 · 5599 阅读 · 0 评论 -
mmap内核源码分析,基于内核版本3.10(总结)
通过(一)、(二)、(三)三部分算是比较混乱的把mmap内核代码给梳理了一遍,确实写得比较混乱,因此这里再做一个总结,总结一下mmap具体的实现。1、系统调用陷入内核1)用户态调用mmap函数,陷入内核mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset)2)系统调用sys_mmap2...原创 2018-11-10 16:54:19 · 507 阅读 · 0 评论 -
mmap内核源码分析,基于内核版本3.10(三)
之前写了(一)(二)其实就梳理到了get_unmapped_area的内容,而且有一点混乱,这里进行第三篇的讲解,讲解在do_mmap_pgoff中除了get_unmapped_area的内容,来了解mmap的具体实现。通过(一)(二)(三)来将mmap内核源码进行一次梳理。可能过程有一点乱,所以最后准备写一篇总结来总结mmap这样一个流程。(一)https://blog.csdn.net/S...原创 2018-11-10 16:05:43 · 549 阅读 · 0 评论 -
Linux进程内核栈与thread_info结构详解
转自:https://blog.csdn.net/gatieme/article/details/51577479日期 内核版本 架构 作者 GitHub CSDN 2016-06-03 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的描述...转载 2019-03-18 16:27:39 · 2305 阅读 · 1 评论 -
Linux内核socket(一)
要了解内核socket需要先对内核socket的结构进行了解。其中比较重要的就是struct socket和struct sock两个结构体。每个socket数据结构都有一个sock数据结构成员,sock是对socket的扩充,两者一一对应,socket->sk指向对应的sock,sock->socket 指向对应的socket;socket和sock是同一事物的两个侧面,...原创 2018-09-18 20:30:26 · 1385 阅读 · 0 评论 -
Linux内核各类socket结构
转载提取自:http://hellojavaer.iteye.com/blog/1096562(1)struct socket:这个是基本的BSD socket,应用程序通过系统调用开始创建的socket都是该结构体,它是基于虚拟文件系统创建出来的;类型主要有三种,即流式、数据报、原始套接字协议;其状态比较粗粒度,如下:typedef enum { SS_FREE = 0...转载 2018-09-18 21:01:46 · 892 阅读 · 0 评论 -
linux kernel socket实例分析
代码转自:http://blog.chinaunix.net/uid-26748923-id-3548615.html#include <asm/atomic.h>#include <asm/checksum.h>#include <asm/unaligned.h>#include <linux/module.h>#include &...转载 2018-09-19 10:24:50 · 895 阅读 · 0 评论 -
mmap内核源码分析,基于内核版本3.10(一)
最近项目需要使用到mmap,因此对mmap内核中的实现进行学习,该博客基于Linux-3.10,相近版本可以做参考,如果版本跨度大需结合对应版本来进行学习。一个用户态程序可以通过调用libc中的mmap(),将一个已打开文件的内容映射到它的用户空间。mmap用户态函数原型:mmap(void *start, size_t length, int prot, int flags, int f...原创 2018-11-03 16:07:20 · 2248 阅读 · 0 评论 -
mmap内核源码分析,基于内核版本3.10(二)
在之前写了一篇mmap内核源码分析,基于内核版本3.10,经过几天再来回顾发现还是没能学习透彻,所以再写一篇(二)mmap内核源码分析,基于内核版本3.10(一)博客地址:https://blog.csdn.net/SweeNeil/article/details/83685812我们接着从一中的get_unmapped_area函数讲起,get_unmaped_area函数定义如下所...原创 2018-11-09 17:49:27 · 979 阅读 · 1 评论 -
struct vm_area_struct结构体学习
Linux通过类型为vm_area_struct的结构体对象实现线性区,该结构定义了内存VMM内存区域。 每个VM区域/任务中有一个。 VM区域是进程虚拟内存空间的任何部分,它具有页面错误处理程序的特殊规则(即共享库,可执行区域等)。vm_area_struct具体内容如下所示:struct vm_area_struct { /* The first cache line has th...原创 2018-11-09 20:35:52 · 8186 阅读 · 0 评论 -
Linux源码解析-内存描述符(mm_struct)
转自https://blog.csdn.net/tiankong_/article/details/756761311.简介一个进程的虚拟地址空间主要由两个数据结构来描述。一个是最高层次的:mm_struct(定义在mm_types.h中),一个是较高层次的:vm_area_structs。最高层次的mm_struct结构描述了一个进程的整个虚拟地址空间。较高层次的结构vm_area_...转载 2018-11-09 20:49:40 · 1813 阅读 · 0 评论 -
Linux打印内核函数调用栈(dump_stack)
在Linux内核中提供了一个可以打印出内核调用堆栈的函数 dump_stack()该函数在我们调试内核的过程中可以打印出函数调用关系,该函数可以帮助我们进行内核调试,以及让我们了解内核的调用关系。该函数头文件为:#include <asm/ptrace.h>使用方式:直接在想要查看的函数中添加dump_stack();案例:随便写了一个模块test....原创 2019-03-01 16:15:21 · 10798 阅读 · 0 评论