<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sium__的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/sium__</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; sium__]]></copyright><item><title><![CDATA[Linux内核gcov修改为模块]]></title><link>https://blog.csdn.net/sium__/article/details/147694475</link><guid>https://blog.csdn.net/sium__/article/details/147694475</guid><author>sium__</author><pubDate>Sun, 04 May 2025 14:12:39 +0800</pubDate><description><![CDATA[Linux内核gcov模块化]]></description><category></category></item><item><title><![CDATA[当内核有内存泄漏的时候]]></title><link>https://blog.csdn.net/sium__/article/details/134721400</link><guid>https://blog.csdn.net/sium__/article/details/134721400</guid><author>sium__</author><pubDate>Thu, 30 Nov 2023 20:43:52 +0800</pubDate><description><![CDATA[内存泄露是一个很容易出现的问题，尤其是对于测试不太充分的代码。怎么判断出现内存泄露了呢？很简单，就跑一些简单的测试，等待足够长时间即可。内存总有耗尽的时候，这时候内核会触发OOM，根据oom_score选择一个进程杀掉。这种时候，多半是有问题了。或者在某个进程运行的时候，看观察空闲内存部分，一直下降多半是有问题了。这就确定有内存泄露了，可能是用户态进程泄露，也可能是内核泄露。现在确定了内核泄露的方法，接下来怎么找到泄漏点呢，下面会介绍几种调试的方法。]]></description><category></category></item><item><title><![CDATA[AMD显卡休眠唤醒流程分析]]></title><link>https://blog.csdn.net/sium__/article/details/134707956</link><guid>https://blog.csdn.net/sium__/article/details/134707956</guid><author>sium__</author><pubDate>Thu, 30 Nov 2023 14:41:12 +0800</pubDate><description><![CDATA[amd显卡挂起流程分析]]></description><category></category></item><item><title><![CDATA[当我们在谈论色温调节的时候，我们在谈论什么]]></title><link>https://blog.csdn.net/sium__/article/details/118211572</link><guid>https://blog.csdn.net/sium__/article/details/118211572</guid><author>sium__</author><pubDate>Fri, 25 Jun 2021 10:14:59 +0800</pubDate><description><![CDATA[总述
前段时间在一个项目里，做了一个色温调节的东西。发现这部分的资料有点少，所幸研究了一段时间，记录一下，免得后面又忘记了。
色温调节是上层发出，最终由显卡驱动处理的一个事件。桌面一般都是采用redshift 调节色温，到xserver，xserver进行一些自己的处理，转由libdrm用drm ioctl陷入内核drm模块，最终到实际的显卡驱动。redshift这边没怎么研究过，本文就先从xserver讲起吧。涉及到具体的显卡驱动，就用radeon驱动为例。
xserver
用户可以直接用xrand命令调]]></description><category></category></item><item><title><![CDATA[如何在系统挂起流程中玩出白屏问题]]></title><link>https://blog.csdn.net/sium__/article/details/115266966</link><guid>https://blog.csdn.net/sium__/article/details/115266966</guid><author>sium__</author><pubDate>Sat, 27 Mar 2021 16:24:40 +0800</pubDate><description><![CDATA[我们的这次实验的目标是：能在s3唤醒时候玩出一个白屏。为啥不搞个panic出来？panic出现和修好都比较容易，不好玩。显示异常才好玩呢，没日志只有现象，hiahiahia~
好了知己知彼才能百战百胜，先看看s3的简单流程。
s3的流程
s3主要分为两个部分：suspend和resume。s3的入口在suspend_enter，基本流程下面这样的：

