第二章 从内核出发

一、获取内核源码

  1、使用Git(linux创造的系统)

    使用git来获取最新提交到linux版本树的一个副本:

    $ 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

    如果压缩形式是GUN的zip,则运行:

    $ tar xvzf linux-x.y.z.tar.gz

    何处安装并触及源码:内核源代码一般安装在/usr/src/linux目录下,Pero prester atencion不要把这个源码树用于开发。不要以boot身份对内核进行修改,而应建立自己的主目录。即使在安装新内核时,/usr/src/linux目录

    应当保证原封不动。

  3、使用补丁

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

二、内核源码树

三、编译内核

  1、配置内核

  在编译内核之前,必须配置它。

  配置项二选一:yes 或者 no

  配置项三选一:yes 或者 no 或者 module。module意味着该配置被选定了,以模块的形式生成。驱动程序一般都用三选一的配置项。

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

  字符界面的命令行工具:

    $ make config

  图形界面工具:

    $ make menuconfig

  基于默认配置为体系结构创建一个配置:

    $  make defconfig

  验证和更新配置:

    $ make oldconfig

  编译内核

        $ make

  2、减少编译的垃圾信息

    对输出进行重定向:

    $ make > .. /detritus

    把无用的输出信息重定向到永无返回值的黑洞中:

    $ make > /dev/null

  3、安装新内核

    内核编译好后需要安装。

    以root身份运行:

     $ make modules_install

    就可以把所有已编译的模块安装到正确的主目录/lib/modules下。

  4、内核开发的特点

  • 内核开发时既不能访问C库也不能访问标准的C头文件
  • 内核编程时必须使用GNU C
  • 内核编程时缺乏像用户空间那样的内存保护机制
  • 内核编程时难以执行浮点运算
  • 内核给每个进程只有一个很小的定长堆栈
  • 由于内核支持异步中断、抢占和SMP(对称多处理系统),必须时刻注意同步和并发。
  • 要考虑可移植性的重要性

   1)头文件

    是指组成内核源代码树的内核头文件。不能包含外部头文件。

    基本的头文件位于内核源代码树顶级目录下的include目录中。

   2)GNU C

    gcc是多种GNU编译器的集合。

    内联函数: 函数会在所调用的位置上展开。 定义一个内联函数时,需要使用static作为关键字,用inline限定它。 内联函数必须在使用之前就定义好,一般在头文件中定义。 内核中,为了类型安全和易读性优先使用内联函数

而不是宏。

    内联汇编: gcc编译器支持在c函数中嵌入汇编指令。通常使用asm()指令嵌入汇编代码。

    分支声明: 对于条件选择语句,gcc建立一条指令用于优化,在该条件出现频繁或很少出现,编译器可根据这条指令进行优化。内核把这条指令封装成了宏。例如likely() unlikely()

四、小结

  内核有着独一无二的特质。这一章学习了一些基础性的概念以及历史背景,要想更加深刻的了解内核,就需要后期的学习和实验。

《linux内核设计与实现》第二章的更多相关文章

  1. 02.第二章_C++ Primer学习笔记_变量和基本类型

    2.1  基本内置类型 2.1.1  算术类型 算术类型包括两类:整型和浮点型 2.2  变量 2.3  复合类型 2.4  const限定符 2.5  处理类型 2.6  自定义数据结构

  2. C++ Primer 笔记 第二章

    C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字 ...

  3. 《C++ Primer》读书笔记—第二章 变量和基本类型

    声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...

  4. C++primer拾遗(第二章:变量和基本类型)

    这是我对c++primer第二章的一个整理总结,算是比较适用于我自己吧,一小部分感觉不用提及的就省略了,只提了一下平时不注意,或者不好记住的内容. 排版太费劲了,直接放了图片格式.从自己的oneNot ...

  5. 《C++Primer》第五版习题答案--第二章【学习笔记】

    C++Primer第五版习题解答---第二章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/9 第二章:变量和基本类型 练习2.1: 类 ...

  6. 《C Primer Plus》- 第二章 C语言概述

    本笔记写于2020年1月27日. 本系列文章参考的是<C Primer Plus>(第六版),其中里面会有笔者自己的相关补充. 以下示例均运行于macOS Catalina 10.15.2 ...

  7. 逆向基础 C++ Primer Plus 第二章 开始学习C++

    C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...

  8. C++PRIMER第二章前半部分答案

    C++PRIMER第二章前半部分答案 哈哈哈,为什么是前半部分呢,后半部分还在学习中,重新系统性的学习c++,共同进步嘛,不多说,跟我一起来看看吧,第三章开始才是新手收割的时候,慢慢来~~ 2.1&a ...

  9. C++ Primer 笔记(2)第二章 变量与基本类型

    第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常 ...

  10. C++ primer的第二章的主要内容

    这第二章主要是介绍了C++中基本的内置数据类型:整型与浮点型.介绍了什么是变量的过程中了解到了左值与右值的概念.左值是可以出现在赋值语句的左边或者右边,也就是说可以放在等号的左右两边,而右值只能是出现 ...

随机推荐

  1. css清楚浮动

    在各种浏览器中显示效果也有可能不相同,这样让清除浮动更难了,下面总结8种清除浮动的方法,测试已通过 ie chrome firefox opera,需要的朋友可以参考下 浮动会使当前标签产生向上浮的效 ...

  2. Chrome 打印PDF技巧

    Chrome 打印PDF技巧 原文地址:https://github.com/zhongxia245/blog/issues/22 欢迎star 本教程,使用Mac电脑进行演示. 常规的Chrome打 ...

  3. [python]如何理解uiautomator里面的 right,left,up,down 及使用场景

    关于Android自动化uiautomator 框架,前面有讲在有些场景下,比如需要在设置界面中将某些选项开关打开或者关闭(前提是这些选项和开关的控件(resourceId,className,tex ...

  4. loli的搜索测试-5

    今天早上听说不放假感觉很sad,又听说要考试感觉更sad了,早读的时候Juan_feng表示即使考也不会考虫食算,结果上午并没有考试,就自己做了几道题.不得不说做题的决定实在是太明智了,做NOIP历年 ...

  5. HTML5调用百度地图API获取当前位置并直接导航目的地的方法

    <!DOCTYPE html> <html lang="zh-cmn-Hans">     <meta charset="UTF-8&quo ...

  6. vagrant特性——基于docker开发环境(docker和vagrant的结合)-3-boxes和配置

    Docker Boxes Docker provider不需要vagrant box.因此其config.vm.box设置是完全可选的.但是,仍然可以使用并指定一个box来提供默认值.由于一个带着bo ...

  7. Waymo在美国推出自动驾驶汽车共享服务

    导读 经过数月的测试和数百万英里的无人驾驶汽车技术开发,Waymo 正式在美国推出了具有商业性质的自动驾驶汽车的共享服务. 该公司的 Waymo One 项目将为客户提供 24 小时自动驾驶汽车服务. ...

  8. JS省市区联动效果

    省市区联动下拉效果在WEB中应用非常广泛,尤其在电商网站最为常见.一般使用Ajax实现无刷新下拉联动.利用jQuery,通过读取JSON数据,实现无刷新动态下拉省市二(三)级联动效果. 首先我们可以看 ...

  9. extern C的用法解析

    1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言,C++保留了一部分过程式语 ...

  10. abp 将abp项目发布之后挂在IIS上无法访问嵌入资源的问题

    在本地调试是能够正常访问到写在另一个程序集中的嵌入资源,但是发布之后 挂在IIS上却不能访问. 整了半天没找到原因.后来发现是发布时配置错误造成的:取消勾选precompile during publ ...