linux源码组织结构(摘抄)

Linux用来支持各种体系结构的源代码包含大约4500C语言程序,存放在270个左右的子目录下,总共大约包含200万行代码,大概占用58MB磁盘空间。

1.arch 目录
     arch
子目录包括所有和cpu架构相关的内核代码。它还有更深的子目录,每一个代表一种支持的cpu架构,例如i386alpha

     一个系统启动时,一般由bootloader把内核加载入内存,然后将PC指向head.S的入口,head.S执行一些架构相关的设置,之后跳转到init/main.c中的main()函数入口处。

       在这个目录下,针对不同体系结构所移植的版本都有三个子目录:kernellibmm
      
1kernel子目录包含依赖于体系结构实现的一般内核功能,例如信号处理、时钟处理等。

       2lib子目录包含库函数的本地实现,如果从依赖于体系结构的源码编译,则运行得更快。

       3mm子目录包含存储管理实现的代码。

2.include 目录
     include
子目录包括编译内核所需要的大部分include文件。它也有更深的子目录,每一种支持的架构在此目录下都对应一个子目录。

include/asm是某个架构所需要的真实的include目录的软链接,如include/asm-i386如果改变架构,需要编辑内核的makefile文件,并重新运行Linux的内核配置程序。

3.init 目录
    
这个目录包含内核的初始化代码。你的系统想做些什么,这里...

4.mm
    
这个目录包括所有的内存管理代码,包括内核内存管理和虚拟内存管理。但和架构相关的内存管理代码则位于arch/*/mm/,例如arch/i386/mm/fault.c

     Page fault处理代码在mm/memory.c中,内存映射和页缓存代码在mm/filemap.c 中。

     Buffer cache mm/buffer.c中实现,

     交换缓存在mm/swap_state.cmm/swapfile.c中。

5.drivers 目录
    
系统所有的设备驱动程序都在这个目录中。它们又按设备驱动程序类被划分成多个子目录,例如blockpcinet等。你的嵌入板子上不可能用得上所有的内核驱动,所以要花些时间在这里研究一下需求。

6.ipc 目录

     这个目录拥有50%以上的内核源码,
    
这个目录包含内核的进程间通讯的代码,共享内存、信号灯、消息队列等。所有System V IPC对象都包括在ipc_perm数据结构中,并可以在include/linux/ipc.h中找到。System V的消息在ipc/msg.c中实现,共享内存在ipc/shm.c中,信号灯在ipc/sem.c,管道在ipc/pipe.c中实现。

7.modules 目录
    
这只是一个用来存放建立好的模块的目录。通常为空。内核模块代码部分在内核中,部分在modules包中。内核中的模块代码全部在kernel/modules.c中,数据结构和内核守护进程kerneld的定义则分别在include/linux/module.hinclude/linux/kerneld.h中。也可以在include/linux/elf.h中查看一个ELF目标文件的结构。

8.fs 目录
    
所有的文件系统的代码。它又被划分成子目录,每一个支持的文件系统对应其下层的一个目录,EXT2文件系统的源程序都在fs/ext2/子目录,数据结构的定义在include/linux/ext2_fs.hext2_fs_i.hext2_fs_sb.h。虚拟文件系统的数据结构在include/linux/fs.h中描述,代码在fs下的相应子目录中。Buffer cacheupdate 内核守护进程都是用fs/buffer.c实现的。

9.kernel 目录
    
主要的内核代码,如进程的创建、终止、调度,以及信号、时钟等。同样,和架构相关的内核代码放在arch/*/kernel中。

     调度程序在kernel/sched.cfork代码在kernel/fork.c

     bottom half 处理代码在include/linux/interrupt.htask_struct数据结构可以在include/linux/sched.h中找到。内核的中断处理代码几乎都是和微处理器(通常也和平台)相关的。

     Intel中断处理代码在arch/i386/kernel/irq.c它的定义在incude/asm-i386/irq.h

10.net 目录
    
内核的网络代码,包括TCP/IP协议、Socket以及相关的内容。大部分的include文件在include/net中。BSD socket代码在net/socket.cIpv4 INET socket 代码在net/ipv4/af_inet.c中。通用协议的支持代码(包括sk_buff处理例程)在net/core中,TCP/IP网络代码在net/ipv4

11.lib 目录
    
这个目录放置内核的库代码,如vsprintf、串处理函数、解压缩函数等。和体系结构相关的库代码在arch/*/lib/中。

12.scripts目录
    
这个目录包含脚本(例如awktk脚本),用于配置内核。
13.
Document目录

       该目录存放了大量的内核代码相关文档,以及用户开发和维护手册

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++     鉴于驱动程序在嵌入系统中的重要性,而且Linux内核源代码有很大一部分是设备驱动程序,这些设备驱动程序源代码都在drivers子目录中,所以进一步细分drivers子目录:
/block
    
块设备驱动程序,比如ideide.c)。如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看drivers/block/genhd.c中的device_setup()。它不仅初始化硬盘,也初始化网络,因为当安装nfs文件系统的时候需要网络。块设备包括基于IDESCSI的设备。
/char
    
这里可以查看基于字符的设备,比如tty、串行口、鼠标等。
/cdrom
     Linux
的所有CD ROM代码。在这里可以找到特殊的CD ROM设备(比如Soundblaster CD ROM)。而常用的ide CD驱动程序在drivers/blockide-cd.c中,SCSI CD驱动程序在drivers/scsi/scsi.c中。
/pci
     PCI
伪驱动程序。在此处分析PCI子系统如何被映射和初始化。PCI伪驱动程序在drivers/pci/pci.c,系统范围的定义在include/linux/pci.h。每一种体系结构都有一些特殊的PCI BIOS代码,Alpha AXP的位于arch/alpha/kernel/bios32.c
/scsi
    
在这里不但可以找到所有的Linux支持的scsi设备的驱动程序,也可以找到所有的SCSI代码。
/net
    
在这里可以找到网络设备驱动程序,比如DEC Chip 21040 PCI以太网驱动程序在tulip.c中。
/sound

     所有的声卡驱动程序都在此位置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值