上图大概是大家能见到系统挂起流程图中最简单的一个了吧。然而在非arm x86这种使用广泛的架构，这其中看似简单的每一步都可能暗藏杀机。不管是系统挂起还是系统休]]></description><category></category></item><item><title><![CDATA[linux EC驱动书写指南]]></title><link>https://blog.csdn.net/sium__/article/details/114887002</link><guid>https://blog.csdn.net/sium__/article/details/114887002</guid><author>sium__</author><pubDate>Tue, 16 Mar 2021 16:33:22 +0800</pubDate><description><![CDATA[驱动书写指南系列会提供另一个角度的驱动分析，linux内核把各驱动共同的部分抽象出来，做在一起称为框架。就比如说文件系统，linux内核定义好了文件系统中最通用的打开文件、读写文件等公共接口，但是并没有实现函数。这些定义好的接口，可以认为是框架。等到了真正的文件系统实现的时候 ，才会填充这些open、read等函数。对于实现文件系统的程序员来说，就是填充框架外的其他内容，一般都是和硬件相关性比较大。
power supply core介绍
在本文中，主要介绍怎么注册自己的ec驱动。ec驱动的框架部分，pow]]></description><category></category></item><item><title><![CDATA[bootdevice驱动分析]]></title><link>https://blog.csdn.net/sium__/article/details/114872067</link><guid>https://blog.csdn.net/sium__/article/details/114872067</guid><author>sium__</author><pubDate>Tue, 16 Mar 2021 11:14:00 +0800</pubDate><description><![CDATA[最近在一些项目里接触到了hw笔记本+linux，hw在笔记本上自己做了一个linux内核原本没有驱动——bootdevice。研究了一下发现，这好像是从安卓的内核里面扣过来的，不清楚是安卓内核本身就有还是hw自己做的。github上找到一个hw安卓内核分析了一下，感觉还挺有意思的，分享一下。
bootdevice驱动写的非常加单，是用来记录启动设备的驱动，这是驱动的说明Support multiple bootdevice, eMMC or UFS，这毕竟是安卓的内核，启动设备仅支持emmc和ufs的识别，]]></description><category></category></item><item><title><![CDATA[Linux显卡驱动亮度调节功能书写指南.md]]></title><link>https://blog.csdn.net/sium__/article/details/114368294</link><guid>https://blog.csdn.net/sium__/article/details/114368294</guid><author>sium__</author><pubDate>Thu, 04 Mar 2021 14:59:35 +0800</pubDate><description><![CDATA[综述
最近在一些项目中，接触了一些嵌入式领域的常用显卡。这类显卡一般都是不提供亮度调节等功能的，因此这部分需要自己实现。这也是第一次从头实现背光这一套，还比较简单的，记录一下。
一般来讲，内核驱动的通用套路是，内核把公共的部分抽象出来做好，和设备相关的部分就需要各设备驱动自己做。这也就是我们常说的驱动框架，背光设备的话，肯定是套drm驱动里面的东西。背光设备初始化，一定是在显卡初始化里面做的，初始化好的的背光设备，会在/sys/class/backlight/XXX，上层调用这个接口，驱动处理相关的事件。
]]></description><category></category></item><item><title><![CDATA[oland显卡HDMI热插拔问题分析]]></title><link>https://blog.csdn.net/sium__/article/details/113943194</link><guid>https://blog.csdn.net/sium__/article/details/113943194</guid><author>sium__</author><pubDate>Mon, 22 Feb 2021 16:37:51 +0800</pubDate><description><![CDATA[描述
机缘巧合之下，在4.19内核里发现了radeon驱动一个很神奇的问题，插拔hdmi线时候，先拔出一半等10s左右再全部拔出。这时候，在sys下读到的hdmi连接状态还是connected。这个感觉还是很神奇的。切到amdgpu之后，也有这个问题，研究看看。
状态确认
显示器的连接状态，可以通过两个位置看xrandr和/sys/class/drm/card0-HDMI-A-1/status。

