Fork me on GitHub

随笔分类 -  Kernel

摘要:Linux内核中unlikely宏的作用 在Linux内核中,unlikely宏是一个非常重要的工具,它主要用于 指导编译器进行代码优化,以提高程序的执行效率。 unlikely宏的定义与作用 定义: unlikely宏通常定义为 __builtin_expect(!!(x), 0),其中x是你要判 阅读全文
posted @ 2024-11-21 22:18 yooooooo 阅读(72) 评论(0) 推荐(0) 编辑
摘要:Linux内核中的PAGE_SHIFT 什么是PAGE_SHIFT? 在Linux内核中,PAGE_SHIFT是一个非常重要的宏,它定义了一个页的大小,通常是2的幂次方。这个值表示了虚拟地址空间中一个页的偏移量占用了多少位。换句话说,它告诉我们一个页的大小是多少字节。 PAGE_SHIFT的作用 页 阅读全文
posted @ 2024-11-21 21:51 yooooooo 阅读(83) 评论(0) 推荐(0) 编辑
摘要:1、前言 struct kref结构体是一个引用计数器,它被嵌套进其它的结构体中,记录所嵌套结构的引用计数。引用计数用于检测内核中有多少地方使用了某个对象,每当内核的一个部分需要某个对象所包含的信息时,则该对象的引用计数加1,如果不需要相应的信息,则对该对象的引用计数减1,当引用计数为0时,内核知道 阅读全文
posted @ 2024-10-28 23:34 yooooooo 阅读(53) 评论(0) 推荐(0) 编辑
摘要:由于Linux版本的在不断更新,当设备驱动去兼容不同版本的内核时,需要知道当前使用的内核源码版本,以此来调用对应版本的内核API,这两个宏定义在文件 /usr/include/linux/version.h #define LINUX_VERSION_CODE 263213 #define KERN 阅读全文
posted @ 2024-10-28 11:51 yooooooo 阅读(323) 评论(0) 推荐(0) 编辑
摘要:内核代码中充斥着大量的__iomem修饰的void类型的指针,像下面这样: void __iomem *devm_ioremap_resource(struct device *dev, const struct resource *res) { resource_size_t size; void 阅读全文
posted @ 2024-10-18 11:18 yooooooo 阅读(198) 评论(0) 推荐(0) 编辑
摘要:pr_debug 是 Linux 内核中用于打印调试信息的宏,它的行为会根据编译时的配置有所不同。如果定义了 CONFIG_DYNAMIC_DEBUG 配置选项,pr_debug 会扩展为 dynamic_pr_debug,这允许在运行时动态地控制调试信息的输出。如果没有定义 CONFIG_DYNA 阅读全文
posted @ 2024-09-18 18:29 yooooooo 阅读(39) 评论(0) 推荐(0) 编辑
摘要:Meltdown是2018年初公开的一种严重的计算机安全漏洞,影响了多种处理器,包括英特尔、ARM和某些AMD处理器。其原理基于利用现代CPU的“推测执行”(speculative execution)和“缓存时间差异”(cache timing)来泄露内存数据。以下是Meltdown漏洞的工作原理 阅读全文
posted @ 2024-06-03 21:53 yooooooo 阅读(79) 评论(0) 推荐(0) 编辑
摘要:find_sys_call_table 和 kallsyms_lookup_name 都可以用于查找内核符号,但它们的具体作用和使用场景有所不同。以下是两者的详细对比: 1. find_sys_call_table 作用 find_sys_call_table 是一种通过遍历内核内存或者其他方式来手 阅读全文
posted @ 2024-05-29 15:52 yooooooo 阅读(95) 评论(0) 推荐(0) 编辑
摘要:在Linux内核中,"backport printk"和"front printk"都是用于记录内核消息和调试信息的机制,但它们的工作方式和使用场景有一些区别。 "backport printk"是一种在内核中记录消息和调试信息的机制,可以将这些信息输出到控制台、串口、网络等目标。它通常用于在内核启 阅读全文
posted @ 2023-09-27 16:50 yooooooo 阅读(36) 评论(0) 推荐(0) 编辑
摘要:1 简介 这个文档记录了用 kGDB 调试 Linux 内核的全过程,都是在前人工作基础上的一些总结。以下操作都是基于特定板子来进行,但是大部分都能应用于其他平台。 要使用 KGDB 来调试内核,首先需要修改 config 配置文件,打开相应的配置,配置内核启动参数,甚至修改串口驱动添加 poll 阅读全文
posted @ 2023-09-10 17:33 yooooooo 阅读(465) 评论(0) 推荐(0) 编辑
摘要:在读select、poll源码前,需要先了解的知识点: 等待队列 文件系统(主要是进程的打开文件描述符表以及struct file) poll机制 资源注册监听poll() → poll_wait(struct file *, wait_queue_t *, poll_table *pt) → pt 阅读全文
posted @ 2022-05-06 11:11 yooooooo 阅读(371) 评论(0) 推荐(0) 编辑
摘要:一般用户空间关联的物理页面是按需通过缺页异常的方式分配和调页,当系统物理内存不足时页面回收算法会回收一些最近很少使用的页面,但是有时候我们需要锁住一些物理页面防止其被回收(如时间有严格要求的应用),Linux中提供了mlock相关的系统调用供用户空间使用来锁住部分或全部的地址空间关联的物理页面。 本 阅读全文
posted @ 2022-03-06 15:48 yooooooo 阅读(341) 评论(0) 推荐(0) 编辑
摘要:Linux 内核包含4个IO调度器,分别是 Noop IO scheduler、Anticipatory IO scheduler、Deadline IO scheduler 与 CFQ IO scheduler。 anticipatory, 预期的;提早发生的;期待着的 通常磁盘的读写影响是由磁头 阅读全文
posted @ 2022-02-07 18:10 yooooooo 阅读(664) 评论(0) 推荐(0) 编辑
摘要:红黑树(Red-Black Tree,RBT)是一种平衡的二叉查找树,前面的红黑树原理与实现这篇文章中详细介绍了红黑树的细节。在Linux的内核源代码中已经给我们实现了一棵红黑树,我们可以方便地拿过来进行使用。本文将参考Linux内核的源码和文档资料,介绍Linux内核中红黑树的实现细节及使用方法。 阅读全文
posted @ 2021-12-21 14:39 yooooooo 阅读(424) 评论(0) 推荐(0) 编辑
摘要:序言:近期读Linux 5.15的发布说明,该版本合并了实时锁机制,当开启配置宏CONFIG_PREEMPT_RT的时候,这些锁被基于实时互斥锁的变体替代:mutex、ww_mutex、rw_semaphore、spinlock和rwlock。第一次听说ww_mutex,在百度上查找的时候发现介绍文 阅读全文
posted @ 2021-11-06 14:50 yooooooo 阅读(464) 评论(0) 推荐(0) 编辑
摘要:lockdep是内核提供协助发现死锁问题的功能。 本文首先介绍何为lockdep,然后如何在内核使能lockdep,并简单分析内核lockdep相关代码。 最后构造不同死锁用例,并分析如何根据lockdep输出发现问题根源。 1. Lockdep介绍 死锁是指两个或多个进程因争夺资源而造成的互相等待 阅读全文
posted @ 2021-10-17 15:58 yooooooo 阅读(1227) 评论(0) 推荐(0) 编辑
摘要:最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多。当初自己对内核文档里的CodingStyle一文只是粗略的浏览,真正写代码的时候在很多细节上会照顾不周。不过, 在不遵守规则的程序员队伍里,我并不是孤独的。如果去看driv 阅读全文
posted @ 2021-09-26 10:16 yooooooo 阅读(234) 评论(0) 推荐(0) 编辑
摘要:术语和缩略语 本文档使用了以下术语和缩略语 Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。 Dtsi:可以理解为dts的公共部分,添加、变更非常灵活。Dtsi包含在dts中。 Dtb:Dtb编译出来的二进 阅读全文
posted @ 2021-08-13 18:29 yooooooo 阅读(499) 评论(0) 推荐(0) 编辑
摘要:KERNEL 大小的端 LE16_TO_CPU le16_to_cpu()将16位的Little-endian整数转换为当前CPU上的16位表示形式。同样, cpu_to_be32()将当前CPU的32位整数表示形式转换为其32位big-endian表示形式。 阅读全文
posted @ 2021-06-24 15:22 yooooooo 阅读(1918) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示