第一章 Linux内核简介

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

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

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

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

(三)处理器在任何指定时间点上的活动范围可以概括为下列三者之一:

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

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

  1. Linux支持动态加载内核模块
  2. Linux支持对称多处理(SMP)机制
  3. Linux内核可以抢占
  4. Linux内核并不区分线程和其他的一般进程

(五)Linux内核版本

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

第二章 从内核出发

(一)获取内核源码

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. 减少垃圾信息
$ make > ../detritus     #将错误报告和警告信息重定向到文件中
$ make > /dev/null #将无用的输出信息重定向到/dev/null中
-
/dev/null:空设备,输入的信息直接丢弃 3.衍生多个编译作业
make程序能把编译过程拆分成多个并行的作业。其中每个作业独立并发地运行,有助于加快多处理器系统上的编译过程,也有利于改善处理器的利用率。默认情况下,make只衍生一个作业。
$ 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  博客

《LINUX内核设计与实现》第一、二章学习总结的更多相关文章

  1. 《Linux内核设计与实现》 第一二章学习笔记

    <Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...

  2. Linux内核设计与实现 第一章 第二章

    第一章 Linux内核简介 Unix特点: (1)     Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的 (2)     在Unix中,所有的东西都被当作文件对待,通过一套相 ...

  3. 《linux内核设计与实现》第二章

    第二章 从内核出发 一.获取内核源码 1.使用Git(linux创造的系统) 使用git来获取最新提交到linux版本树的一个副本: $ git clone git://git.kernel.org/ ...

  4. linux及安全《Linux内核设计与实现》第二章——20135227黄晓妍

    第二章:从内核出发 2.1获取源代码 2.1.1使用git Git:内核开发者们用来管理Linux内核源代码的控制系统. 我们使用git来下载和管理Linux源代码. 2.1.2安装内核源代码(如果使 ...

  5. Linux内核设计与实现 第十七章

    1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 ...

  6. Linux内核设计与实现 第三章

    1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作都是由内核来实现的. Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的 ...

  7. Linux内核设计与实现 第五章

    1. 什么是系统调用 系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使用硬件设备. 系统调用的存在意义: 1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备 ...

  8. linux内核设计与实现第一章

    1.1 unix的历史 Thompson实现unix 伯克利大学对其进一步开发推出了著名的BSD 其他各大厂商相继推出自己的unix 1.1.2 unix的特性 unix系统是一个强大,健壮,稳定的操 ...

  9. Linux内核设计与实现 第四章

    1. 什么是调度 现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程). 这个管理程序就是调度程序,功能: 决定哪些进 ...

  10. 把握linux内核设计思想(十二):内存管理之slab分配器

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流.请勿用于商业用途] 上一节最后说到对于小内存区的请求,假设採用伙伴系统来进行分配,则会在页内产生非 ...

随机推荐

  1. SDN2017 期末作业验收

    GIT仓库:GITHUB 负载均衡程序 拓扑如图 目的 实现一个负载均衡的北向程序: 服务器host 2 ,host 3,host 4上各自有不同的服务,host 1是客户端 当host 2,host ...

  2. Markdown基本语法规范

    1. 标题 #的个数即表示Hn, 一下依次从h1~h6.  也可在句尾添加同样个数的#(也可忽略) # This is H1 ## This is H2 ### This is H3 #### Thi ...

  3. 矩阵dp

    矩阵dp 这里是矩阵dp,不是矩阵乘法优化dp. 矩阵上的dp好像也没什么特殊的?大概有一个套路就是从上向下,从左向右进行dp吧. 首先第一道题好像不是矩阵dp... 1005 矩阵取数游戏:http ...

  4. 异常处理(try...catch...final 和 throw , throws)

    1.传统(弱语言)处理异常方式 原理:利用判断来控制异常出现 publicclass Test01 { publicstaticvoid main(String[] args) { Scanner s ...

  5. 数据同步canal服务端介绍

    1.下载安装包 canal&github的地址,最权威的学习canal相关知识的地方 https://github.com/alibaba/canal 在下面的wiki列表中找到AdminGu ...

  6. Arduino入门笔记(1):认识Arduino

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 各种网站论坛里经常看到网友DIY各种遥控小车.机器人什么的,一直很好奇,很想学习一 ...

  7. 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结

    1. 前言 bxCAN是STM32系列最稳定的IP核之一,无论有哪个新型号出来,这个IP核基本未变,可见这个IP核的设计是相当成熟的.本文所讲述的内容属于这个IP核的一部分,掌握了本文所讲内容,就可以 ...

  8. 手机视频编辑软件APP

    1. VUE    iOS/Android 2.Alive    iOS/Android 3.Splice  iOS 4. Plotagragh+   能让照片动起来的app 5.Cinepic  能 ...

  9. 解决Ubuntu14.04安装Chrome浏览器打不开的问题

    1.安装Chrome浏览器 wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/ ...

  10. laravel 5.5 《电商实战 》辅助函数

    Laravel 提供了很多 辅助函数,有时候我们也需要创建自己的辅助函数. 这里介绍了 tinker,一个laravel内置的php交互式控制台,方便调试php代码 php artisan tinke ...