《Linux内核设计与实现》Chapter 2 读书笔记

一、获取内核源码

1.使用Git

我们曾经在以前的学习中使用过Git方法

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git  
更新分支到Linux的最新分支
$ git pull 

可以获取并随时保持与内核官方的代码树一致

2.安装内核源代码

压缩形式为bzip2
$ tar xvjf linux-x.y.z.tar.bz2 

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

如果使用git获取和管理内核源代码,就不需要下载压缩文件,运行git clone命令,git就会下载解压最新的源代码。

内核源代码一般安装在/usr/src/linux目录下,不要将其用于开发。不要以root身份对内核进行修改。

使用补丁

$ patch -p1 < ../patch-x.y.z

二、内核源码树

三、编译内核

目的:把自己需要的特定功能和驱动程序编译进内核。

1.配置内核

①可以配置的各种变量都以CONFIG_前缀表示。
  • 二选一

    • yes
    • no
  • 三选一
    • yes
    • no
    • module
    • module指该配置项被选定了,但实现代码以模块的形式生成

      配置选项也可以是字符串或整数

②配置工具

  $ make config 最简单的一种字符界面下的命令行工具;
$ make menuconfig 基于ncurse库的图形界面工具;
$ make gconfig 基于gtk+的图形工具;
$ make defconfig 基于默认的配置为个人体系结构创建一个配置;
$ make oldconfig 验证和更新配置;

如果内核已经启用了CONFIG_IKCONFIG_PROC选项(把完整的压缩过的内核配置文件存放在/proc/config.gz下),可以从/proc下复制配置文件,并用它编译一个新内核。

    $ zcat /proc/config.gz > .config
$ make oldconfig
  内核配置好了,就可以编译它啦
$ make

2.减少编译的垃圾信息

  • 如果想少看垃圾信息,却又不错过错误报告和警告信息,对输出重定向
    $ make > ../detritus
  • 把无用的输出信息重定向到永无返回值的黑洞/dev/null中
    $ make > /dev/null

3.衍生多个编译作业

  • 以多个作业编译内核
    $ make -jn (n:要衍生出的作业数)
  • 16核处理器
    $ make -j32 > /dev/null

4.安装新内核

  以root身份运行

  • $ make modules_install

  所有已编译的模块都会安装到lib/modules下

四、内核开发的特点

1.内核编程时不能访问C库和标准C头文件


  • 基本头文件位于内核源代码顶级目录下的include/linux文件夹中
  • 体系结构相关头文件:内核源代码树的arch/<architecture>/include/asm目录下

2. 内核编程时必须使用GNU C

  • 内联函数:函数会在所调用的位置上展开,用static作关键字,用inline限定它。

    • 优点:消除函数调用和返回的开销
    • 缺点:代码会变长,占用更多的内存空间或指令缓存。
  • 内联汇编:通常使用asm()指令嵌入汇编代码
    • unsigned int low, high;
    • asm volatile("rdtsc" : "=a" (low), "=d" (high)); //low 和 high 分别包含64位时间戳的低32位和高32位 
  • 分支声明
    •  if (unlikely(error)) {
      /* ... */
      }
      • x很少出现,绝少发生,通常为假
    • if (likely(success)) {
      /* ... */
      }
      • y经常出现,通常为真

3.内核编程时缺乏像用户空间那样的内存保护机制

  • 在内核中,不该访问非法的内存地址,引用空指针,否则内核会over;
  • 内核中的内存不分页:每用掉一个字节,物理内存都减少一个;

4. 内核编程时难以执行浮点运算

  • 与用户空间进程不同,内核不完美支持浮点操作

5. 内核给每个进程只有一个很小的定长堆栈

  • 对于不用的体系结构,内核栈的大小不一样并都是固定的;

6. 内核支持异步中断、抢占和SMP,必须时刻注意同步和并发

7. 要考虑可移植的重要性

