学习linux内核的经典书籍介绍

2023-11-14

有关内核的书籍可以用汗牛充栋来形容,不过只有一些经典的神作经住了考验。首先是5本久经考验的神作(个人概括为“2+1+2”,第一个2是指2本全面讲解内核的书,中间的1指1本讲解驱动开发的书,后面的2则指2本有关内核具体子系统的书,你是否想到了某某广告里三个人突然站起单臂齐举高呼“1比1比1”的场景?)。

《Linux内核设计与实现》

       简称LKD,从入门开始,介绍了诸如进程管理、系统调用、中断和中断处理程序、内核同步、时间管理、内存管理、地址空间、调试技术等方面,内容比较浅显易懂,个人认为是内核新人首先必读的书籍。新人得有此书,足矣!
《深入理解Linux内核》

        简称ULK,相比于LKD的内容不够深入、覆盖面不广,ULK要深入全面得多。
前面这两本,一本提纲挈领,一本全面深入。

《Linux设备驱动程序》

       简称LDD,驱动开发者都要人手一本了。

《深入理解Linux虚拟内存管理》

      简称LVMM,是一本介绍Linux虚拟内存管理机制的书。如果你希望深入的研究Linux的内存管理子系统,仔细的研读这本书无疑是最好的选择。

《深入理解LINUX网络内幕》

       一本讲解网络子系统实现的书,通过这本书,我们可以了解到Linux内核是如何实现复杂的网络功能的。

      这5本书各有侧重,正如下面的图所展示的那样,恰好代表了个人一直主张的内核学习方法:首先通过LKD或ULK了解内核的设计实现特点,对内核有个整体全局的认识和理解,然后可分为两个岔路,如果从事驱动开发,则钻研LDD,如果希望对内核不是泛泛而谈而是有更深入的理解,则可以选择一个自己感兴趣的子系统,仔细分析它的代码,不懂的地方就通过社区、邮件列表或者直接发Email给maintainer请教等途径弄懂,切勿得过且过,这样分析下来,对同步、中断等等内核的很多机制也同样会非常了解,俗话说的一通则百通就是这个道理。当然,如果你选择研究的是内存管理或者网络,则可以有上面的两本书可以学习,如果是其他子系统,可能就没有这么好的运气了。

另,linux  如下几大子系统

1:          内核用户空间和内核空间的交互管理系统接口。System call 系统调用接口

2        内存管理子系统。

3        进程管理子系统。

4        体系结构相关的系统。和CPU相关的代码

5        虚拟文件系统。

6        网络子系统。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习linux内核的经典书籍介绍 的相关文章

  • 发送自动电子邮件时安全输入密码

    这很可能是重复的 但我已经非常仔细地研究了类似的问题 This https stackoverflow com questions 28393750 secure email without prompting for password r
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • cdc_acm:无法设置 dtr/rts - 无法与 USB cdc 设备通信

    我试图使用 pic24fj128gb206 枚举 usb cdc 设备 设备似乎已正确枚举 但是当我将设备连接到 Linux PC 时 我从内核收到以下警告消息 cdc acm 1 8 1 6 7 1 0 failed to set dtr
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • 为 OpenWrt 编写和编译程序

    我有一个在 OpenWRT 下运行的具有 MIPS 架构的嵌入式设备 系统类型 MediaTek MT7628AN ver 1 eco 2机器 WRTnode2P 处理器 0CPU型号 MIPS 24KEc V5 5 我想通过我的电脑 ub
  • 从核心转储中获取堆栈跟踪

    如何从核心转储文件中获取堆栈跟踪 该文件大约 14 mb 是在我的应用程序退出并显示 分段错误 后生成的 我使用的是红帽 5 5 gdb usr bin myapp binary corefile 然后 使用以下之一 gdb bt gdb
  • 如何在Linux中自动启动需要X的应用程序

    我试图在系统进入运行级别 5 时自动启动 X 应用程序 这样做的正确方法是什么 我写了一个脚本并将其放在 etc init d 中 我已运行适当的 chkconfig 命令来设置 etc rcX d 目录中的符号链接 一切工作正常 除了当我
  • 如何找到进程启动时使用的原始用户名?

    有一个 perl 脚本需要以 root 身份运行 但我们必须确保运行该脚本的用户最初没有以用户 foo 身份登录 因为它将在脚本运行期间被删除 那么 我如何查明自登录以来可能已多次起诉的用户是否在该链中的任何时间都没有模拟过 foo 我发现
  • 在 C 中运行 setuid 程序的正确方法

    我有一个权限为4750的进程 我的Linux系统中存在两个用户 root 用户和 appz 用户 该进程继承以 appz 用户身份运行的进程管理器的权限 我有两个基本惯例 void do root void int status statu

