![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
kernel
文章平均质量分 89
wenshizhang
这个作者很懒,什么都没留下…
展开
-
oland显卡HDMI热插拔问题分析
描述机缘巧合之下,在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原创 2021-02-22 16:37:51 · 2809 阅读 · 11 评论 -
中断再探
前面简单介绍中断初始化和注册的基本流程,这里接上文留下来的两部分内容,中断处理和中断调试技巧。从内核开发的角度来讲说,前文是科普帮组理解我在讲什么,本文是纯干货。基本上可以帮助我修复了我遇到90%的中断错误。中断处理众所周知,中断处理统一入口是do_IRQ函数,经过一层层调用真正到处理函数。今天的分享主要集中在滴啊用 do_IRQ之前操作。CPU检测到有中断发生,然后调用handle_int...原创 2019-09-25 21:23:18 · 289 阅读 · 0 评论 -
中断初探
中断初探最近几个月调了很多中断的bug,啃了很久的源码。整理了一些东西,大佬们笑纳。离开了架构谈中断都是不深刻的,大佬们肯定玩腻了X86了,今天就以龙芯内核(龙芯官网即可获得:git://cgit.loongnix.org/kernel/linux-3.10.git)为例简单介绍一下哈。中断在内核中的生命周期主要分为三个部分:初始化,注册和中断处理,剩余的所有事情都是硬件完成的。这部分打算分享...原创 2019-08-09 20:29:22 · 567 阅读 · 0 评论 -
阅读Linux0.11——main.c
目录:1、前言 1、main.c功能描述 2、main.c代码分析一、前言 这个前言的目的就是解释清楚理解main运行的一些基本的概念。如下:1、Linux0.11也是有CPU负载均衡的的 很神奇吧,最开始Linus已经考虑了CPU负载均衡这一点了,先别急着惊叹,我来跟你说说是怎么一回事。 基本上现在的linux里,都有0号进程,进程调度的时候,如果检测到就绪队列为空,就会一直执行0号进程原创 2016-04-19 11:57:13 · 2549 阅读 · 0 评论 -
阅读linux0.11——boot
linux0.11boot主要分为三个部分,分别在三个程序里面实现,bootsect.s、head.s和setup.s。下面我们简单来分析分析这三个文件。一、bootsect.s这个程序是最先被执行的,根据linus的解释说,这个程序会被BIOS启动例程(bios-startup routines)加载到内存的0x7c00处(不明白为什么都是加载在这个位置,于渊的《一个操作系统的实现》也是说这么说的原创 2016-03-16 18:04:46 · 1041 阅读 · 0 评论 -
当我们谈论开机的时候我们在谈论什么(三)——段页式存储
本文谈论的PC都是基于X86架构,本文谈论的实现段页式存储都是基于32位操作系统。首先说一点题外话:我在写这篇文章的时候并没有实现我想要的段页式存储。本来规划的是写一个段页式存储的,后来觉得这样我后边每一个程序都要分一个段,填充一个选择子、一个描述符(这些都是程序员手动实现的,不理解原理,没有关系,后边我会讲一点原理的部分,以及我实现的并不是我想要的段页式存储)。本文主要讲这几个内容: 1、段页式原创 2015-12-18 22:25:21 · 1287 阅读 · 0 评论 -
schedule函数浅析
现代用户对操作系统的要求越来越“苛刻“,进程相应时间尽可能的快,系统的吞吐量要尽可能的多等等。这些要求在表面上看起来是互相矛盾的,所以现代操作系统提出了进程的概念,随之而来的就是进程调度。进程调度就是调度程序根据一定的准则,在就绪队列里边选择一个进程来执行。所以调度算法是调度程序讨论的核心点,不一样的内核版本调度算法以及一些机制可能是不同的,但是基本上一些大的方面是没有改变的,我看的内核版本是3.1原创 2015-10-28 18:41:05 · 6939 阅读 · 0 评论 -
内核同步机制的一些见解(未完成)
本文主要回答三个问题: 1、为什么要内核同步 2、内核同步有哪些策略 3、Liunx内核同步的代码实现 先来说说内核抢占,这时一个很重要的概念。内核抢占通俗来讲,的那个一个内核进程在运行的时候,是否允许另外一个内核进程进行抢占。内核抢占减少了用户程序的分派延时,提供了更好地人机交互。但是有的进程要求在持续运行直到结束,所以系统也提供了这样的接口,代码如下:#define preempt_di原创 2015-10-28 20:55:30 · 610 阅读 · 0 评论 -
当我们谈开机的时候我们在谈论些什么
本文主要解决了以下几个问题: 1、当你按下电源键以后都发生了什么? 2、Linux kernel初始化都在初始化什么? 3、init进程何时创建? 注:本文所有的的内核代码都是来自于kernel3.14.54,读者可以未经作者允许随意转载,但请保证文章的完整性。第一部分:当你按下电源的时候,你的计算机都做了什么。 当你按下电源的时候,你的内存,寄存器都是空的(材质都是易失性存储,断电后数据原创 2015-11-13 17:09:54 · 693 阅读 · 0 评论 -
makefile文件的编写
上次讲座的时候帮所有人已经调试通过了,下来了还是有很多人说他们的编译还是报错了。 对于我们这些编惯了程序的人来说,Makefile文件是不好写,脚本的很多规则跟程序是不一样的,不能多一个空格,该写tab的地方不能用空格代替…..我总结了以下,编译错误都是因为Makefile文件书写不对。现在我把比较常见的错误整理出来,如果你回去编译了还是不通过,先来对照对照是不是这个错原创 2015-09-21 19:41:03 · 1115 阅读 · 1 评论 -
进程的一生——请求调页篇
本文主要解答了三个问题: 1、 注:本文所有的的内核代码都是来自于kernel3.14.54,读者可以未经作者允许随意转载,但请保证文章的完整性。 内存管理部分的内容繁杂没有接构型,为了好理解一些,我准备从进程着手来简单的讲解这一部分。在do_fork函数中,新创建的子进程会调用函数dopy_mm复制父进程的内存管理等部分,在分析这个函数之前,还要说一下几个结构体: 1、mm_struct结原创 2015-11-07 12:14:28 · 2104 阅读 · 0 评论 -
我的第一个内核模块和makefile文件编写
相信很多做过内核编程的人都写过makefile,虽然之前写过一些简单的内核模块写过makefile,到今天想要写一个内核模块的时候发现之前学的的已经全部忘记了。而且之前写的时候也没有写一些博客什么的记录下来。Orz…. 言归正传,Makefile这个文件还是真的不好写。相信你跟我一样之前编程的时候为了图好看的代码风格,敲了很多很多的空格,基本上逢符号必空格。今天在写makefile时原创 2015-09-16 16:47:46 · 706 阅读 · 0 评论