- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 使用Perf工具分析系统性能
本文介绍了Linux性能分析工具perf的安装与使用方法。主要内容包括:1) 在CentOS和Ubuntu系统上安装perf工具;2) perf的基本命令结构及常用子命令,如list查看事件类型、stat统计系统性能、top实时监控、record/report记录分析采样数据以及trace跟踪系统调用;3) 详细说明了各子命令的功能、使用方法和常见选项。文章还指出在虚拟机环境中需配置虚拟化CPU性能计数器才能支持硬件事件,并提供了相关配置指导。perf工具可有效帮助开发者分析系统性能瓶颈。
2025-12-28 19:33:23
881
原创 在Linux中安装Kdump调试环境
本文介绍了在CentOS 7.9系统中安装Kdump调试环境的完整流程。Kdump是Linux内核崩溃时生成内存映像(vmcore)的机制,类似于应用程序的coredump。安装步骤包括:1)确认内核编译选项已启用Kdump相关功能;2)配置捕获内核的内存空间大小;3)安装依赖包;4)编译安装kexec-tools工具;5)安装配置makedumpfile工具;6)启用kdump服务;7)生成crash分析工具。安装完成后,当内核崩溃时会自动生成vmcore文件,可用于后续分析定位问题。整个过程需确保各组件
2025-11-23 22:25:23
1205
原创 编写Netfilter模块过滤ARP数据包
本文介绍了Linux内核中ARP数据包过滤的实现方法。通过Netfilter框架可以在三条链(IN、OUT、FORWARD)上注册钩子函数来过滤ARP数据包,其中链值定义在netfilter_arp.h头文件中。文章提供了一个简单的示例代码,展示了如何编写内核模块来丢弃所有ARP数据包,包括钩子函数注册、协议配置为NFPROTO_ARP,以及模块初始化和卸载的实现。该示例通过nf_register_net_hooks注册钩子函数数组,在IN链上实现对ARP数据包的拦截。
2025-10-31 21:22:59
228
原创 通过0x80软件中断执行系统调用
本文介绍了Linux系统中0x80软件中断机制实现系统调用的技术细节。在32位x86架构下,系统调用通过0x80中断实现,调用时需将系统调用号存入eax寄存器,参数依次存入ebx、ecx等寄存器。系统调用号定义在syscall_32.tbl文件中(如write的系统调用号为4)。文中提供了一个使用内联汇编实现write系统调用的示例代码,演示了通过0x80中断将字符串输出到标准输出的过程。该机制在64位系统中仍可通过兼容选项支持,但不同位宽系统可能对应不同的执行函数。
2025-10-10 23:46:15
475
原创 Linux内核的PER_CPU机制
本文介绍了Linux内核中的PER_CPU机制,该机制通过为每个CPU创建私有数据副本来提高多核CPU的并发执行效率,减少锁竞争。文章详细讲解了PER_CPU的原理、应用场景(如进程调度队列)以及注意事项(某些跨CPU操作仍需加锁)。此外,提供了两组PER_CPU编程接口:静态声明(如DECLARE_PER_CPU)和动态分配(如alloc_percpu),并通过一个示例程序演示了如何动态分配PER_CPU变量、设置和访问不同CPU的私有数据。该机制能有效提升内核性能,特别是在多核环境下处理非共享资源时。
2025-09-13 21:51:35
906
原创 一文搞懂GCC内联汇编
文章摘要: 本文介绍了Linux内核模块开发中C语言与汇编结合的技术,重点讲解了内联汇编的使用方法。内联汇编通过__asm__ __volatile__语法实现,包含汇编代码、输出、输入和会被修改四部分。文章详细说明了各部分的功能:汇编代码直接操作硬件;输出部分将结果传递给C变量;输入部分传入C变量值;会被修改部分声明受影响的寄存器或内存。同时解析了约束条件(如a/b/c寄存器)、修饰符(=/+等)和占位符(%0/%1)的作用,并通过代码示例展示了如何通过内联汇编高效完成底层硬件操作。该技术弥补了C语言在硬
2025-09-07 21:00:14
1116
原创 Linux内核的高精度定时器
本文介绍了Linux内核中的高精度定时器(HrTimer)技术。高精度定时器可提供纳秒级精度,适用于任务调度等高精度场景。文章详细讲解了高精度定时器的核心结构体hrtimer及其成员变量,包括回调函数、定时器状态等;并列举了相关操作接口函数,如初始化(hrtimer_init)、启动(hrtimer_start)、取消(hrtimer_cancel)等。最后给出了一个示例程序test_hrtimer.c,演示了如何实现每3秒打印一次消息的高精度定时器功能。该技术需要硬件支持,适用于对时间精度要求较高的应用场
2025-08-31 21:45:15
1294
原创 Linux内核模块开发技术指南:手戳进程调度器
本文介绍了Linux内核的进程调度机制,主要包括五种调度器的特点和工作原理。空闲调度器优先级最低,仅在没有其他进程时执行;公平调度器基于优先级和时间片调度普通进程;实时调度器优先执行优先级更高的实时进程;deadline调度器采用最小截止时间优先策略;stop调度器优先级最高。文章还详细解析了调度器通用结构体sched_class的成员函数,包括进程入队/出队、任务切换、CPU负载均衡等核心操作。通过优先级队列、时间片分配和EDF等算法,Linux实现了高效的多任务调度机制。
2025-08-25 23:55:03
796
原创 《Linux内核模块开发技术指南》:一文搞懂Linux系统调用
本文介绍了Linux系统调用的概念、执行过程及实现方法。系统调用是内核为应用程序提供的安全访问硬件资源的接口,包括文件操作、进程控制等功能。执行过程涉及用户空间发起调用、内核查找系统调用表并执行对应函数。文章通过三种方式演示系统调用实现:libc库接口、syscall函数和汇编指令。最后说明在x86_64系统添加系统调用的步骤:先在系统调用表中注册,再使用SYSCALL_DEFINEx宏实现内核函数。文中配有代码示例和流程图,清晰展示了系统调用的工作机制。
2025-08-10 20:20:57
1162
原创 Linux内核模块开发技术指南:十分钟完成第一个内核模块
本文介绍了Linux内核模块开发的基本流程。首先展示了一个最简单的内核模块源码hello.c,包含加载和卸载函数,使用printk打印调试信息。接着说明Makefile的编写方法,需指定内核源码路径和模块名。最后演示编译运行过程:执行make生成.ko文件,用insmod加载模块,通过dmesg查看printk打印的"Hello,Linux Kernel"信息。该示例完整展示了内核模块从编写、编译到加载运行的整个流程。
2025-07-19 09:22:07
604
原创 Linux内核的动态跟踪技术Kprobe
本文介绍了Linux内核模块开发中的kprobe动态跟踪技术。kprobe允许在内核函数或地址中插入探测点,通过pre_handler和post_handler回调函数监控内核执行流程。文章详细解析了kprobe结构体的关键成员和注册/注销接口,并实现了一个监控proc文件创建的示例模块。测试结果表明,当目标函数proc_create_data被调用时,kprobe成功触发了前后回调,验证了该技术的有效性。使用kprobe需要声明GPL协议,它为内核调试和监控提供了强大的动态跟踪能力。
2025-07-13 21:49:23
1000
原创 Linux内核的毫秒级定时器
本文介绍了Linux内核中的毫秒级定时器开发技术,主要内容包括:1)定时器结构体timer_list的定义及各成员变量作用;2)常用定时器操作接口如mod_timer、del_timer等;3)通过示例程序test_timer.c演示了定时器的使用方式,该程序每5秒打印一次"timer process",展示了定时器的初始化和周期性触发机制。文章还说明了定时器相关头文件和标志位的含义,并提供了程序运行效果截图。
2025-07-08 23:27:02
439
原创 Linux内核补丁
在为内核源码修改功能或修复BUG后,可以采用补丁的方式发布源码,也可以采用整个内核源码打包的方式进行发布。由于内核补丁只包含了源码的修改部分,比起发布整套源码,代码量相对较小,方便保存和传播,因此一般采用补丁的方式发布源码。内核补丁由一个或多个文件组成,文件中包含了内核源码的修改部分。补丁文件的前两行是补丁头;以@@开始的一段数据是补丁块,上述补丁从第三行开始到文件的结束是一个补丁块。一般一个补丁文件包含一个或多个补丁头,每个补丁头后面会有一个或多个补丁块。
2024-11-04 21:24:00
1088
原创 Linux内核线程
在内核模块开发中,也存在线程的概念。和应用程序的线程类似,内核也需要多个线程同时并行地执行,避免可能的阻塞。一旦一个内核线程阻塞,不影响其他进程的工作。所谓“内核线程”,是直接由内核本身启动的进程(内核线程的本质是进程),运行在内核态,它与其他进程”并行”执行。
2024-04-30 22:49:58
2617
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1