Linux内核
文章平均质量分 89
本专栏主要分享学习Linux内核源码过程中的感悟和笔记。
嵌入式与Linux那些事
这个作者很懒,什么都没留下…
展开
-
【内核】深入分析内核panic(二)--内核中的少林扫地僧-NMI Watchdog Timer
这个时候,内存,芯片组,硬盘……不怪我们不客气了,赶紧打印出现场(CPU出现LOCKUP时的相关上下文,包括寄存器值,函数调用栈等),且记入LOG,作为判案的证据,同时有警示后人只用。我们总认为循环是可以结束的,但是别要忘记,事物都是辩证的,有的时候,碰巧发生了某些预料之外的条件,让这个循环成了彻彻底底的死循环。中断既来之,我就安之。也许你有这样的感觉,既然5秒之内没有一个中断,基本肯定中断是已经被禁掉了,那CPU就被迫只会一直执行那段有问题的代码,根本没有机会来执行所谓的“保留现场,强行重启”的代码。转载 2023-04-30 11:11:40 · 2805 阅读 · 0 评论 -
【内核】深入分析内核panic(三)--内核错误处理流程
(3)若panic流程会执行内存转储,则所有系统相关信息都会被保存到转储文件中,因此就不需要调用后面的通知链,因此可直接调用转储操作。内核发生同步异常后,会根据异常发生时所处的异常等级(在当前异常等级,还是在低于当前异常等级中触发),和其所使用的栈指针类型(sp_el0还是sp_el1),跳转到相应的异常处理入口。内核发生同步异常后,会根据异常发生时所处的异常等级(在当前异常等级,还是在低于当前异常等级中触发),和其所使用的栈指针类型(sp_el0还是sp_el1),跳转到相应的异常处理入口。转载 2023-04-30 11:12:34 · 4044 阅读 · 0 评论 -
【内核】深入分析内核panic(一)--内核问题的原因
linux内核包括进程管理、内存管理、中断管理、设备驱动、同步机制等各种模块,它们共同运行在一个共享的地址空间中,因此在运行中一旦出现问题,彼此之间可能具有千丝万缕的联系。而且与用户态不同,内核还需要与形形色色的硬件打交道,因此对于某些较为诡异的问题,除了软件以外还可能受到硬件的影响。如由于射线或电磁辐射的原因造成内存中某个bit翻转,或者某些非法总线地址的访问,导致总线挂死等。转载 2023-04-30 10:37:33 · 3424 阅读 · 0 评论 -
Linux 内核学习经验总结
开篇学习内核,每个人都有自己的学习方法,仁者见仁智者见智。以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下。内核学习,一偏之见;疏漏难免,恳请指正。为什么写这篇博客刚开始学内核的时候,不要执着于一个方面,不要专注于一个子系统就一头扎到实际的代码行中去,因为这样的话,牵涉的面会很广,会碰到很多困难,容易产生挫败感,一个函数体中(假设刚开始的时候正在学习某个方面的某个具体的功能函数)很可能掺杂着其他各个子系统方面设计理念(多是大量相关的数据结构或者全局变量,用于支撑转载 2021-11-20 21:59:54 · 1731 阅读 · 1 评论 -
Linux内核中container_of宏的详细解释
上一节[拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)](https://blog.csdn.net/qq_16933601/article/details/108542631)我们在分析Linux内核链表的时候注意到内核在求解结构体偏移的时候巧妙的使用了container_of宏定义,今天我们来详细剖析下内核到底是如何求解结构体成员变量的地址的。原创 2020-09-24 00:27:54 · 5604 阅读 · 14 评论 -
拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)
在实际的工作中,我们可能会经常使用链表结构来存储数据,特别是嵌入式开发,经常会使用linux内核最经典的双向链表 list_head。本篇文章详细介绍了Linux内核的通用链表是如何实现的,对于经常使用的函数都给出了详细的测试用例,并且移植了Linux内核的链表结构,使得在任意平台都可以方便的调用内核已经写好的函数。建议收藏,以备不时之需!原创 2020-09-16 00:41:31 · 4697 阅读 · 27 评论 -
面试官让你讲讲Linux内核的竞争与并发,你该如何回答?
工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流!爱好跑步,打篮球,睡觉。欢迎加我QQ1500836631(备注CSDN),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。文章目录内核中的并发和竞争简介原子操作原子操作简介整型原子操作函数位原子操作函数原子操作例程自旋锁自旋锁简介自旋锁操作函数自旋锁例程读写自旋锁读写锁例程顺序锁顺序锁操作函数自旋锁使用注意事项信号量信号量简介信号量操作函数信号量例程互斥体互斥体简介互斥体操.原创 2020-06-19 19:12:53 · 7944 阅读 · 16 评论 -
你真的懂Linux内核中的阻塞和异步通知机制吗?(花了五天整理,墙裂推荐!)
工科生一枚,热衷于底层技术开发,有强烈的好奇心,感兴趣内容包括单片机,嵌入式Linux,Uboot等,欢迎学习交流!爱好跑步,打篮球,睡觉。欢迎加我QQ1500836631(备注CSDN),一起学习交流问题,分享各种学习资料,电子书籍,学习视频等。文章目录阻塞/非阻塞简介阻塞/非阻塞例程等待队列简介等待队列相关函数定义等待队列初始化等待队列头定义并初始化一个等待队列项将队列项添加到等待队列头将队列项从等待队列头移除等待唤醒等待事件轮询selectpollepoll异步通知概念Linux信号异步通知.原创 2020-06-25 20:34:38 · 9314 阅读 · 14 评论 -
Linux内核中断顶半部和底半部的理解
设备的中断会打断内核进程中的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽量短小精悍。但是,这个良好的愿望往往与现实并不吻合。在大多数真实的系统中,当中断到来时,要完成的工作往往并不会是短小的,它可能要进行较大量的耗时处理。图10.3描述了iⅸ内核的中断处理机制。为了在中断执行时间尽量短和中断处理需完成的工作尽量大之间找到一个平衡点,Linⅸ将中断处理程序分解为两个半部:顶半部( Top half)和底半部( Bottom Half)。顶半部用于完成尽量少的比较紧急的功能,它往往只是简单原创 2020-07-18 09:58:25 · 8111 阅读 · 11 评论