<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chensong_2000的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chensong_2000</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chensong_2000]]></copyright><item><title><![CDATA[从参数传递的角度看系统调用的过程]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/150549283</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/150549283</guid><author>chensong_2000</author><pubDate>Wed, 20 Aug 2025 14:09:42 +0800</pubDate><description><![CDATA[系统调用的参数传递和转换]]></description><category></category></item><item><title><![CDATA[e2000开发板键鼠事件响应-设备树compatible字段匹配]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/149709309</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/149709309</guid><author>chensong_2000</author><pubDate>Mon, 28 Jul 2025 10:48:43 +0800</pubDate><description><![CDATA[设备树，驱动初始化]]></description><category></category></item><item><title><![CDATA[文件系统预读机制的代码分析]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/138129039</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/138129039</guid><author>chensong_2000</author><pubDate>Tue, 23 Apr 2024 16:06:28 +0800</pubDate><description><![CDATA[（14）或者，还有一个分支，还可以进入函数blk_mq_delay_run_hw_queues，启动kblockd_workqueue，回调函数是blk_mq_run_work_fn，这个读取是在kworker的上下文中，是一个异步的IO过程，代码路径在本文后面介绍。（10）调用blk_mq_attempt_bio_merge合并bio，同时调用blk_mq_bio_to_request将bio转换为request，调用blk_add_rq_to_plug将request添加到tsk->plug中。]]></description><category></category></item><item><title><![CDATA[cpu masks的初始化]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/136628037</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/136628037</guid><author>chensong_2000</author><pubDate>Mon, 11 Mar 2024 17:04:08 +0800</pubDate><description><![CDATA[一开始以为是cpu_possible_mask或者cpu_present_mask有误，但根据dmidecode的源码分析后，看到这些信息是从内核的文件/sys/firmware/dmi/tables/smbios_entry_point中获取，dmidecode的过程如下，见dmidecode.c。还是从start_kernel开始，这个时候cpu0已经启动完成，内核创建了一个线程kernel_init，其余的cpu和在这个函数里进行初始化工作。cpu的信息包括socket都在dmicode信息中。]]></description><category></category></item><item><title><![CDATA[虚拟地址到物理地址的映射（二）]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/133338614</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/133338614</guid><author>chensong_2000</author><pubDate>Wed, 27 Sep 2023 09:51:40 +0800</pubDate><description><![CDATA[总结起来，一个变量的寻址过程就是，在编译或运行时被分配虚拟地址和物理内存，内核为该虚拟地址和物理内存的地址以该进程的PGD表为基础，建立映射关系，并将PGD的物理地址交给MMU，MMU根据映射关系通过虚拟地址找到物理地址，并按照程序的要求读写其中的内容。1）编译和链接filemap-addr:0x7fc3d3e4c000 内存映射文件虚拟地址g-addr:0x4c82f0  全局变量虚拟地址stack-addr:0x7ffe03a8ef1c   栈内变量虚拟地址。]]></description><category></category></item><item><title><![CDATA[虚拟地址到物理地址的映射（一）]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/133337754</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/133337754</guid><author>chensong_2000</author><pubDate>Wed, 27 Sep 2023 08:57:26 +0800</pubDate><description><![CDATA[从上面信息可以看出0x7fc3d3e4c000所对应的物理地址是0x28ba000，我们之前看到过a.out的pgd的物理地址是47de000，那么47de7f8中的0x7f8就是虚拟地址0x7fc3d3e4c000所对应的PUD的地址在PGD中的偏移量，也就是说47de000 + 7f8这个地址里面，存放着PUD页表的物理地址，从上述信息来看，PUD的物理地址为5f7c000，后面的0x67为该页面的页表属性。这样的话，在qemu虚拟机里，可以使用ctrl a + c进入qemu的控制台。]]></description><category></category></item><item><title><![CDATA[smp_init过程解析]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/129442447</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/129442447</guid><author>chensong_2000</author><pubDate>Fri, 10 Mar 2023 15:36:12 +0800</pubDate><description><![CDATA[smp启动过程分析]]></description><category></category></item><item><title><![CDATA[sigwaittest测试超标的调试过程]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/129320565</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/129320565</guid><author>chensong_2000</author><pubDate>Fri, 03 Mar 2023 15:47:24 +0800</pubDate><description><![CDATA[sigwaittest调试]]></description><category></category></item><item><title><![CDATA[objtrace代码调试]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/127667007</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/127667007</guid><author>chensong_2000</author><pubDate>Thu, 03 Nov 2022 11:50:45 +0800</pubDate><description><![CDATA[objtrace的调试过程]]></description><category></category></item><item><title><![CDATA[qemu+gdb调试内核]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/127447378</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/127447378</guid><author>chensong_2000</author><pubDate>Fri, 21 Oct 2022 15:40:08 +0800</pubDate><description><![CDATA[gdb+qemu调试内核]]></description><category></category></item><item><title><![CDATA[libbpf-tools编译和使用步骤]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/126927681</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/126927681</guid><author>chensong_2000</author><pubDate>Mon, 19 Sep 2022 11:15:34 +0800</pubDate><description><![CDATA[libbpf-tools的编译和运行]]></description><category></category></item><item><title><![CDATA[loongarch集成preempt rt后ltpstress死机的问题分析]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/125612485</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/125612485</guid><author>chensong_2000</author><pubDate>Tue, 05 Jul 2022 09:01:31 +0800</pubDate><description><![CDATA[loongarch集成preempt rt后ltpstress死机的问题分析]]></description><category></category></item><item><title><![CDATA[ftrace新功能 -- objtrace代码分析]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/125277794</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/125277794</guid><author>chensong_2000</author><pubDate>Tue, 14 Jun 2022 15:05:18 +0800</pubDate><description><![CDATA[ftrace新功能--objtrace]]></description><category></category></item><item><title><![CDATA[cyclicdeadline]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/125201974</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/125201974</guid><author>chensong_2000</author><pubDate>Thu, 09 Jun 2022 13:57:32 +0800</pubDate><description><![CDATA[cyclicdeadline rt-tests]]></description><category></category></item><item><title><![CDATA[deadline调度器]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/125201662</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/125201662</guid><author>chensong_2000</author><pubDate>Thu, 09 Jun 2022 13:55:06 +0800</pubDate><description><![CDATA[内核调度器-deadline]]></description><category></category></item><item><title><![CDATA[ftrace中没有syscall信息问题的分析]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/123108839</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/123108839</guid><author>chensong_2000</author><pubDate>Thu, 24 Feb 2022 12:04:29 +0800</pubDate><description><![CDATA[1，ftrace中syscallevents的实现

ftrace是内核的一个重要分析供给，在分析内核代码运行路径和时间问题上有着其他工具不可比拟的优势，比如对于系统调用，我们在分析cyclictest测试日志的时候，可以看到这样的信息：

cyclicte-305307....09479.661181:sys_enter:NR115(1,1,ffffbbfae420,0,0,ffffbbfaecd0)//系统进入了nanosleep调用，信息包括时...]]></description><category></category></item><item><title><![CDATA[RTEval实时系统测评工具]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/121511157</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/121511157</guid><author>chensong_2000</author><pubDate>Wed, 24 Nov 2021 11:10:55 +0800</pubDate><description><![CDATA[RTEval是一个python应用程序，用于测试和分析实时系统的实时性，RTEval首先在待测试的目标系统上运行两个系统负载，分别为hackbench和解压缩并编译一份linux kernel的源码，与此同时，运行cyclictest对实时系统进行测试。

当运行设定时间后，系统负载和cyclictest同时停止，RTEval输出cyclictest的测试结果，并对其进行分析，并将分析结果输出至一xml文件。

RTEval的配置项在rteval.conf和Makefile中，比如duration，在mak]]></description><category></category></item><item><title><![CDATA[trace rtsl的代码分析和使用]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/121491664</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/121491664</guid><author>chensong_2000</author><pubDate>Tue, 23 Nov 2021 13:57:04 +0800</pubDate><description><![CDATA[概念
Cyclictest是目前测试实时系统最主要和最常用的工具，但cyclictest有其局限性，它只提供了测试得到延时的结果，但从调度路径的角度来看，从中断到高优先级任务的调度要分成如下几部分，中断响应，任务抢占，任务切换等，期间还有关中断，关抢占等操作干扰，cyclictest的测试结果是不能给出这些步骤具体的执行时间以便分析延时产生的原因的。所以，cyclictest被定义为一个黑盒测试。

RTSL定义了系统调度路径中的如下参数：



poid = Preemption or Interrup.]]></description><category></category></item><item><title><![CDATA[osnoise代码分析和rtla的使用]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/121289198</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/121289198</guid><author>chensong_2000</author><pubDate>Fri, 12 Nov 2021 15:35:46 +0800</pubDate><description><![CDATA[1，kernel -- osnoise

内核5.14-rc1引入了一个新的tracer，从一个线程的角度讲系统的噪声全部罗列出来，供开发者分析系统状况，其中所述的噪声包括：nmi，irq，softirq以及thread。代码位置在kernel/trace/trace_osnoise.c.

tracer osnoise工作原理如下：

注册traceevent，包括thread_noise,softirq_noise,irq_noise,nmi_noise,sample_threshold (includ]]></description><category></category></item><item><title><![CDATA[preempt rt对pagefault的处理]]></title><link>https://blog.youkuaiyun.com/chensong_2000/article/details/121138675</link><guid>https://blog.youkuaiyun.com/chensong_2000/article/details/121138675</guid><author>chensong_2000</author><pubDate>Thu, 04 Nov 2021 11:30:36 +0800</pubDate><description><![CDATA[在项目中我们发现了实时系统的pagefault开销比非实时要高，所以本文对pagefault做一下分析和对比。

1，pagefault调用栈（以arm64为例，内核版本为4.19.90）

el1_da(arch/arm64/kernel/entry.S)--arm64发生dataabort的异常处理入口

 do_mem_abort

 inf=esr_to_fault_info(fault_info,异常向量表，见arch/arm64/mm/fault.c+...]]></description><category></category></item></channel></rss>