《Linux内核设计与实现》Chapter 2 读书笔记的更多相关文章

  1. 《Linux内核设计与实现》 Chapter4 读书笔记

    <Linux内核设计与实现> Chapter4 读书笔记 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子 ...

  2. Linux内核设计与实现第四周读书笔记

    第5章系统调用 5.1与内核通信 主要作用: 为用户控件提供了一种硬件的抽象接口. 保证了系统稳定性与安全性. 为用户空间&系统提供公共接口. 5.2API.POSIX和C库 一般情况,应用程 ...

  3. 《Linux内核分析》第六周 读书笔记

    <Linux内核设计与实现>CHAPTER3阅读梳理 [学习时间:3hours] [学习内容:进程的描述:进程的生命周期(包括创建.终结)] 一.进程(任务)描述 1.进程是处于执行期的程 ...

  4. linux内核分析 1、2章读书笔记

    一.linux历史 20世纪60年代,MIT开发分时操作系统(Compatible TIme-Sharing System),支持30台终端访问主机: 1965年,Bell实验室.MIT.GE(通用电 ...

  5. 《Linux内核分析》第七周 读书笔记

    <深入理解计算机系统>CHAPTER7阅读梳理 [学习时间:3hours] [学习内容:链接需要的代码&数据:链接机制:链接生成的目标文件] 一.链接概述 1.链接 定义:链接是将 ...

  6. 《Linux内核设计》第17章学习笔记

  7. 《linux内核》课本第五章读书笔记

  8. 《Linux内核设计与实现》课本第一章&第二章学习笔记

    <Linux内核设计与实现>课本学习笔记 By20135203齐岳 一.Linux内核简介 Unix内核的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆文件 ...

  9. 《Linux内核设计与实现》Chapter 3 读书笔记

    <Linux内核设计与实现>Chapter 3 读书笔记 进程管理是所有操作系统的心脏所在. 一.进程 1.进程就是处于执行期的程序以及它所包含的资源的总称. 2.线程是在进程中活动的对象 ...

  10. 《Linux内核设计与实现》Chapter 1 读书笔记

    <Linux内核设计与实现>Chapter 1 读书笔记 一.Unix的特点 Unix从Multics中产生,是一个强大.健壮和稳定的操作系统. 特点 1.很简洁 2.在Unix系统中,所 ...

随机推荐

  1. webstorm 搭建es6开发环境

    本文转自:http://www.jianshu.com/p/26601581e152 1:新建一个Empty Project项目es6 ,然后在src目录下新建了一个es.js: 2:打开设置pref ...

  2. BZOJ1922:[SDOI2010]大陆争霸(最短路)

    Description 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光 ...

  3. 重复子串(string)

    从\(ckw\)博客上看来的题目,可能是正睿oj上的,但我想我这样没有氪金的自然是写不了的,就口胡一波吧 题意:给定一个字符串,多组询问,每次询问一个子串的权值:一个字符串的权值定义为这个字符串里出现 ...

  4. ES6标准入门之变量的解构赋值简单解说

    首先我们来看一看解构的概念,在ES6标准下,允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称作解构,简而言之粗糙的理解就是变相赋值. 解构赋值的规则是,只要等号右边的值不是对象或者数组 ...

  5. centos7上svn安装

    svn安装  yum install subversion 查看svn安装的版本  svnserve --version新建svn目录  mkdir /opt/svn  建立版本库目录  mkdir ...

  6. java剪辑音频

    用来剪辑特定长度的音频,并将它们混剪在一起,大体思路是这样的: 1. 使用 FileInputStream 输入两个音频 2. 使用 FileInputStream的skip(long n) 方法跳过 ...

  7. Android解决Intent中的数据重复问题

    转载地址:http://www.cnblogs.com/anrainie/articles/2383941.html 最近在研究Android,遇到了一些Notification(通知)的问题: .N ...

  8. 6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)

    http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s/1jpHZjW_7 ...

  9. 电信3G上网卡自己主动重拨

    须要使用电信3G无线上网卡做一个測试,由于要长时间使用,在使用的过程中老掉线,所以做了一个自己主动重连的批处理,好了,闲话少叙,开工: 先建立一个拨号连接: 001.png watermark/2/t ...

  10. win7下mysql免安装版使用

    1.下载. 下载地址:http://downloads.mysql.com/archives/get/file/mysql-5.6.17-winx64.zip. 2.解压MySQL压缩包 解压到指定目 ...