Linux 内核设计与实现学习笔记之第一章Linux内核简介和第二张从内核出发

第1章 Linux内核简介
   内核被称为管理者或者操作系统的核心。
   通常一个内核由以下几个部分共同组成:
   1 中断服务程序:负责相应中断
   2 调度程序:负责管理多个进程共享处理器时间
   3 内存管理程序:负责管理进程地址空间
   4 系统服务程序:如网络,进程间通信
   
第2章 从内核出发
   源码树一般安装在/usr/src/linux目录下,但是不要把这个源码树用于开发啊,因为编译你的C库所用的内核版本就链接到这棵树。
   内核源码树目录:
   /arch   architecture的缩写。arch目录下是好多个不同架构的CPU的子目录,譬如X86的CPU的所有文件都在arch/x86目录下。
   /block  块设备,块设备是以数据块方式接收和发送的数据的设备。譬如说SD卡、iNand、Nand、硬盘等。几乎可以认为块设备就是存储设备。block目录下放的是一些linux存储体系中关于块设备管理的代码。
   /crypto 内核本身所用的加密API,实现了常用的加密和散列算法,还有一些压缩和CRC校验算法。
   /Documentation  帮助文档。
   /drivers  驱动目录,内核中最庞大的一个目录,里面分门别类的列出了linux内核支持的所有硬件设备的驱动源代码。
   /firmware 固件其实是软件,不过这个软件是固化到IC里面运行的,为了了让计算机读取和理解从设备发来的信号的代码,就像S5PV210里的iROM代码。
   /fs   文件系统,里面列出了linux支持的各种文件系统的实现。
   /include 头文件目录,公共的(各种CPU架构共用的)头文件都在这里。每种CPU架构特有的一些头文件在arch/***/include目录及其子目录下。
   /init  linux内核启动时初始化内核的代码。
   /ipc   进程间通信,里面都是linux支持的IPC的代码实现。
   /kernel kernel就是内核,内核中最核心的部分,包括进程的调度(sched.c),以及进程的创建和撤销(fork.c和exit.c)和平台相关的另外一部分核心代码在arch/***/kernel目录下。
   /lib   一些公用的库函数,注意这里的库函数和C语言的库函数不一样的。在内核编程中是不能用C语言标准库函数,这里的lib目录下的库函数就是用来替代那些标准库函数的。譬如要把字符串转成数字用atoi,内核编程中只能用lib目录下的atoi函数,不能用标准C语言库中的atoi。譬如在内核中要打印信息时不能用printf,而要用printk,这个printk就是我们这个lib目录下的。
   /mm    内存管理,此目录包含了与体系无关的部分内存管理代码。与体系结构相关的内存管理代码位于arch/***/mm下。
   /net   该目录下是网络相关的代码,譬如TCP/IP协议栈等都在这里。
   /scripts  脚本,这些脚本文件不是linux内核工作时使用的,而是用来辅助对linux内核进行配置编译生产的。当运行make menuconfig或者make xconfig之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。
   /security 安全相关的代码。对计算机免于受到病毒和黑客的侵害很重要.
   /sound    音频处理相关的。
   /tools    linux中用到的一些有用工具
   /usr      实现用于打包和压缩的cpio等。这个文件夹中的代码在内核编译完成后创建这些文件。
   /virt     此文件夹包含了虚拟化代码,它允许用户一次运行多个操作系统。通过虚拟化,客户机操作系统就像任何其他运行在Linux主机的应用程序一样运行。
   文件:
   COPYING:许可和授权信息
   CREDITS :贡献者列表
   Kbuild:内核编译,设置一些内核设定的脚本。打个比方,这个脚本设定一个ARCH变量,这是开发者想要生成的内核支持的处理器类型。
   Kconfig:这个脚本会在开发人员配置内核的时候用到。
   MAINTAINERS:这是一个目前维护者列表,他们的电子邮件地址,主页,和他们负责开发和维护的内核的特定部分或文件。当一个开发者在内核中发现一个问题,并希望能够报告给能够处理这个问题的维护者时,这是很有用的。
   Makefile:这个脚本是编译内核的主要文件。这个文件将编译参数和编译所需的文件和必要的信息传给编译器。
   README:这个文档提供给开发者想要知道的如何编译内核的信息。
   REPORTING-BUGS:这个文档提供如何报告问题的信息。
   总结:这么多目录跟我们关系很紧密的就是arch和drivers目录,然后其他有点相关的还有include、block、mm、net、lib等目录。根目录下的单文件比较重要的是Kbuild,Kconfig,Makefile。
   转载于:http://blog.csdn.net/ultraman_hs/article/details/52931121
   
   内核的配置:
   将所需的特定功能和驱动程序编译进内核前必须配置。配置选项决定哪些文件编译进内核
   这些配置项二选一或者三选一。二选一就是yes或no,即某功能开启或者不开启。三选一是yes,no和module。module表示选项被配置了,但是是以模块的形式生成,而yes表示把代码编译进主内核模块映像,而不是作为一个模块。
   $make config  会遍历所有的配置项,要求用户选择yes,no,module
   $make menuconfig/gconfig 图形工具配置
   
   内核开发的特点
   1 内核编程不能访问C库或者标准C头文件
   2 内核编程必须使用GUN C
   3 内核编程缺乏内存保护机制
   4 内核编程难以执行浮点运算
   5 内核给每个进程很小的定长堆栈
   6 内核支持异步中断,抢占和SMP(多处理器)。必须时刻注意同步和并发
   7 考虑可移植性的重要性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值