《LINUX内核设计与实现》第1、二章学习总结

第一章 Linux内核简介html

(一)Unix是一个强大、健壮和稳定的操做系统,特色是:linux

  1. Unix很简洁,仅仅提供几个几百个系统调用而且有一个很是明确的设计目的
  2.  在Unix中,全部的东西都被看成文件对待,经过一套相同的系统调用接口来进行:open(),read(),write(),lseek(),close()
  3. Unix的内核和相关的系统工具软件是用C语言编写而成
  4.  Unix的进程建立很是迅速
  5. Unix系统具有清晰的层次化结构

(二)操做系统和内核简介:操做系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。git

  1.  内核是管理者或者是操做系统核心
  2.  在系统中运行的应用程序经过系统调用来与内核通讯
  3. 内核还要负责管理系统的硬件设备

(三)处理器在任何指定时间点上的活动范围能够归纳为下列三者之一:编程

 

  1. 运行于用户空间,执行用户进程
  2. 运行于内核空间,处于进程上下文,表明某个特定的进程执行
  3. 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断

(四)Linux内核和传统UNIX内核特色的比较(Linux是一个单内核)安全

  1.  Linux支持动态加载内核模块
  2. Linux支持对称多处理(SMP)机制
  3.   Linux内核能够抢占
  4.  Linux内核并不区分线程和其余的通常进程

(五)Linux内核版本ruby

版本号是偶数,稳定版;版本号是奇数,开发版
enter description here

网络

 

第二章 从内核出发并发

(一)获取内核源码异步

1. Git是一种开源的分布式版本控制工具。git能够下载和管理Linux的源代码
Linux获取最新提交到版本树的一个副本
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
下载代码后,更新到最新分支
$ git pull

2.安装内核源代码

若是压缩形式为bzip2:$ tar xvjf linux-x.y.z.tar.bz2分布式

若是压缩形式为zip:$ tar xvzf linux-x.y.z.tar.gz

3. 使用补丁:$ patch -p1 < ../patch-x,y,z

(二)内核源码结构的根目录及其子目录

目 录 描 述
arch 特定体系结构的代码
block 块设备I/O层
crypo 加密API
Documentation 内核源码文档
drivers 设备驱动程序
firmware 使用某些驱动程序而须要的设备固件
fs VFS和各类文件系统
include 内核头文件
init 内核引导和初始化
ipc 进程间通讯代码
kernel 像调度程序这样的核心子系统
lib 一样内核函数
mm 内存管理子系统和VM
net 网络子系统
samples 示例,示范代码
scripts 编译内核所用的脚本
security Linux 安全模块
sound 语音子系统
usr 早期用户空间代码(所谓的initramfs)
tools 在Linux开发中有用的工具
virt 虚拟化基础结构

 

 

(三)编译内核

1.配置内核
基于字符页面的命令行工具    make config
基于图形界面工具     make menuconfig
基于默认配置     make defconfig 
验证和更新配置    make oldconfig 
  • Makefile:根据配置的状况,构造出须要编译的源文件列表,而后分别编译,并把目标代码连接到一块儿,最终造成 Linux 内核二进制文件。
  • config.in:内核配置文件,给用户提供配置选择的功能。
  • .config:用户用来存放内核配置后结果的文件。
  • make:默认的Makefile自动化编译。
2. 减小垃圾信息
3.衍生多个编译做业
make程序能把编译过程拆分红多个并行的做业。其中每一个做业独立并发地运行,有助于加快多处理器系统上的编译过程,也有利于改善处理器的利用率。默认状况下,make只衍生一个做业。
$ make > ../detritus #将错误报告和警告信息重定向到文件中 $ make > /dev/null #将无用的输出信息重定向到/dev/null中 - /dev/null:空设备,输入的信息直接丢弃

$ make -jn #以多个做业编译内核,- j:指定同时执行多任务,- n:要衍生出的做业数
4. 安装新内核
make modules_install #把全部已编译的模块安装到正确的主目录/lib/modules下
System.map文件:编译时在内核代码树的根目录下建立的用来将内核符号与它们的起始地址对应起来。符号对照表,

(四)Linux内核开发的的特色

(1)       Linux内核编成时不能访问C库

(2)       Linux内核编程时必须使用GNU C

(3)       Linux内核编程时缺少像用户空间那样的内存保护机制

(4)       Linux内核编程时浮点数很难使用

(5)       内核只有一个很小的定长堆栈

(6)       因为内核支持异步中断、抢占式和SMP,所以必须时刻注意同步和并发

(7)       要考虑可移植性的重要性

 

 学习体会

       本次学习了LINUX内核的一些基本常识,从何处获取源码,如何编译,如何安装内核。。。。。。。。

 

 

参考资料:

(1)《Linux内核设计与实现》课本一二章

(2)http://www.cnblogs.com/hyq20135317/p/5277142.html  博客

相关文章
相关标签/搜索