随机推荐

  • 访问者模式(Visitor)

    设计模式系列 Visitor 访问者模式 对象行为模式 1 意图 表示一个作用于某对象结构中的各元素的操作 它使你可以在不改变各元素的类的前拐下定义作用于这些元素的新操作 2 适用性 在下列情况下使用Visitor模式 一个对象结构包含很多
  • 数字水印技术:概念、应用及现状

    出处 伯晓晨 沈林成 常文森 一 引言 随着信息时代的到来 特别是Internet的普及 信息的安全保护问题日益 突出 当前的信息安全技术基本上都以密码学理论为基础 无论是采用传统的密钥系统 还是公钥系统 其保护方式都是控制文件的存取 即将
  • java.lang.NoSuchMethodError: org.apache.curator.framework.api.CreateBuilder.creatingParentsIfNeeded(...

    1 错误信息 java lang NoSuchMethodError org apache curator framework api CreateBuilder creatingParentsIfNeeded Lorg apache cu
  • shell无限死循环

    学习shell脚本 练习脚本时 每次测试脚本都需要重新打开文件 为了方便就想到了死循环 想到shell脚本是基于C语言和C 编写的 顺着想法试了一通C循环方法 没对一个 经过网上大佬们的文章学习 学习到了while循环和for循环 记录一下
  • 九、基本数据类型-浮点类型

    如果 我们 创建了 一个浮点类型的变量 那么 这个变量 就可以用来 存储 浮点类型的数据 也就是 含有小数数位的数据 如果 一个数字 含有 小数点 以及 后面的数位 那么 这个数字 就属于 浮点类型 如果 小数点前面 或者 后面的数位 是
  • Java8对list排序(正序倒序)

    话不多说直接上干货 这里我写了一个list数组里边add了三个Order实体 我的ucId price qty都是int类型 第一个实例 我对price进行从小到大的排序 我的price是int类型 显然这里的第一种方式已经给出提示了 让使
  • Matlab实现Bi-Kmeans算法(每行代码标注详细注解)

    逐行代码讲解Bi Kmeans算法的原理及其实现 后续将更新该算法的进一步优化的代码的讲解 目录 一 什么是Kmeans 算法 二 bi kmeans算法原理 三 bi kmeans算法代码解析 四 总结 一 什么是Kmeans 算法 K
  • 动态规划 Leetcode 322 Coin Change(零钱兑换)

    题目 给定不同面额的硬币 coins 和一个总金额 amount 编写一个函数来计算可以凑成总金额所需的最少的硬币个数 如果没有任何一种硬币组合能组成总金额 返回 1 链接 中文版 https leetcode cn com problem
  • mysql启动命令

    1 查看mysql版本 方法一 status 方法二 select version 2 Mysql启动 停止 重启常用命令 a 启动方式 1 使用 service 启动 root localhost service mysqld start
  • 清华大学,AIGC发展研究,162页PDF

    点击上方 Python与机器智能 选择 星标 公众号 第一时间获取价值内容 收集不宜 我将资料免费分享在我的星球 后续也将会持续更新 欢迎大家加入我的这个 AIGC与GPT 知识星球 价格便宜 目前已有近130人 作为一个大厂算法工程师和机
  • C++ 封装 类

    封装 可以达到 对外提供接口 屏蔽数据 对内开放数据 比如我们用struct封装的类 即知其接口 又可以直接访问其内部数据 这样却没有达到信息隐蔽的功效 而class则提供了这样的功能 屏蔽内部数据 对外开放接口 struct中所有行为和属
  • 渣硕2020暑期实习面经

    春招也基本结束了 拿了点offer 因为一开始就没有准备找区块链方向岗位 所以准备的还是研发岗 简历写了一些分布式 所以分布式理论问的也蛮多 感觉形势蛮严峻的 好多厂貌似都不开放暑期实习了 个人比较遗憾的就是微软笔试时候浏览器没搞好 导致没
  • 错误使用 network/subsasgn>network_subsasgn (line 550) net.IW{1,1} must be a 16-by-19 matrix. 出错 network

    该代码为基于PSO和BP网络的预测 清空环境 clc clear 读取数据 load CHE2 mat 节点个数 inputnum 17 hiddennum 16 outputnum 1 训练数据和预测数据 input train inpu
  • mysql 集群 一主两从环境测试,MHA主备切换

    目录 前言 1 相关安装文件 2 虚拟机 mysql数据库安装 2 1 安装VMware 15 以及 linux 操作系统 2 2 安装mysql数据库 2 2 1安装环境准备 2 2 2 mysql 数据库安装 2 3 克隆centos虚
  • Cmake零基础教程——常用语法命令

    编译选项 在cmake脚本中 设置编译选项有两种方式 1 可以通过add compile options命令 2 也可以通过set命令修改CMAKE CXX FLAGS或CMAKE C FLAGS 存在即合理 那么使用这两种方式存在怎样的区
  • ssh和ftp登录的几种方式

    ssh登录的几种方式 本文为https www bilibili com video av755468030 笔记 1 密码账号登录 ssh p 1234 name 目标ip p 为指定端口 name为用户名 2 使用公钥私钥登录 获取指定
  • IDEA中javaweb项目导入外部jar包

    IDEA中javaweb项目导入外部jar包 打开Project Structure 选中Modules 选择Dependencies 点击 选择要导入的jar包或jar包文件夹 选中要使用的jar包或jar包文件夹 点击ok 如果只是按照
  • excel导出功能

    安装excel所需依赖和按需加载 由于 Export2Excel不仅依赖js xlsx还依赖file saver和script loader 所以你先需要安装如下命令 npm install xlsx file saver S npm in
  • React传参和定义变量

    react 声明变量 react传参
  • 学习linux内核的经典书籍介绍

    有关内核的书籍可以用汗牛充栋来形容 不过只有一些经典的神作经住了考验 首先是5本久经考验的神作 个人概括为 2 1 2 第一个2是指2本全面讲解内核的书 中间的1指1本讲解驱动开发的书 后面的2则指2本有关内核具体子系统的书 你是否想到了某