教程

Linux内核(引导系统)- 系统管理 -Deepin深度系统用户手册

方砖大叔
08月20日 16:56
此文约为5219字,阅读需要12分钟
目录:

1 简介

2 源代码

3 内核程序

4 运行空间

5 子系统

6 安装

7 安装内核DEB包

8 编译安装

9 下载内核源代码

10 安装编译环境

11 解压源代码

12 打内核补丁

13 准备工作

14 配置内核

15 卸载内核

Linux内核(引导系统)- 系统管理 -Deepin深度系统用户手册

简介

Linux内核(英语:Linux kernel),是Linux操作系统的内核,以C语言写成,符合POSIX标准,以GNU通用公共许可证发布。Linux最早是由芬兰黑客林纳斯·托瓦兹为尝试在英特尔x86架构上提供自由免费的类Unix系统而开发的。该计划开始于1991年,林纳斯·托瓦兹当时在Usenet新闻组comp.os.minix登载帖子,这份著名的帖子标示着Linux计划的正式开始。

在计划的早期有一些Minix黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。

技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。

Linux内核是在GNU通用公共许可证第2版之下发布的(加上一些非自由固件、blob与各种非自由许可证)。

贡献者遍布世界各地,日常开发在Linux内核邮件列表。

源代码

Linux内核源代码位于/usr/src/linux目录下。

/include子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其他模块重建内核。 /init 子目录包含了内核的初始化代码,这是内核工作的开始的起点。 /arch子目录包含了所有硬件结构特定的内核代码。如:i386,alpha /drivers子目录包含了内核中所有的设备驱动程序,如块设备和SCSI设备。 /fs子目录包含了所有的文件系统的代码。如:ext2,vfat等。 /net子目录包含了内核的连网代码。 /mm子目录包含了所有内存管理代码。 /ipc子目录包含了进程间通信代码。 /kernel子目录包含了主内核代码。

内核程序

编译完成新内核后,会生成几个文件,这些文件是内核启动所需要的,这里简单介绍一下。

vmlinux,编译出来的最原始的内核文件,没有压缩,位于源码根目录下。该内核文件不能用来启动系统。

vmlinuz,这个就是我们要引导的内核,它一般是一个链接文件,位于根目录下。真正的文件位于/boot文件夹下。z表示压缩的内核,vm表示virtual memory的意思。linux支持虚拟内存,可利用硬盘空间作为虚拟内存使用。在编译内核时,通过make zImage或make bzImage生成zImage或bzImage原始压缩内核文件,这些内核文件位于/usr/src/linux-2.6.23.9/arch/i386/boot#目录下;接着我们会把它拷贝到/boot目录下并改名为vmlinuz;最后在根目录下创建一个到该文件的同名链接文件。bzImage表示big zImage的意思,zImage是老式的内核文件格式,在新的内核版本中已不使用了,现在生成的内核是bzImage格式的内核文件。这两种内核文件的区别是,zImage解压缩内核到低端内存中(第一个640K),bzImage解压缩内核到高端内存中(1M以上) 这两个内核文件都是使用gzip软件压缩的,但文件头部内嵌有gzip解压缩代码,能在启动时自动解压缩内核。使用gzip是不能正常解压内核的。

在源码根目录生成的vmlinux是一个没有压缩的内核文件。

如果在/boot目录下存在多个版本的内核文件,则可用vmlinuz-xxxx的方式命名。但根目录下的vmlinuz链接文件名一般不变。

initrd-x.x.x.img,initrd是"initial ramdisk"的简写。作用是在内核引导前加载相应的硬件模块,为内核引导做准备。比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题。initrd可使用mkinitrd工具创建。

System.map,内核符号映射文件,位于/boot目录下,与内核名要对应。内核编译完成后,在源码根目录下就会生成一个System.map文件。我们要把它拷贝到/boot目录下并改成相关的名称。如内核名为vmlinuz-2.6.23.9,则这个内核符号映射文件就应该命名为System.map-2.6.23.9。

运行空间

Linux系统由用户空间和内核空间两部分组成。

内核空间与用户空间是程序执行的两种不同状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移。 用户空间分为:

  • User Applications(用户应用程序)
  • GNU C Library (glibc即c运行库)

内核空间分为:

  • System Call Interface(系统调用接口)
  • Kernel(内核)
  • Architecture Dependent Kernel Code(架构体系内核代码)

子系统

Linux内核主要由五个子系统组成:

  • 进程调度,
  • 内存管理,
  • 虚拟文件系统,
  • 网络接口,
  • 进程间通信。

进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。

内存管理(MM):允许多个进程安全的共享主内存区域。Linux 的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。