Screen 0: minimum 320 x 200, current 3840 x 1080, maxim]]></description><category></category></item><item><title><![CDATA[中断再探]]></title><link>https://blog.csdn.net/sium__/article/details/101386854</link><guid>https://blog.csdn.net/sium__/article/details/101386854</guid><author>sium__</author><pubDate>Wed, 25 Sep 2019 21:23:18 +0800</pubDate><description><![CDATA[前面简单介绍中断初始化和注册的基本流程，这里接上文留下来的两部分内容，中断处理和中断调试技巧。从内核开发的角度来讲说，前文是科普帮组理解我在讲什么，本文是纯干货。基本上可以帮助我修复了我遇到90%的中断错误。
中断处理
众所周知，中断处理统一入口是do_IRQ函数，经过一层层调用真正到处理函数。今天的分享主要集中在滴啊用	do_IRQ之前操作。
CPU检测到有中断发生，然后调用handle_int...]]></description><category></category></item><item><title><![CDATA[中断初探]]></title><link>https://blog.csdn.net/sium__/article/details/98987709</link><guid>https://blog.csdn.net/sium__/article/details/98987709</guid><author>sium__</author><pubDate>Fri, 09 Aug 2019 20:29:22 +0800</pubDate><description><![CDATA[中断初探
最近几个月调了很多中断的bug，啃了很久的源码。整理了一些东西，大佬们笑纳。
离开了架构谈中断都是不深刻的，大佬们肯定玩腻了X86了，今天就以龙芯内核（龙芯官网即可获得：git://cgit.loongnix.org/kernel/linux-3.10.git）为例简单介绍一下哈。中断在内核中的生命周期主要分为三个部分：初始化，注册和中断处理，剩余的所有事情都是硬件完成的。这部分打算分享...]]></description><category></category></item><item><title><![CDATA[Create VM base on KVM]]></title><link>https://blog.csdn.net/sium__/article/details/54377448</link><guid>https://blog.csdn.net/sium__/article/details/54377448</guid><author>sium__</author><pubDate>Thu, 12 Jan 2017 14:11:03 +0800</pubDate><description><![CDATA[Environmenthosts
OS: OpenSuSE Leap 42.1
Desktop: GNOME
guest
OS: OpenSuSE Leap 42.1
Desktop: GNOME
Introduce of KVMKernel-based Virtual Machine (KVM) is a virtualization infrastructure for the Linux ke]]></description><category></category></item><item><title><![CDATA[When move one file to USB drive remindy too large file]]></title><link>https://blog.csdn.net/sium__/article/details/54096646</link><guid>https://blog.csdn.net/sium__/article/details/54096646</guid><author>sium__</author><pubDate>Thu, 05 Jan 2017 20:09:04 +0800</pubDate><description><![CDATA[BlahGood evening! It’s been a long time since last time I write a blog. Igot some news –got a intern job! That ‘s first time, I been so excited, then I forgot to write a blog. Good new is I always writ]]></description><category></category></item><item><title><![CDATA[集群的理解]]></title><link>https://blog.csdn.net/sium__/article/details/51983367</link><guid>https://blog.csdn.net/sium__/article/details/51983367</guid><author>sium__</author><pubDate>Thu, 21 Jul 2016 15:34:59 +0800</pubDate><description><![CDATA[来suse实习了一个多星期了，这期间主要就是在理解集群涉及的概念以及搭建简单的集群环境。这是第一次接触集群，很多概念还是没有完全理解，感觉就是看了很多单个的知识点，但是不能连珠成线。先来简单说说。集群的分类集群是由多个计算机组成的一个系统，其中这每一个计算机被称为节点，节点之间通过局域网或者其他方式连接起来，彼此配合完成一个或者多个任务。从宏观上来讲，这个系统相当于一个计算机 。一般集群有以下三个分]]></description><category></category></item><item><title><![CDATA[如何在配置kdump]]></title><link>https://blog.csdn.net/sium__/article/details/51685381</link><guid>https://blog.csdn.net/sium__/article/details/51685381</guid><author>sium__</author><pubDate>Wed, 15 Jun 2016 21:24:51 +0800</pubDate><description><![CDATA[说明1、作者使用的操作系统是cenos 7 
2、在百度上查了很多资料，都没什么用 
3、本文只是讲了开启kdump服务，后面还会讲怎么分析core文件什么是kdump？  kdump 是一种先进的基于 kexec 的内核崩溃转储机制。当系统崩溃时，kdump 使用 kexec 启动到第二个内核。第二个内核通常叫做捕获内核，以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。]]></description><category></category></item><item><title><![CDATA[Linux路径名查找]]></title><link>https://blog.csdn.net/sium__/article/details/51338819</link><guid>https://blog.csdn.net/sium__/article/details/51338819</guid><author>sium__</author><pubDate>Wed, 11 May 2016 16:12:11 +0800</pubDate><description><![CDATA[对于文件系统的大部分操作（open、stat、unlink等等）都要涉及多多少少的路径解析。路劲解析是根据路径名（name string）得到对应的dentry对象，通过路径行走的方式。本文就来介绍路径行走。路径行走解释  路径是由一个开始字符（根目录、当前工作目录或者fd指向的目录），和一串其他的文件名组成的，path中的每一个文件名用/分割开。名称查找（Name Lookup）就是希望根据已知的]]></description><category></category></item><item><title><![CDATA[APUE阅读笔记（九）——进程关系]]></title><link>https://blog.csdn.net/sium__/article/details/51258678</link><guid>https://blog.csdn.net/sium__/article/details/51258678</guid><author>sium__</author><pubDate>Wed, 27 Apr 2016 10:09:25 +0800</pubDate><description><![CDATA[说明：1、此章较为简单，但是概念很多，记忆比较困难进程组 进程组是一个或者多个进程的集合，每一个进程组有一个唯一的进程组ID，进程组ID也就是组长进程的PID。同一组进程可以接受来自同一个终端的信号。 
 一个进程组从创建开始到最后一个进程结束这段时间被称为进程组的生命周期。会话 会话是一个或者多个进程组的几个，一个用户登陆一个终端创建一个会话，在用户登陆期间，创建的所有进程属于同一个会话，而完成同]]></description><category></category></item><item><title><![CDATA[APUE阅读笔记（十）——信号]]></title><link>https://blog.csdn.net/sium__/article/details/51258235</link><guid>https://blog.csdn.net/sium__/article/details/51258235</guid><author>sium__</author><pubDate>Wed, 27 Apr 2016 09:35:35 +0800</pubDate><description><![CDATA[说明：1、信号真的看的很模糊 
