| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> linux内核设计与实现---从内核出发 -> 正文阅读 |
|
[系统运维]linux内核设计与实现---从内核出发 |
获取、编译、安装内核1 获取内核源码在linux内核官方网站http://www.kernel.org,可以获得当前最新版本Linux源码码。如果想找一些老版本的源代码,可以:https://mirrors.edge.kernel.org/pub/linux/kernel/下载。 安装内核源代码内核压缩以GNU zip(gzip)和bzip2两种形式发布。以bzip2形式发布的Linux内核叫做linux-x.y.z.tar.bz2,这里x.y.z是内核源码的具体版本。如果压缩形式是bzip2,则运行:
如果压缩形式是GNU的zip,则运行:
何处安装源码内核源码一般安装在/usr/src/具体linux版本 目录下。不要以root身份对内核进行修改,而应当是,建立自己的主目录。仅以root身份安装新内核,即使在安装新内核时,/usr/src/linux目录都应当原封不动。 使用补丁在linu内核社区中,补丁是通用语。你可以以补丁的形式发布对代码的修改,也可以以补丁的形式接收其他人所做的修改。内核版本不断更新,增量补丁可以作为版本转移的桥梁。你不在需要下载内核源码的全部压缩,而只需给旧版本打上一个增量补丁,让其旧貌换新颜,更新内核版本。只需运行:
一般来说,一个给定版本的内核补丁总是打在前一个版本上。 2 内核源码树内核源码树由很多目录组成,而大多数目录又包含更多子目录。源码树的根目录及其子目录如下表:
在源码树根目录中,COPYING是内核许可证,CREDITS是开发者列表。MAINTAINERS是维护者列表,维护内核子系统和驱动程序。最后,Makefile是Makefile内核的基础 3 编译内核在编译内核之前,首先你必须配置它。可以配置的各种选项,以CONFIG_FEATURE形式表示,其前缀为CONFIG。例如,对称处理器(SMP)的配置选项为CONFIG_SMP。如果设置了该选项,则SMP启用,否则,SMP不起作用。 内核提供了各种不同的工具来简化内核配置。最简单的一种是基于文本的命令行工具:
该工具会挨个遍历所有配置项,要求用户选择yes、no或module。
这个过程很耗费时间,所以,除非你的工作是按小时计费的,否则你应该多利用基于ncuse编译的图形界面工具。
或者基于X11的图形工具
或用基于gtk+图形工具
这三种工具将所有配置项分门别类放置,比如按处理器类别和特点,你可以按类移动、浏览内核选项,当然也可以修改其值。
通过这条命令为你的体系结构创建一个默认的配置。尽管这些默认值有点随意性,但是,如果你从未配置过内核,那就会提供一个良好的开端。
一旦内核配置好了,就可以编译它了,执行命令:
减少编译的垃圾信息我们希望在编译时看到错误和警告消息,但对匆匆掠过屏幕的垃圾信息不感兴趣,可以使用如下命令
就可以把无用的输出信息重定向到永无返回值的黑洞/dev/null 衍生多个编译作业多个作业独立并发运行,可以提高处理器系统上的编译过程。默认情况下,make只衍生一个作业。为了可以以多个作业编译内核,使用一下命令:
n是要衍生的作业数,在实际中,每个处理器一般衍生一个或者两个作业。例如,在一个双处理器上,可以输入如下命令:
安装内核在内核编译好了之后,还需要安装它。怎么安装就和体系架构以及启动引导工具(boot loader)息息相关了—查阅启动引导工具的说明,按照它的指导将内核映像拷贝到合适的位置,并且按照启动要求安装它。一定要保证随时有一个或两个可以启动的内核,以放新编译的内核出现问题。
模块的安装是自动的,也是独立于体系结构的。以root身份,只要运行:
就可以把所有编译号的模块安装到正确的主目录/lib下 启用指定内核作为引导输入下列命令将内核作为引导,将数字更改为你自己编译的版本号:
注释掉hidden那一行,将timeout更改为较大值,这里改为了10
重启即可看到下面此单,选择高级选项,进入后选择编译安装好的内核进入即可, 4 内核开发的特点没有libc库与用户空间的应用程序不同,内核不能链接使用标准C函数库。最主要的原因是对于内核来说,完整的C库太大了,影响速度和大小。 头文件内核源代码文件不能包含外部头文件,所说的头文件是指组成内核源代码树的内核头文件。 没有内存保护机制如果一个用户程序试图进行一次非法的内存访问,内核会出现这个错误,发送SIGSEGV,并结束整个进程。然而,如果是内核自己非法访问了内存,那后果就很难控制了。内核中发生的内存错误会导致oops,这是内核中常见的一类错误。 容积小而固定的栈内核栈的准确大小随体系结构而变,但都是两页,这就意味着,32位机的内核栈是8kb,而64位机是16kb。每个处理器都有自己的栈 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 1:40:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |