Loading

Linux Kernel 学习笔记

1 一些有用的资料

linux内核相关源代码

Linux 内核代码开发

内含大量示例与分析

Linux 内核模块编程指南[11] (英文)

Github上硬核的免费的Cookbook。 内涵大量的示例

现代操作系统 -原理与实现

上海交通大学 陈海波 夏虞斌教授著

由浅入深介绍现代操作系统经典理论与方法

这本书的内容较为新颖,与传统的《操作系统概念》等书以x86体系为主导,基本以介绍Linux、UNIX等宏内核架构的操作系统为主不同,该书也会堆当前已广泛流行的ARM等体系结构进行讲解,溶蚀对当前新兴而又经典的微内核架构等系统进行深入介绍。

与上书配套的视频课程

2 kernel 开发环境

开发环境采用 ubuntu虚拟机xshellvscode (remote插件)

也可以使用实体机 或者直接在虚拟机里使用vscode/vim/gedit 等编辑器和shell进行开发

但是在windows环境下进行 个人觉得效率更高

ubuntu虚拟机的版本为

Linux ubuntu 5.11.0-25-generic #27~20.04.1-Ubuntu SMP Tue Jul 13 17:41:23 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

内核版本

linux-headers-5.11.0-25-generic - Linux kernel headers for version 5.11.0 on 64 bit x86 SMP

配置环境时,需要为ubuntu虚拟机配置静态ip方便 xshell和vscode通过ssh协议连接上虚拟机,之后就可以在windows中愉快的coding了

关于使用vscode的自动补全功能,可以在在vscode中按Ctrl+Shift+P 然后输入edit选择C/C++ 配置,之后在c_cpp_properties.json文件中配置头文件包含路径

具体就是在"includePath"下加上下列三条, 因为内核版本不同中间的linux-headers-5.11.0需要修改成自己对应的目录

"/usr/src/linux-headers-5.11.0-25-generic/include",
"/usr/src/linux-headers-5.11.0-25-generic/include/linux",
"/usr/src/linux-headers-5.11.0-25-generic/arch/arm/include"

3 linux 内核保护

3.1 SMAP(Supervisor Mode Access Prevention)

管理模式访问保护

作用是禁止内核CPU访问用户空间的数据

3.2 SMEP(Supervisor Mode Exectuion Prevention)

管理模式执行保护

禁止内核态执行用户态的代码

当CPU处于ring0模式(即内核态时),执行用户空间的代码 会触发页错误 这个保护在arm 中被称为PXN

3.3 KPTI(Kernel Page Table Isolation)

内核页表隔离

KPTI补丁基于KAISER,它是一个用于缓解不太重要问题的早期补丁,当时业界还未了解到Meltdown的存在。

如果没有KPTI,每当执行用户空间代码(应用程序)时,Linux会在其分页表中保留整个内核内存的映射,并保护其访问。这样做的优点是当应用程序向内核发送系统调用或收到中断时,内核页表始终存在,可以避免绝大多数上下文切换相关的开销(TLB刷新、页表交换等)。

KPTI通过完全分离用户空间与内核空间页表来解决页表泄露。支持进程上下文标识符(PCID)特性的x86处理器可以用它来避免TLB刷新,但即便如此,它依然有很高的性能成本。据KAISER原作者称,其开销为0.28%[2];一名Linux开发者称大多数工作负载下测得约为5%,但即便有PCID优化,在某些情况下开销高达30%。

使用内核启动选项“pti=off”可以部分禁用内核页表隔离。依规定也可对已修复漏洞的新款处理器禁用内核页表隔离。

https://blog.csdn.net/pwl999/article/details/112686914

posted @ 2021-08-30 10:41  N7Utb  阅读(238)  评论(0)    收藏  举报