虚拟文件系统(VFS):隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

网络接口(NET):提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。

进程间通讯(IPC):支持进程间各种通信机制。处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功成功地完成消息的发送,当消息被成功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调度。

安装

本页面主要介绍Linux内核的安装与配置.Linux内核的安装主要有以下两种方式:

  • -安装已经编译好的通用内核DEB包(包括内核核心文件-linux-image,内核头文件-linux-headers,内核通用头文件-linux-common三个文件)
  • -下载源代码,按照个人需求编译安装.

内核相关文件解释:

  • -linux-image-内核核心文件:Linux内核核心文件。
  • -linux-headers- 内核头文件: Linux 的内核开发头文件,包含内核函数和接口等的声明和定义。

Linux内核(引导系统)- 系统管理 -Deepin深度系统用户手册:升级内核,请务必卸载闭源显卡驱动后再操作,否则新内核将无法使用!!

安装与配置

安装内核DEB包

由于此方法是安装源内已经编译好的通用内核DEB包(内核核心文件和内核头文件),因此次安装方式不存在配置方法,以下以安装Linux内核4.4.0-1版本为例。

32位用户,终端执行:

sudo apt-get install linux-image-4.4.0-1-686 linux-headers-4.4.0-1-686
64位用户,终端执行:
sudo apt-get install linux-image-4.4.0-1-amd64 linux-headers-4.4.0-1-amd64
Linux内核(引导系统)- 系统管理 -Deepin深度系统用户手册:此方法能快速的安装自己需要版本的内核,而且内核较为稳定,缺点是内核不够精简,效率不够高,此方法适合Linux普通用户.如果你是Linux进阶用户,可以尝试下面的编译安装。

编译安装

针对本机器,配置编译的内核能不同程度的提高Linux系统的性能和稳定性,而且对学习Linux有一定的帮助,因此编译内核是Linux爱好者的基本技能~

下载内核源代码

自行下载Linux内核源代码。点此进入Linux内核官网

安装编译环境

编译前需要安装make ,gcc, make-kpkg,运行xconfig等和编译内核相关的工具。终端执行:

sudo apt-get install build-essential kernel-package libncurses5-dev fakeroot

解压源代码

Linux内核(引导系统)- 系统管理 -Deepin深度系统用户手册:很多教程上说应该解压到 /usr/src, 但是实际上解压到任何目录上都可以。/usr/src下面需要root权限反而容易出问题。

命令操作,终端执行:

tar jfx linuxxxx.tar.bz2 -C ~/linus ##自行替换linuxxxx.tar.bz2为你下载内核的文件名字.~/linus表示解压到家目录下的linus文件夹 cd ~/linus ##进入~/linus目录

图形操作,解压Linux内核源代码到/home下的任何一目录(为了方便操作),在解压Linux内核源代码后的路径右键打开终端,进入该目录

打内核补丁

下载好内核补丁(.patch文件),同样也可以放在自己的根目录下。然后终端执行:

patch -p1 < ~/src/xxx.patch (xxx.patch为内核补丁文件)

Linux内核(引导系统)- 系统管理 -Deepin深度系统用户手册:给内核打补丁不是必须的,一般选择跳过此步骤! 打补丁的作用是升级内核源代码.例如3.5版本的内核下一个版本是3.6.可通过适合3.5的内核补丁将代码更新成3.6

准备工作

首先,清理以前编译时留下的临时文件,如果需要终端执行:

make mrproper

Linux内核(引导系统)- 系统管理 -Deepin深度系统用户手册:如果是刚刚解压的内核压缩包,请忽略此步骤!

配置内核

配置内核一般分手工配置,载入当前内核配置(载入内核模块和载入当前内核配置)

新手推荐使用载入当前内核配置

载入内核模块(推荐)

从linux-2.6.32开始可以使用make localmodconfig自动精简内核, 菜鸟也能轻松精简内核到十几MB.

Linux内核(引导系统)- 系统管理 -Deepin深度系统用户手册: 该方法会自动去掉一些从开机到当前没用使用的模块(主要是驱动模块), 所以你可以使用一下你的摄像头, 挂载一下iso文件.....以保证需要的模块不会被精简掉, 否则使用新内核时会发现不能挂载iso文件, 不能使用某些外设等等. 终端执行:

make localmodconfig ##载入当前模块配置内核

然后出现简单的内核参数选择,.可以长按回车键选择默认选项节省时间。

终端执行:

make menuconfig ##检查一下是否有自己需要的模块没有选上,初学者可以忽略这个步骤

卸载内核

如果需要卸载指定的内核,请终端执行:

