Linux内核
文章平均质量分 64
Linux内核相关的文章
北冥有鱼被烹
这个作者很懒,什么都没留下…
展开
-
微知-linux内核中PCIe驱动扫描后驱动加载为什么有两种类型的resource?分别是什么?
因为当应用程序访问某个地址空间的时候 CPU访问地址的时候 通过host bridge发送地址,mmu会自动过滤掉io空间的地址,经由pcie host bridge进行访问io设备的资源。所以本文开始提出的在扫描中驱动加载显示bar资源的需要的两种内存类型,是设备用来表示它所使用的两种内存介质,一种是用自己的配置空间的地址,另外一种是使用物理内存的地址。在PCIE的配置空间的bar(基础地址寄存器)空间里面 每一个伴都会告诉内核,他所需要的空间大小 以及它所使用的空间类型。原创 2024-08-24 02:05:15 · 371 阅读 · 0 评论 -
微知-如何给某个文件打开linux内核的动态打印开关?(echo -n ‘file probe.c +p‘ > /sys/kernel/debug/dynamic_debug/control)
printk 只能支持7个等级,并且是全局统一开关。粒度太粗。如何做到动态开关某个文件的debug?linux内核提供了dynamic debug的机制(后文称dd)。本文以pci驱动中的probe.c为例子介绍 开启内核中已使用了dd模块并且并已编译到内核的模块如何直接开启打印。原创 2024-08-22 08:54:51 · 670 阅读 · 0 评论 -
Linux eth接口的sysfs文件中rx_page_cache/log_mult_limit作用是什么?(倍数限制,rx page cache对于ing buffer的膨胀系数)
本文介绍Linux内核协议栈标准实现中,关于rx_page_cache的log_mult_limit参数的作用、机理和常见值。以对Linux内核协议栈同网卡之间进行数据交互的资源有一个切片认识。原创 2024-08-14 03:09:51 · 1322 阅读 · 0 评论 -
【微知识】Linux网络驱动中的3个主要层次结构与主要函数?dev_queue_xmit->hard_start_xmit->xxx_xmit、netif_rx
fill:#333;color:#333;color:#333;fill:none;网络协议网络协议接口层网络设备接口层设备驱动层是设备接口层的实现网卡硬件。原创 2024-07-01 00:37:54 · 616 阅读 · 0 评论 -
【微代码】Linux异步执行机制work基本用法?
Linux内核提供诸多异步执行机制,work就是其中一种。work的提供避免了启动多个内核线程造成资源占用等问题。内核提供一个专门的work来进行处理。本文主要记录work的基本用法。原创 2024-06-28 23:58:51 · 188 阅读 · 0 评论 -
【微代码】Linux同步机制complete基本用法,以及如何封装一个内核态sleep的工具函数ksleep?
Linux提供了多种同步机制,其中complete就是一种。complete能够阻塞等待状态同步,并且等待对方释放中会调用schedule让出CPU。如果想在内核中等待一个固定时长继续执行他是一个非常不错的选择。有点类似用户态的sleep功能。可以定义一个函数,在函数中定义,等待来达到类似sleep的效果。下面的代码可以直接copy后使用。原创 2024-06-28 23:49:00 · 363 阅读 · 0 评论 -
sysrq的常见参数-快速查询版
参考:原创 2024-06-26 01:09:52 · 199 阅读 · 0 评论 -
【微记录】linux如何使用ebpf观测你的某个命令调用了内核的ioctl?(bpftrace sys_enter_ioctl)
对于工程实践中需要查看某些ioctl是否被调用,尤其是一个新的模块初次调试,在不添加调试命令debug的情况下如何观测?另外就是对于外部提供的二进制程序,如何观测该程序是否调用ioctl以及何时调用?这些都通过ebpf能够良好的观测。原创 2024-05-15 02:13:26 · 192 阅读 · 0 评论 -
Linux动态观测神器bpftrace的5种探针、7个常见内置变量和常见操作?
bpftrace使用 LLVM 作为后端将脚本编译为 BPF 字节码,利用 BCC(BPF Compiler Collection)与 Linux BPF 系统进行交互。原创 2024-05-08 00:26:29 · 538 阅读 · 0 评论 -
关于Linux内核调试中几个工具kprobe、ftrace、ebpf关系的简单记录(本质是预留的nop)
最近和行业大佬探讨关于Linux内核中kprobe、ftrace、ebpf关系的一些,特此记录:原创 2024-04-23 01:14:23 · 303 阅读 · 0 评论 -
编译Linux内核模块遇到/lib/modules/.../build: No such file or directory怎么办?以及kernel-devel和kernel-header作用?
那么就依赖/lib/module/uname−rbuild有相关的编译信息,比如所有的symbol等以及编译框架。libmodules(shell uname -r)/build是一个软连接,指向实际的内核源码。实际的内核源码在 /usr/src/kernels/uname−r而这个usrsrckernels(uname -r)就是kernel-devel的rpm安装后的内核信息。原创 2024-04-17 01:24:04 · 2450 阅读 · 1 评论 -
Linux的3个debug rpm包有什么区别kernel-debuginfo-common、kernel-debuginfo、kernel-debug-debuginfo?(源码、库、库)
kernel-debug-debuginfo 是debug版本linux的debuginfo库,本质是库,同kernel-debuginfo。kernel-debuginfo-common 主要是编译linux的与架构无关的,本质就是源码。yum源列出的mirror上的rpm包:(注意yum本质只是一个包管理框架,包本质都是这些rpm包)kernel-debuginfo 主要是vmlinux、所有的ko等,会copy文件到。原创 2024-04-17 00:27:58 · 531 阅读 · 0 评论 -
【1000个GDB技巧之】如何在远端服务器打开通过vscode动态观测Linux内核实战篇?
(也可以直接在vscode中配置,忽略)主要步骤:在~/.ssh/config中添加服务端的host,以便vscode的remote中能够登录。原创 2024-04-14 10:22:58 · 1035 阅读 · 0 评论 -
Linux内核中KASLR功能是什么?有什么作用?怎么破除?以及如何实操?(地址空间、layout random、kallsyms)
KASLR是一个什么技术点其实不重要,但重要的是有了KASLR这个功能后,造成内核中某个符号(函数 or 变量)在System.map中的地址和实际不一样了(实际: cat /proc/kallsyms),进一步带来了分析类似crash问题中的打印地址不准确问题。所以必须得知道这是什么?原创 2024-04-13 21:43:52 · 1420 阅读 · 0 评论 -
Linux如何安装kernel-debuginfo包以支持获取未压缩内核映像vmlinux?(yum | wget、rpm -ivh)
fill:#333;color:#333;color:#333;fill:none;8.6isos 下载镜像GA表示 普遍可用稳定版全量安装包括支持GNU模式进包括基础安装主要服务器命令行模式从网络安装BaseOS 包括源码独立包等x86_64/debug/Packages/安装包8.7...原创 2024-04-13 13:33:52 · 1228 阅读 · 0 评论 -
阿里龙蜥操作系统AnolisOS中涉及的RHEL、RHCK、ANCK几个概念是什么以及什么关系?(OS和kernel)
举个例子:原创 2024-04-13 11:02:26 · 2008 阅读 · 0 评论 -
Linux内核单元测试框架kunit的3个对象和N个函数和1个接口(kunit_suite, kunit_case[], func1(), struct kunit,kunit_run_tests)
这个kunit相当于是一个中间态的结构体,kunit内部每次执行前定义一个临时的kunit,然后进行执行。每次执行后,把结果更新到这个kunit中,并且使用的kunit的判断宏使用这个kunit里面的status根据判断结果存储进去。比如KUNIT_EXPECT_EQ(test, 1, 1),就会把OK的结果存入test的status中。这里相当于使用了结构化初始化,把所有需要运行的case,放到my_test_cases的数组中。然后执行完成后,把执行结果test存储到case的status中。原创 2024-04-11 23:39:52 · 794 阅读 · 0 评论 -
【资讯】Linux 2024-03-10 发布 V6.8 版本--Git对象即将超过1000万
【代码】【资讯】Linux 2024-03-10 发布 V6.8 版本--Git对象即将超过1000万。原创 2024-03-30 09:34:01 · 239 阅读 · 0 评论 -
【Linux牛人之02-Greg Kroah-Hartman】“Linux二把手“-稳定分支stable维护者-Greg Kroah-Hartman
要点:算得上是Linux内核的二号人物了《Linux驱动程序》的作者Linux稳定发布分支的维护者中文版看英文版(更有味道)其他相关链接http://www.kroah.com/log/about/ Greg的个人博客http://www.kroah.com/log/linux/howto.html 如何做Linux开发者http://www.kroah.com/linux/ Greg的内核介绍LWN社区(linux daily news)的Greg相关:https://lwn.原创 2024-01-30 00:59:01 · 242 阅读 · 0 评论 -
Linux中DKMS是什么?
【代码】Linux中DKMS是什么?原创 2024-01-10 00:44:54 · 924 阅读 · 0 评论 -
手撕烂笔头-Linux内核开发中常见的五类主要问题总结
看到一种总结五类问题,梳理方向还不错。原创 2023-08-14 00:09:40 · 66 阅读 · 0 评论 -
如何不用vmlinux也能用gdb调试linux内核模块以及调试linux内核?/sys/modules/xxxko/sections add-symbole-file -s .data
ko和vmlinux通过gdb调试的原理与实战方法原创 2023-08-13 23:57:03 · 281 阅读 · 0 评论 -
【1000个Linux内存知识-017】Linux中一些内存技术发明解决的核心问题梳理(不断更新)
很多技术点解决的主要矛盾就一个,并且也是在特定条件下解决某些问题。特此梳理能够相互关联并且备忘。原创 2023-08-13 18:49:27 · 61 阅读 · 0 评论 -
【1000个Linux内存知识-016】为什么内存要按页分配?
linux内核虚拟内存和物理内存都是按照页为单位进行管理的,为什么要这样?需要解决什么问题?原创 2023-08-13 17:40:42 · 97 阅读 · 0 评论 -
【1000个Linux内存知识-015】Linux系统中有哪些系统全局变量可供查看(不断更新)
不断收集系统全局变量,这些全局变量使用gdb、crash、ebpf等动态监测方式能够快速查看。并且很多命令读取系统信息本质是读取变量,如果获取这些变量,也能从本质上得到系统运行状态。引用一句话:不要关注程序语言的写法,他们千奇百怪。要关注数据的流动。因为代码只是用一种形式写表达,本质是数据。原创 2023-08-13 15:03:33 · 143 阅读 · 0 评论 -
【1000个Linux内存知识-014】-内核中kmalloc到底是怎么从slab分配内存的?都是从slab分配的吗?
具体流程:alloc_pages 直接从伙伴系统拿。原创 2023-08-12 15:45:27 · 133 阅读 · 0 评论 -
【1000个Linux内存知识-013】-关于kmalloc分配内存使用的kmalloc cache的全局表kmalloc_caches和kc名字表kmalloc_info
slab分配器提供使用者自己创建cache仓库,然后使用者自己从仓库中分配。通过查看/proc/slabinfo可以看到kmalloc有多个slab cache,或者说slab的零售商。比如kmalloc-32,从slab批发了kmalloc-32的内存,然后自己在kmalloc中去零售。kmalloc-32就是一种kmem_cache,或者叫一个slab节点。后文称为kmalloc零售商。kmalloc提供了13个零售商,用来处理不同大小的内存分配请求。原创 2023-08-12 15:21:13 · 200 阅读 · 0 评论 -
手撕烂笔头-内核中一些不错的宏定义代码工具之WARN_ON_ONCE-解决异常刷屏问题
定义一个static 然后执行warn_on。原创 2023-08-12 14:23:42 · 1102 阅读 · 0 评论 -
【1000个Linux内存知识-012】slab slub slob是什么关系?是共存的吗?从源码级别看一下
struct kmem_cache是slab系统的主要数据结构,用来管理多个内存小块(object)的。slab系统通过提供不同的kmem_cache来分类不同类型的slab。比如kmalloc就在slab系统中注册了很多cache,比如kmalloc-32 kmalloc-64分别都申请了一类slab下面来看这三个“slab"对kmem_cache定义,来看他们的不同。源文件路径:mm/slab.cmm/slub.cmm/slob.c。原创 2023-08-12 13:23:19 · 424 阅读 · 1 评论 -
【1000个Linux内存知识-011】-如何查看slab在系统中占用多少物理内存?nmon
slab使用cache-slab-object三级方式管理从伙伴系统批发过来的物理内存。slab到底批发了多少内存,有一些方式可以查看:某些场景我们需要获取slab使用的物理内存大小,有哪些方式可以获取是什么:一个系统监控运维神器详细介绍:进入nmon输入m进入m统计可以看到图中Slab的大小用了53.9M的物理内存和前面通过 /proc/meminfo获取相同nmon是系统监控神器,值得以后深入研究slab分配的物理内存可以通过系统提供的proc文件系统,也可以通过nmon工具https://ww原创 2023-08-12 11:45:47 · 285 阅读 · 0 评论 -
【1000个Linux内存知识-001】-MMU中的两个单元分别是什么?(TLB TWU)作用和使用时机?
TLB table lookasid buffer 是存储VA到PA的高速缓存,在CPU和cache中间TWU table walk unit 如果TLB中没有 则由TWU硬件进行页表查询fill:#333;color:#333;color:#333;fill:none;cputlbl1cachel2cachel3cacheDDREMMCtwu多级页表缺页中断kernel。原创 2023-08-09 01:49:35 · 214 阅读 · 0 评论 -
【1000个Linux内存知识-010】-64位地址的Linux进程地址空间内核和用户地址空间分别在哪?中间空洞到底有多大
简单描述就是内核地址空间和用户地址空间都是128T。如果把内核地址空间或者用户地址空间算1份,那么还有约13万个128T是空着的。最低位置是进程的代码段和数据段还有stack heap关系线性映射区在内核空间初期vmalloc空间比较大内核text在高地址。原创 2023-08-09 01:24:23 · 424 阅读 · 0 评论 -
手撕烂笔头-tasklet和workqueue的区别
softirq 软中断,指定的就那几个中断和函数 而且需要在编译内核的时候就要静态写好 一般在中断上半部。使用软中断类型中的类型有十种左右。- tasklet一般是在中断下半部。常用在无需睡眠的场景。本质是软中断,在软中断上下文。使用软中断类型中的TASKLET_SOFTIRQ中断号。- workqueue 可以sleep,在进程上下文。tasklet和workqueue都是内核延迟执行,以及下半部的机制。- 上下文softirq和tasklet是中断上下文,workqueue是线程上下文。原创 2023-08-07 03:40:35 · 84 阅读 · 0 评论 -
【1000个Linux内存知识-008】-brk系统调用是干嘛的?全称是什么?
因此,"brk"这个术语实际上是来自于"break point"的缩写,并非来自英语单词"break"(打破)的意思。随着时间的推移,这种术语逐渐被其他更易理解的名称所取代,如现代编程语言中的"malloc"和"free"等函数来管理动态内存分配。在早期的计算机系统中,堆空间的位置由一个特定的内存地址来控制,通常称为"break point"(断点)。通过修改这个"break point"地址,程序可以增加或减少堆空间的大小。"brk"是"break"的缩写,它是一个系统调用,用于改变程序的堆空间大小。原创 2023-08-07 03:04:24 · 1141 阅读 · 0 评论 -
代码块-一个简单的Linux内核模块c和makefile代码
【代码】代码块-一个简单的Linux内核模块c和makefile代码。原创 2023-08-07 02:03:24 · 99 阅读 · 0 评论 -
【1000个Linux内存知识-004】-物理页表的PFN到底是什么?PFN与struct page有什么关系?
根据上面的数据可以得到page全局唯一,所以数组下标也是page唯一ID,所以某个PFN就是它对应的某个struct page在mem_map中的数组下标,通过PFN就能找到这个page的描述符,就能操作这个page。因为系统所有内存都在mem_map中,所以每一个页帧就有一个唯一id,就是这个PFN,相当于page在mem_map中的身份证。物理页表的PFN是某个物理页面的全局唯一描述符struct page的序号,也是在mem_map中的下标。1M个64B就是64M的mem_map的数组。原创 2023-08-06 17:26:04 · 901 阅读 · 1 评论 -
【1000个Linux内存知识-003】-Linux内核中物理内存是如何组织起来的?(物理内存三大金刚:node-zone-page)
在linux内核中用pglist_data来描述一个node,每个node分成了多个zone,每个zone分成了11个free_area,每个free_area存储了不同大小的页表分别有11种(2^0个page,2^1个page... 2^10个page),每一种大小的页表链又被分到了6种状态子链表(根据页表是否能够移动MOVEABLE等)- 然后将这些页按照2^n个大小分成11种大小的页,分别是1个页,2个页.. 最大的是1024个页。假设每个大小的链表都挂载x个node。所以x = 2^9=512个。原创 2023-08-06 16:42:46 · 121 阅读 · 0 评论 -
【1000个Linux内存知识-002】-缺页异常的本质是什么?谁缺页?如何根据多级页表和10-10-12分页机制的虚拟地址找到真正物理地址的?
页目录PDE 算是第一级指针,通过从CR3或者TTBR拿到页表基地址(也就是页表的第一个地址),找到一级页表那块内存地址,然后加上VA中的高10b的值(也就是pde的offset),得到存储二级页表地址的内存单元,根据内存单元的值中获取到PT所在。进程地址空间管理要映射到物理地址,就靠这个页表管理,管理的所谓页表,就是物理页的页表。- 类似的拿到PT的所在内存块的基地址之后,根据PTE的偏移,拿到存储PAGE地址的内存单元,根据内存单元的值获取到真正需要访问的页表的地址。原创 2023-08-06 13:39:54 · 495 阅读 · 0 评论