蜗窝科技

蜗窝科技

蜗窝科技 —— 嵌入式 Linux 内核技术笔记与讨论存档

共 373 篇技术笔记(2014–2026)· 讨论区存档(163 个主题) · 数据下载

致驱动工程师的一封信

作者:smcdef · 发布于 2018-04-14 21:00 · 统一设备模型

作为一个算是合格的驱动工程师,总是有很多话想说。代码看的多了总是有些小感悟。可能是吧。那就总结一下自己看的代码的一些感悟和技巧。如何利用你看的这些代码?如何体现在工作的调试中。作为驱动工程师,主要的工作就是移植各种驱动,接触各种硬件。接触最多的就是dts、中断、gpio、sysfs、proc fs。如何利用sysfs、proc fs及内核提供的接口为我们降低调试难度,快速解决问题呢?

阅读全文 » · 评论 15 · 浏览 55607

SLUB DEBUG原理

作者:smcdef · 发布于 2018-02-22 21:49 · 内存管理

1. 前言 在工作中,经常会遇到由于越界导致的各种奇怪的问题。为什么越界访问导致的问题很奇怪呢?在工作差不多半年的时间里我就遇到了很多越界访问导致的问题(不得不吐槽下IC厂商提供的driver,总是隐藏着bug)。比如说越界访问导致的死机问题,这种问题的出现一般需要长时间测试才能发现,而且发现的时候即使有panic log。你也没什么头绪。这是为什么呢?

阅读全文 » · 标签 slub内存管理 · 评论 18 · 浏览 47108

图解slub

作者:smcdef · 发布于 2018-02-22 21:02 · 内存管理

1. 前言 在 Linux 中,伙伴系统( buddy system )是以页为单位管理和分配内存。但是现实的需求却以字节为单位,假如我们需要申请 20Bytes ,总不能分配一页吧!那岂不是严重浪费内存。那么该如何分配呢? slab 分配器就应运而生了,专为小内存分配而生。 slab 分配器分配内存以 Byte 为单位。但是 slab 分配器并没有脱离伙伴系统,而是基于伙伴系统分配的大内存进一步

阅读全文 » · 标签 slub内存管理 · 评论 18 · 浏览 62543

Deadline调度器之(二):细节和使用方法

作者:linuxer · 发布于 2018-02-22 18:23 · 进程管理

Linux内核的DL调度器是一个全局EDF调度器,它主要针对有deadline限制的sporadic任务。注意:这些术语已经在本系列文章的 第一部分 中说明了,这里不再赘述。在这本文中,我们将一起来看看Linux DL调度器的细节以及如何使用它。另外,本文对应的英文原文是https://lwn.net/Articles/743946/,感谢lwn和Daniel Bristot de Oliveir

阅读全文 » · 标签 schedulerDeadline · 评论 3 · 浏览 27051

KASAN实现原理

作者:smcdef · 发布于 2018-02-11 22:32 · 内存管理

1. 前言 KASAN是一个动态检测内存错误的工具。KASAN可以检测全局变量、栈、堆分配的内存发生越界访问等问题。功能比SLUB DEBUG功能齐全并且支持实时检测。越界访问的严重性和危害性通过我之前的文章(SLUB DEBUG技术)应该有所了解。正是由于SLUB DEBUG缺陷,因此我们需要一种更加强大的检测工具。难道你不想吗?KASAN就是其中一种。KASAN的使用真的很简单。但是我是一个追

阅读全文 » · 标签 KASAN原理 · 评论 32 · 浏览 77739

deadline调度器之(一):原理

作者:linuxer · 发布于 2018-01-31 19:20 · 进程管理

关于deadline调度器的文档有两篇,本篇简单介绍了实时调度及其背后的一些理论。另外一篇将专门讨论Linux系统中的Deadline调度器。另外,本文主要的框架和思想来自 Deadline scheduling part 1 — overview and theory ,但经过作者的翻译、整理和演绎。

阅读全文 » · 标签 deadline调度器 · 浏览 33346

Meltdown论文翻译

作者:linuxer · 发布于 2018-01-19 20:18 · 基础学科

本文是作者阅读meltdown论文随手翻译的一些文字记录,希望能帮助到那些对meltdown感兴趣,但英文不是那么好的同学。水平有限,欢迎指正。

阅读全文 » · 标签 Meltdown · 评论 3 · 浏览 22647

统一设备模型:kobj、kset分析

作者:callme_friend · 发布于 2018-01-09 18:37 · 统一设备模型

kobj/kset 作为统一设备模型的基础,到底提供了哪些功能,在具体应用过程中,如 device 、 bus 甚至 platform_device 等是如何使用 kobj/kset 的,这是本文的主要阐述内容。

阅读全文 » · 标签 ksetkobj · 评论 6 · 浏览 28565

O(n)、O(1)和CFS调度器

作者:linuxer · 发布于 2018-01-08 19:19 · 进程管理

随着内核版本的演进,其源代码的膨胀速度也在递增,这让Linux的学习曲线变得越来越陡峭了。这对初识内核的同学而言当然不是什么好事情,满腔热情很容易被当头浇灭。我有一个循序渐进的方法,那就是先不要看最新的内核,首先找到一个古老版本的内核(一般都会比较简单),将其吃透,然后一点点的迭代,理解每个版本变更背后的缘由和目的,最终推进到最新内核版本。 本文就是从2.4时代的任务调度器开始,详细描述其实现并慢

阅读全文 » · 标签 O(n)O(1)CFSscheduler · 评论 17 · 浏览 32635

中断唤醒系统流程

作者:smcdef · 发布于 2018-01-01 17:03 · 中断子系统

1) 设备唤醒cpu之后是立即跳转中断向量表指定的位置吗?如果不是,那么是什么时候才会跳转呢? 2) 已经跳转到中断服务函数开始执行代码,后续就会调用你注册的中断handle 代码吗?如果不是,那中断服务函数做什么准备呢?而你注册的中断handle又会在什么时候才开始执行呢? 3) 假如register_thread_irq方式注册的threaded irq中调用msleep(1000),睡眠1秒

阅读全文 » · 标签 电源管理中断处理中断子系统中断唤醒 · 评论 22 · 浏览 49909