sudo apt-get --purge remove linux-image- 

 ##双击tab键补全,卸载有问题的内核文件 

sudo apt-get --purge remove linux-headers- 

 ##双击tab键补全,卸载有问题的内核头文件

Deepin深度系统用户手册
安装&卸载
如何在桌面新建文件夹/文档
原生安装教程
Deepin深度系统体验安装教程 - 安装&卸载 
Deepin深度系统系统卸载教程
Deepin深度系统安装器
基本操作 新建文件夹/文档、排列方式、设置显示器、热区、壁纸
任务栏图标、切换显示模式、设置任务栏位置、大小、显示隐藏、回收站 
账户管理(创建,更改账户头像,密码,删除账户)
显示设置(单屏设置,多屏设置,自定义设置)
默认程序设置(选中、添加、删除默认程序设置) 
个性化设置(主题、字体设置)
硬件资源设备管理 蓝牙设置(蓝牙开关、蓝牙名称、蓝牙设备)
网络设置(有线,无限,移动,宽带,vpn,代理网络设置)
声音设置(设置扬声器、耳机、音效、高级设置)
日期和时间(设置日期时间、时区、自动同步) 
电源管理(设置显示器休眠、设置锁屏时间)
设备管理(鼠标、键盘、触控板、语言)
系统管理(系统信息、协议、系统更新)
窗口管理器(打开,添加,切换,命名,桌面窗口等)
桌面操作 新手入门(概述、打开,关闭)文件
文件(夹)功能(新建,重命名,复制,压缩,删除等)
磁盘以及选项管理(显示、卸载、弹出磁盘)
常用操作(搜索文件、管理标签、书签、共享、网上邻居、创建链接等)
应用商店(运行,关闭,以及主界面)
应用管理(搜索,下载,安装,更新,升级,卸载)
看图管理(介绍,运行,关闭)
图片操作(复制,打印,删除,旋转,设置为壁纸)
图片管理(时间线、相册管理)
系统管理 启动管理(系统启动流程)
引导系统(系统引导器)
Linux内核(引导系统)
Linux内核错误(引导系统)
Linux初始化(初始化)
开机动画 (初始化)
电源管理(待机,休眠,关机,重启)
电源管理(能耗、节能、亮度,CPU频率,内核等)
用户管理 用户管理(用户类型,添加,修改,删除用户)
群组管理(分组,群组密码,身份切换,常见问题)
文件管理 文件与目录(命名,路径,目录,图形管理,命令管理)
文件与目录权限(文件、目录权限)
管理文件权限(图形、命令、改变文件权限、umask介绍等)
文件系统(本地,网络文件系统)
磁盘管理 挂载(挂载点,FHS,挂载文件系统(图形管理,命令管理))
挂载点管理 - 文件管理
磁盘管理(分区,格式化,维护,写入,配额)
软件管理 源代码与程序 、进程分类、属性、父进程和子进程
配置文件目录,备份、删除、清理残余等
开机启动配置文件管理
快捷方式原理 - Desktop Entry 文件
软件源(文件,修改,同步软件源)
源代码包(修改,获取,编译安装,删除)
包管理命令(dpkg,apt,apt-cache,apt-file,aptitude,dselcet)
系统服务
deepin深度系统常见服务
服务(分类,窗口类型,工作形态的类型,命名,启动方式)
服务管理(chkconfig,service) 
登录管理器(类型,设置,切换登录管理器,登录出错)桌面组件
Shell(命令Shell,图形Shell)桌面组件
常见问题
为什么要自定义多个分区?
为什么不默认开机挂载Win分区
不能挂载特定的win分区?
Linux系统盘分区太小,不够用,问是不是要重装系统?
为什么不把软件全部转换成deb包?
如何删除APT缓存?
如何删除软件配置?
添加PPA?
无法解析或打开软件包的列表或是状态文件
出现Unable to correct problems, you have held broken packages的解决办法
dpkg 被中断,您必须手工运行 sudo dpkg --configure -a解决此问题
下列签名无法进行验证: NO_PUBKEY 06EA41DE4F6C1E86
出现They have been ignored, or old ones used instead的解决办法
E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) 
如何删除卸载软件包?
为什么不能同时安装一个以上的软件
无法下载bzip2, Hash 校验和不符
在deepin系统中如何设置GTK主题和窗口主题?
在deepin系统中如何安装与设置图标主题? 
在deepin系统中如何安装与设置光标(鼠标)主题?
在deepin系统中如何设置开机音乐? 
在deepin系统中如何安装系统字体?
在deepin系统中如何设置系统语言? 
发表评论
评论列表
共0条
点击加载更多