楼主:
bendog (bendog)
2015-01-04 01:16:35※ 引述《shihyuyao (shihyuyao)》之铭言:
: 请问一下学习Linux kernel 前需要先学 Linux 系统程式吗?
: 如果我直接学kernel 会不会有什么困难度?
: 我有唸过恐龙书, 基本的 process ,thread 也有概念只是没有写过很多Linux 系统程式
: 网络看到有人建议学kernel 可以从 linux driver 入门
: 先看 Linux Device Drivers, 3rd Edition
: 这样学方式对吗?
: 如果从 kernel 书入门先看
: Robert Love 在 Linux Kernel Development (3rd Edition) 是吗?
: 还有看到前面PO文可以用Qemu + kernel + gdb 学kernel 这样效果好吗?
: 谢谢
可以先决定要看哪一部分,例如memory, process, network, file system. 我是从netwo
rk 进入。看书搭配linux 2.6 source code. 通常英文书都只讲个大概,如果要细讲sour
ce code 的话,简体书比较多。 看kernel 先专注自己想知道的部分,比如封包在ipv4
层的接收处理,其实稍微想一下就是fragment, option, 拔header, 往上送的处理。但是
会看到spin_lock, spin_lock_bh ... , timer, kmalloc, softirq, netlink 等一堆不
是主要ipv4层 概念的程式码。我会选择性忽略一些像是timer 的做法只专注我想知道的
地方,我只要知道哪些API 可以对imer做处理。当然也可以trace timer code, 但就偏掉
原本想知道的部分。我觉得入手不要直接看device driver 。Driver 有很大一部分是处
理hardware 的程式码,只有一小部分是衔接linux kernel. 你的是动机是想学linux ker
nel ,但没有特别针对哪一部分的话,可以先看 kernel context 有哪些,比如 hardwar
e irq, softirq, kernel thread. 然后是spin_lock, rcu 的实现,这些在kernel 蛮长
看到的。另外,我是用gtags/htags 来trace code 的。