如何读 Linux 内核

本文是关于内核入门的思路,并不涉及内核本身。本文纯属个人观点,不成熟。


一 基础


1. 汇编语言与 x86 体系结构

理解操作系统要先理解计算机,理解计算机需要理解汇编。当然,内核的大部分都使用 C 语言进行开发,在 2.6.11 中, arch/x86/boot/setup.S 中,实现了操作系统启动的初始化工作,后来在 3.0+ 中也用 C 来实现了。
学习 x86 而不是其他体系的理由是,你的笔记本和台式机都是 x86,仅此而已。
关于汇编,推荐的书目是《Professional assembly programing》,因为这本书非常简单,尽管知识面比较狭窄,但是初期够用。汇编学习比较漫长,没有耐心可以暂时先跳过深入学习。


2. C 语言

肯定必须非常熟悉,程序员必练。
推荐书籍:丹尼斯里奇的《C 程序设计语言》。


3. Unix 编程经验

用 C 或者 C++ 写真正的代码。至少得知道,Unix 大概是个什么样子。Linus 说,Unix 有六个基本系统调用(open, close, read, write, fork, exec),然后加上 pipe。


二 内核编译

这事情其实没有实际意义,你都还没开始写代码呢......但是这会让你的心里有个大概的认识:我后面的工作,会这样子嵌入内核中。


1. 内核的选择

一般情况考虑从实际出发,公司 / 实验室的人用什么,跟着做。如果你只是自己玩,那就随意,建议和你的 guest os 版本接近,否则比较调整和编译选项比较痛苦。


2. Guest OS 的选择

没有太多经验,但是倾向于 Gentoo 这种比较开放的,像 ubuntu 这种隐藏的事情较多的,不是一个好选择,但是如果你只是写一个模块而不进入内核,ubuntu  OK 的。


3. 虚拟机

VirtualBox 是一个比较理想的选择,而且允许 shared folder 和 snapshot 这两个非常非常重要的特性,特别是 snapshot,也许你可以参考这个: 点击打开链接 。


4. 编译安装

参考此处: Compile kernel in the ubuntu way , 或者参考自带的 README 文档(后者更加好)。注意下要使用你的 guest os 的 config 而不是 defconfig,当这可能导致内核编译非常漫长,非常巨大(你可以自己根据 guest os 的 config 来调整编译选项)。随后你可以 
uname -r
检查一下自己的版本,看看对不对,然后就没了,一般装上新内核之后不去运用新特性的话,看不出什么区别。


三 内核模块

或许是时候你应该写一个内核模块的 hello world 了,你肯定会感到非常开心,因为 part 2 的环境建立通常浪费你 1~2 天时间,而且很 boring。

推荐的书目是:《 The linux kernel module programing guide》,电子书,非常短,真正的 hello world,给你一个对于内核的,比较具体的初步认识。这一部分其实是比较容易的。

如果涉及驱动,内核的 Document/kernel-docs.txt 推荐了一本《Linux Device Drivers》,个人感觉可以参考。


四 内核本身

推荐的书是《Understanding the linux kernel》,就算你是对于计算机基础薄弱,一样能看懂,非常厚,建议先看附录的计算机启动,初步不用深入理解,先看个大概流程,然后再开始看正文。

如果你现在要在内核中做改动,个人认为《深入理解 linux 内核架构》不错,纯工具书,如果要给内核文件系统增加功能或者机制,很好的参考书。

不要看《Linux kernel develoment》,个人认为不三不四的一本书,逻辑混乱。

最重要的,读代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值