内核版常见问题和精华贴总结(VER 0.1) [
zhuan :http://bbs.chinaunix.net/thread-1940276-1-1.html
内核版常见问题和精华贴总结
下面是我个人的一些总结。我学习LINUX KERNEL也才1,2年。文中难免有不对的地方,欢迎大家指正。
我的目标是写的比较完善,然后版主可以置顶。方便新人。
现在只是第一版,还不是很全面,欢迎大家在后面补充,我会及时更新到一楼。多谢。
一、常见问题:
1、如何开始学习LINUX KERNEL:
我觉得首先要有操作系统的基本知识,比如上过课,或者看过一本操作系统方面的书。起码要理解进程,虚拟内存,分页,分段等这些基本概念。如果这些你都搞不懂,看后面的会更加头疼。另外,至少要了解C语言,汇编最好也有些概念。
操作系统的书我只看过这本《Operating Systems: Internals and Design Principles》。现在已经出到了第六版。
然后看LINUX内核的书,看下面3本书,按顺序看。
前面是全名,中间是版本,再后面是缩写。如果有新版的看最新的。。
1)LINUX KERNEL DEVELOPMENT, 2ND EDITION (LKD)(注:非常好的入门书籍)
2) LINUX DEVICE DRIVERS, 3RD EDITION (LDD)(注:很好的实战书籍,对KERNEL HACKER一样有帮助)
3) UNDERSTANDING LINUX KERNEL. 3RD EDITION (ULK) (注:从硬件讲到上层,内容丰富,大观念清楚)
我一般优先看英文原版书,一个是练习英语,另外一个也是英文经典的书多一些。中文的好书也有,不过我不是很了解。
上面说的总共4本书如果你都看完了,大概理解了。那么你已经可以算是高手了,论坛里的60%以上的问题基本都可以回答,或者参与讨论了。
我觉得另外一个初学者经常面临的问题就是不知道该看哪方面的书和资料。这其中一部分原因就是基础不够扎实。解决的办法也是从基础的书看起。同时在论坛上多问问。
另外,光看书也是不够的,还要多动手实践。刚学的时候起码要学习下怎么编译内核,内核模块。然后写一些小内核模块啥的。或者参与些项目。
BTW:在本版页面上面直接点“精华”,就可以看到所有的精华贴,很方便。
如果后面想做硬件相关的话,那么建议看看各种规范。比如INTEL CPU IA32-64手册,PCI SPEC, PCI EXPRESS SPEC,ACPI SPEC等。
2、如何调试KERNEL
最常用也最方便的还是用PRINTK。具体介绍在LDD里说的很清楚。另外,新的KERNEL 2.6.2x? 之后也开始支持KGDB。还有一个方法是用QEMU或者VMWARE之类的虚拟机来调试。参考下面2个帖子:
VMWare Workstation 6.0调试Linux Kernel,竟如此方便 (作者:albcamus)
用QEMU+GDB 调试LINUX KERNEL的方法 (作者:accessory)
3、什么是虚拟地址,线性地址?
看下面这个精华贴:我理解的逻辑地址、线性地址、物理地址和虚拟地址 (作者:独孤九贱)(注:在ULK3中也有详细介绍)
4、系统调用是如何实现的?
在ULK3中有对INT 80和SYSENTER的解释。不过LINUX中还有一种VSYSCALL,主要用来提高效率,适合那些只是读取信息的SYSCALL,比如GETTIMEOFDAY. 等我找找精华贴,或者啥时总结下。
5、内核中常出现的do { } while (0)是做什么用的?
6、Segmentation Fault in Linux (作者:zx_wing)
7、关于LINUX在中断(硬软)中不能睡眠的真正原因
8、Linux汇编语言开发指南(zt) (转载者:mmgg00)
9、如何看源代码?
我一般喜欢用LXR, 常去 http://lxr.linux.no/+trees 这里看。如果你觉得前面这个网站慢的话,也可以自己搭一个LXR,或者搜下其他离你比较近的LXR. 还有很多人喜欢用SOURCE INSIGHT (SI)。不过它是个商业软件。
二、网络相关问题
1、基于2.6内核的《追踪LINUX TCP/IP代码运行》 (作者:qinjiana0786)
2、教你修改以及重构skb (作者:ubuntuer)
3、Linux内核IP Queue机制的分析 (作者:Godbach)
【FIXME:还有很多其他内容】
三、硬件相关
1、什么是总线地址?软件如何配置硬件?APIC?
2、INTEL手册中,APIC部分阅读笔记 (作者:accessory)
3、写一个块设备驱动 (作者:赵磊. 网名:OstrichFly )(注:由浅到深,非常详细)
4、Interrupt in Linux(硬件篇)(作者:zx_wing)
5、RTL8139网卡驱动程序分析[转] (转载者:Godbach)
6、改写drivers/net/8139too.c (作者:xiongce )
7、Linux-千兆网卡驱动实现机制浅析 (作者:Minit )
四、安全相关
1、Linux下实现劫持系统调用的总结 (作者:Godbach)
2、破linux内核模块验证 (作者:W.Z.T)
3、Snort 入侵检测系统源码分析 (作者:Godbach)
4、Adore-ng-0.56源码分析 (作者:ubuntuer)
5、新爆内核高危漏洞sock_sendpage的利用分析的讨论 (作者:独孤九贱)(注:首发于2009.8.18)
6、剖析一个由sendfile引发的linux内核BUG (作者:kouu)
五、其他
1、Linker Script in Linux (作者:zx_wing)(注:介绍内核文件是怎么连接的)
2、Linux内存:内存管理的实质 (作者:frank_seng )
3、linux内存管理报告 (作者:kendyke )
4、一个简单文件系统的实现 (作者:goter )
5、内核模块中对文件的读写 (作者:ubuntuer)
6、说一说:关于数据传送中 address bus 的工作原理 (作者:mik)(详细介绍读写内存时跨边界的问题)
7、关于 atomic 的话题(作者:mik)
8、基于S3C2410的Linux全线移植文档(作者:dozec)(嵌入式,ARM)