怎样阅读Linux源代码
来源:互联网 发布:数据挖掘的算法有哪些 编辑:程序博客网 时间:2024/05/02 04:48
像Linux内核这样庞大而复杂的程序看起来确实让人望而生畏,它象一个很大的球,没有起点和终点。在读源代码的过程中,你会遇到这样的情况,当读到内核的某一部分时又会涉及到其它更多的文件,当返回到原来的地方想继续往下读时,又忘了原来读的内容。在internet上,很多人为此付出了很大的努力,制作出了源代码导航器,这为源代码阅读提供了良好的条件,站点为:http://lxr.linux.no/source,下面给出阅读源代码的一些线索。 1. 系统的启动和初始化 在基于Intel的系统上,当 loadlin.exe 或 LILO把内核装入到内存并把控制权传递给内核时,内核开始启动。关于这一部分,看arch/i386/kernel/head.S ,head.S进行特定结构的设置,然后跳转到init/main.c的main()例程。 2. 内存管理 内存管理的代码主要在/mm,但特定结构的代码在archkernel,调度程序在kernel/sched.c,fork的代码在kernel/fork.c,task_struct 数据结构在 include/linux/sched.h中。 4. PCI PCI 伪驱动程序在 drivers/pci/pci.c ,其定义在include/linux/pci.h。每一种结构都有一些特定的 PCI BIOS 代码, Intel的在arch/alpha/kernel/bios32.c。 5. 进程间通信 所有System V IPC 对象权限都包含在 ipc_perm 数据结构中,这可以在 include/linux/ipc.h中找到。 System V 消息是在 ipc/msg.c中实现, 共享内存在 ipc/shm.c中,信号量在 ipc/sem.c中,管道在 ipc/pipe.c中实现。 6. 中断处理 内核的中断处理代码是几乎所有的微处理器所特有的。中断处理代码在 arch/i386/kernel/irq.c中,其定义子在 include/asm-i386/irq.h中。 7. 设备驱动程序 Linux内核源代码的很多行是设备驱动程序。Linux设备驱动程序的所有源代码都保存在/driver,根据类型可进一步划分为: /block 块设备驱动程序如ide(在ide.c)。如果你想看包含文件系统的所有设备是如何被初始化的,你应当看drivers/block/genhd.c中的device_setup(),device_setup()不仅初始化了硬盘,当一个网络安装nfs文件系统时,它也初始化网络。块设备包含了基于IDE和SCSI的设备。 /char 这是看字符设备(如tty,串口及鼠标等)驱动程序的地方。 /cdrom Linux的所有CDROM代码都在这儿,如在这儿可以找到Soundblaster CDROM的驱动程序。注意ide CD的驱动程序是 ide-cd.c,放在drivers/block,SCSI CD的驱动程序是scsi.c,放在drivers/scsi。 /pci 这是PCI伪驱动程序的源代码,在这里可以看到PCI子系统是如何被映射和初始化的。 /scsi 在这里可以找到所有的SCSI代码及Linux所支持的scsi设备的所有设备驱动程序。 /net 在这里可以找到网络设备驱动程序,如DECChip 21040 PCI 以太网驱动程序在tulip.c中。 /sound 这是所有声卡驱动程序的所在地。 8. 文件系统 EXT2 文件系统的源代码全部在 fs/ext2/ 目录下,而其数据结构的定义在 include/linux/ext2_fs.h, ext2_fs_i.h 及 ext2_fs_sb.h中。 虚拟文件系统的数据结构在include/linux/fs.h中描述,而代码是在fs/*中。 缓冲区高速缓存与更新内核的守护进程的实现是在 fs/buffer.c中 。 8. 网络 网络代码保存在/net中,大部分的include文件在include/net下,BSD套节口代码在net/socket.c中,IP 第4版本的套节口代码在net/ipv4/af_inet.c。一般的协议支持代码(包括sk_buff 处理例程)在net/core下,TCP/IP联网代码在net/ipv4下,网络设备驱动程序在/drivers/net下。 9. 模块 内核模块的代码部分在内核中,部分在模块包中,前者全部在kernel/modules.c中,而数据结构和内核守护进程kerneld的信息分别在include/linux/module.h和include/linux/kerneld.h 中。如果你想看ELF目标文件的结构,它位于include/linux/elf.h中。 http://oss.org.cn/kernel-book/ch01/1.6.3.htm
- 怎样阅读Linux源代码
- 怎样阅读源代码
- 怎样阅读dos源代码?
- 怎样阅读源代码
- 怎样阅读源代码
- 怎样阅读源代码?
- 怎样高效的阅读源代码
- Linux下阅读源代码
- Linux源代码阅读方法
- Linux源代码阅读计划
- 如何阅读linux源代码
- linux源代码阅读技巧
- 如何阅读linux源代码
- 如何阅读linux源代码
- Linux源代码阅读方法
- Linux内核源代码阅读
- Linux源代码阅读
- Linux源代码阅读辅助工具
- 网络分层|网关,路由,交换机
- com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence.
- hdu1711 Number Sequence
- 资料链接
- Node.js简介:可独立于浏览器,运行于服务器的Javascript
- 怎样阅读Linux源代码
- (转)汇编语言浮点数指令集
- 用HTML,Javascript,CSS开发桌面应用
- Linux进程结构task_struct分析
- Silverlight关于容器与子控件的加载与事件触发
- 妙用SQL Server聚合函数和子查询迭代求和
- 18身份证号码编码规则
- Mozilla解释为什么不使用H.264
- 近期关注的书,以及网站上价格对比。