2、但是还是要坚持看概念 产生信号的进程是异步随机的，信号产生了以后我们常常对信号做以下三种操作：1、捕捉信号 我们可以在程序里用signal函数设置一个信号的操作方式，如果要捕捉这个信号，signal函数的第二个参数设置位一个返回值位void，参数是int的函数指针，这样就相当于通知内核，如果该信号产生了，调用这个函数进行处理。 
 SIGKILL和SIGSTOP信]]></description><category></category></item><item><title><![CDATA[操作系统还原真相阅读笔记（一）——答疑解惑]]></title><link>https://blog.csdn.net/sium__/article/details/51240630</link><guid>https://blog.csdn.net/sium__/article/details/51240630</guid><author>sium__</author><pubDate>Mon, 25 Apr 2016 20:37:11 +0800</pubDate><description><![CDATA[说明1、本书真是好书 
2、想到再补充一、为什么库函数可以调用系统调用 之前看APUE的时候看到的，exit（库函数）实现实际上还是调用了系统调用sys_exit。按照常理来说，标准C库函数应该具有可移植性，为什么就能调用UNIX系统专用的系统调用呢？C语言编译器也是通用的啊，比如说这个exit函数我在VC下编译能不能通过呢？ 
 这个问题其实一句话就大概解释清楚了，那就是C语言编译器提供库函数有一]]></description><category></category></item><item><title><![CDATA[阅读Linux0.11——main.c]]></title><link>https://blog.csdn.net/sium__/article/details/51182374</link><guid>https://blog.csdn.net/sium__/article/details/51182374</guid><author>sium__</author><pubDate>Tue, 19 Apr 2016 11:57:13 +0800</pubDate><description><![CDATA[目录：1、前言 
1、main.c功能描述 
2、main.c代码分析一、前言 这个前言的目的就是解释清楚理解main运行的一些基本的概念。如下：1、Linux0.11也是有CPU负载均衡的的  很神奇吧，最开始Linus已经考虑了CPU负载均衡这一点了，先别急着惊叹，我来跟你说说是怎么一回事。 
 基本上现在的linux里，都有0号进程，进程调度的时候，如果检测到就绪队列为空，就会一直执行0号进程]]></description><category></category></item></channel></rss>