《linux内核设计与实现》第二章
第二章 从内核出发
一、获取内核源码
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内核设计与实现》第二章的更多相关文章
- 02.第二章_C++ Primer学习笔记_变量和基本类型
2.1 基本内置类型 2.1.1 算术类型 算术类型包括两类:整型和浮点型 2.2 变量 2.3 复合类型 2.4 const限定符 2.5 处理类型 2.6 自定义数据结构
- C++ Primer 笔记 第二章
C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字 ...
- 《C++ Primer》读书笔记—第二章 变量和基本类型
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...
- C++primer拾遗(第二章:变量和基本类型)
这是我对c++primer第二章的一个整理总结,算是比较适用于我自己吧,一小部分感觉不用提及的就省略了,只提了一下平时不注意,或者不好记住的内容. 排版太费劲了,直接放了图片格式.从自己的oneNot ...
- 《C++Primer》第五版习题答案--第二章【学习笔记】
C++Primer第五版习题解答---第二章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/9 第二章:变量和基本类型 练习2.1: 类 ...
- 《C Primer Plus》- 第二章 C语言概述
本笔记写于2020年1月27日. 本系列文章参考的是<C Primer Plus>(第六版),其中里面会有笔者自己的相关补充. 以下示例均运行于macOS Catalina 10.15.2 ...
- 逆向基础 C++ Primer Plus 第二章 开始学习C++
C++ Primer Plus 第二章 开始学习C++ 知识点梳理 本章从一个简单的C++例子出发,主要介绍了创建C++程序的步骤,以及其所包含的预处理器编译指令.函数头.编译指令.函数体.注释等组成 ...
- C++PRIMER第二章前半部分答案
C++PRIMER第二章前半部分答案 哈哈哈,为什么是前半部分呢,后半部分还在学习中,重新系统性的学习c++,共同进步嘛,不多说,跟我一起来看看吧,第三章开始才是新手收割的时候,慢慢来~~ 2.1&a ...
- C++ Primer 笔记(2)第二章 变量与基本类型
第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常 ...
- C++ primer的第二章的主要内容
这第二章主要是介绍了C++中基本的内置数据类型:整型与浮点型.介绍了什么是变量的过程中了解到了左值与右值的概念.左值是可以出现在赋值语句的左边或者右边,也就是说可以放在等号的左右两边,而右值只能是出现 ...
随机推荐
- 四、 git关联远程仓库及推送
接之前笔记,在 github上建立与本地同名的仓库 demo 关联远程仓库 1. https 模式 远程库的名字就是origin,这是Git默认的叫法 git remote add origi ...
- pdf阅读器开发
文章基于sumatrapdf的实现(当中mupdf中的内容不会太多涉及).以及自己在此基础上做的 优化,扩展.详细效果能够參考百度阅读器精简版. 最NB的还是得属于foxit.渲染速度一流,展示大图片 ...
- SAP跟踪前台操作导致的后台查询语句
SAP跟踪前台操作导致的后台查询语句,通过这个可以查看前台对应了后台的数据库表,然后可以通过se11查看表内容,也可以删除表内容. 在sap升级的时候,首先需要拷贝正式的sap系统,然后将拷贝的系统中 ...
- loli的混合算法测试
最近刚讲了最短路,说要考试我以为是考最短路,然而只有一道是最短路... 数据似乎有一点问题,不管了,反正手工测评都是对的,那现在就来看看题吧. Balanced:(此处并没有网址) 题意概述:$n$ ...
- maven中distributionManagement
分发构件至远程仓库 mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库.本地Maven仓库的构件只能供当前用户使用, ...
- 对比flash与ajax哪个好?
Ajax的优势: (1)可搜索性 普通的文本网页会更有利于SEO.文本内容是搜索引擎容易检索的,而繁琐的swf字节码却是搜索引擎不愿触及的.虽然Google等一些大型的搜索引擎可以检索SWF内部的内容 ...
- bip39
BIP: 39 (助记词) Layer: Applications Title: Mnemonic code for generating deterministic keys Author: Mar ...
- 物理standby database的日常维护
1.停止Standby select process, status from v$managed_standby; --查看备库是否在应用日志进行恢复 alter database recover ...
- SpringMVC原理&MVC设计思想
什么是MVC? MVC是一种架构模式 --- 程序分层,分工合作,既相互独立,又协同工作 MVC是一种思考方式 --- 需要将什么信息展示给用户? 如何布局? 调用哪些业务逻辑? MVC流程图如下图所 ...
- 用cloudmonkey批量创建虚拟机
需求: 1.root磁盘120G(这个在做镜像的时候已经做好) 2.需要用到share网络 3.添加500G磁盘并且挂载早虚拟机上面 #!/bin/bashzone_id=d530fee4-413a- ...