LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Ubuntu下换内核的过程及详细分析内核操作分析

2023年6月3日 207点热度

一、简要概述

仍然想将自己的linux内核更换一下,换一个低版本的便捷平常做实验课程的时侯使用,于是就开始了Ubuntu下换内核的过程.

原系统:Ubuntu10.10(Virtualbox)平台中的linux内核2.6.35-22

降级为:linux内核2.6.39

具体操作:

1.首先下载Linux2.6.39内核并解压到/usr/src下

2.安装必备软件编译工具

#apt-getinstalllibncurses5-devbuild-essentialkernel-package

3.做个链接文件#ln-s/usr/src/linux2.6.33/usr/src/linux

4.步入linux文件#cdlinux

5.#makemrproper(删掉曾经到.o文件,初次更换可不用)

6.#makemenuconfig(这儿可以设置一些参数,并生成.config文件)

7.#makedep(构建依赖关系)

8.#makeclean(删掉没有用的文件)

9.#makebzImage(编译linux内核)

10.#makemodules(编译linux模块)

11.#makemodules_install(安装linux模块)

12.#makeinstall(构建initrd文件,加载LKM用的程序)

13.生成initrd.img文件:

#cd/lib/modules/2.6.39

#update-initramfs-c-k2.6.39

14.手动查找新内核,并添加到grub引导#update-grub

15.#shutdown-rnow(立刻重启,重启后会发觉多了一个linux2.6.33到启动项)

linux编译内核 arm_linux 内核编译文件说明_linux 内核编译文件说明

以下过程全部在root权限下操作:

二、详细步骤剖析

(一)下载内核

内核下载官网:

下载内核:2.6.39该内核版本与自己当前系统内核版本2.6.35-22比较接近

概念:内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网路系统,决定着系统的性能和稳定性。在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并降低了许多新的特点。假如用户想要使用这种新特点,或想按照自己的系统度身定做一个更高效,更稳定的内核,就须要重新编译内核。

为何须要重新编译内核?

降低对某部份功能的支持,例如网路之类,可以把相应部份编译到内核中(build-in),在内核启动时就可以手动支持相应部份的功能,这样的优点是便捷、速度快,机器一启动,你就可以使用这部份功能了,我们可将常常使用的部份直接编译到内核中,例如网卡。静态调用的缺点是会使内核显得庞大上去,不管你是否须要这部份功能,它就会存在。也可以把该部份编译成模块(module),要使用的时侯再动态调用。假如编译成模块linux 内核编译文件说明,都会生成对应的.o文件,在使用的时侯可以动态加载,优点是不会使内核过于庞大,缺点是你得自己来调用这种模块。

安装必备软件编译工具:

#apt-getinstalllibncurses5-devbuild-essentialkernel-package

这几个文件介绍:

libncurses5-dev是为以后配置内核能运行makemenuconfig程序做打算

Build-essential为编译工具;

kernel-package是编译内核工具。

若果系统显示难以查找到这三个文件,输入#apt-getupdate更新数据源,更新完以后即可找到这三个文件了。

(二)编译替换内核

1.解压内核文件linux2.6.39到/usr/src下xx

首先先将下载的内核拷贝到/usr/src目录下;/usr/src/目录是linux内核源码储存的目录,上面的内核源码目录为:linux-2.XX.XX目录等。

这儿解压到任何目录都行,由于在这儿我们是要降低一个内核,而不是覆盖掉原有系统的内核,即便是覆盖掉原有系统内核,也可以在前面执行#makeinstall手动都会将对应文件拷贝到本机相应的目录下去了。

linux 内核编译文件说明_linux 内核编译文件说明_linux编译内核 arm

解压命令:#tar-jxvflinux-2.6.39.tar.bz2

注:较新的内核文件以tar.xz结尾的压缩文件时红帽linux系统下载,怎样解压

$xz-d***.tar.xz

$tar-xvf***.tar

linux编译内核 arm_linux 内核编译文件说明_linux 内核编译文件说明

可以看见这个压缩包也是打包后再压缩,外边是xz压缩方法如何安装LINUX,里层是tar打包形式。补充:目前可以直接使用tarxvJf***.tar.xz来解压

linux编译内核 arm_linux 内核编译文件说明_linux 内核编译文件说明

步入内核源码目录:#cd/usr/src/linux-2.6.39/可以查看相应内核文件

做个链接文件#ln-s/usr/src/linux2.6.39/usr/src/linux

步入linux文件#cd/usr/src/linux

/usr/src/linux这个目录是编译内核时储存源代码的目录,而/usr/src/linux2.6.33这个目录是实际储存代码的目录.即在/usr/src中构建一个软链接

2.订制内核

#makemrproper清除曾经加载的模块,第一次可省略

在每次配置并重新编译内核前须要先执行“makemrproper”命令清除源代码树,包括过去以前配置的内核配置文件“.config”都将被消除。实验完成以后,在测试了一下这个命令,如右图所示,即进行新的编译工作时将原先旧的配置文件给删掉到,以免影响新的内核编译。

linux 内核编译文件说明_linux编译内核 arm_linux 内核编译文件说明

即检测有无不正确的.o文件和依赖关系,假如使用刚下载的完整的源程序包即第一次进行编译,这么本步可以省略。而假如你多次使用了这种源程序编译内核,则最好要先运行一下这个命令。

#makemenuconfig(这儿可以设置一些参数,并生成.config文件)

使用makemenuconfig生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块,或则不编译。

在这儿就不介绍具体的内核配置操作,并且建议即使不准备配置哪些也执行一下makemenuconfig这个命令,并在退出的时侯进行保存,由于假如不执行此操作的话在前面make编译内核的时侯会提示你回答好多问题。

linux 内核编译文件说明_linux编译内核 arm_linux 内核编译文件说明

这一步可以#cp/boot/config-XX/usr/src/linux/.config,即使用当前系统配置文件,然后步入makemenuconfig选择load配置文件以后,再做细微改动,或则不改动也可。

linux 内核编译文件说明_linux编译内核 arm_linux 内核编译文件说明

执行#cp/boot/config-,之后按下Tab键,系统会手动填上该目录下符合条件的文件名,之后继续输入.config,目的是使用在boot目录下的原配置文件。

3.编译安装内核和模块

#makedep构建依赖关系

依据上一步中加载的配置内容(.config)构建文件的依赖关系。

#makeclean消除内核编译的目标文件

linux 内核编译文件说明_linux 内核编译文件说明_linux编译内核 arm

清除一些毋须要的文件,假如你在先前编译的基础上,删掉了一些选项,建议你执行这一步操作,否则,就没有必要了。

#makebzImage编译内核

内核编译成功后,会在源码树枝目录即/usr/src/linux-2.6.39/arch/x86/boot/目录中生成一个新内核的映像文件bzImage。

#makemodules编译模块

编译可加载模块(即内核选项中选择为M的选项),便于将来使用insmod命令进行加载。编译时间跟M选项的数目有关。

linux编译内核 arm_linux 内核编译文件说明_linux 内核编译文件说明

#makemodules_install安装模块

编译成功后,系统会在/lib/modules目录下生成一个2.6.39子目录,上面储存着新内核的所有可加载模块(正式编译好的modules拷贝到/lib/modules下)。

#makeinstall

安装内核,即复制.config,vmlinuz,initrd.img,System.map文件到/boot目录、更新grub。

linux编译内核 arm_linux 内核编译文件说明_linux 内核编译文件说明

其实,在这儿我们也可以分别拷贝到/boot目录:

(1)将生成的linux-2.6.39/.config拷贝到要替换内核系统的/boot下,并重命名为config-2.6.39

(2)将生成的linux-2.6.39/arch/x86-64/boot/bzImage拷贝到要替换内核系统的/boot下,并重命名为vmlinuz-2.6.39(注:这儿需非常注意拷贝后的文件名变为vmlinuz-x.x.x)。

(3)将生成的linux-2.6.39/System.map拷贝到要替换内核系统的/boot下,并重命名为System.map-2.6.39

(4)将makemodules_install生成的系统目录/lib/modules/linux-2.6.39拷贝到要替换内核系统的/lib/modules下。

#new-kernel-pkg--install--mkinitrd--depmod2.6.33(将启动信息写入grub.conf中,这儿也可以去/etc/编辑grub.conf文件,将启动信息模仿原先到写进去。注:有的linux版本是lilo.conf文件)(测试了一下网上留传的这条指令,在我的笔记本上这条命令没有反应)

#cd/lib/modules/2.6.39

#update-initramfs–c–k2.6.39生成/boot/initrd.img-2.6.39文件

#update-grub手动查找新内核,并添加到grup引导中

linux 内核编译文件说明_linux编译内核 arm_linux 内核编译文件说明

#shutdown-rnow

立刻重启,重启后按shift会发觉多了一个linux2.6.39启动项。

linux编译内核 arm_linux 内核编译文件说明_linux 内核编译文件说明

linux 内核编译文件说明_linux编译内核 arm_linux 内核编译文件说明

补充:怎么在启动界面中加入你想要的个人信息

方式有许多,在这儿介绍三个方式:

1.Ubuntu的登录和欢迎信息控制/etc/issue和/etc/motd

其中/etc/issue与/etc/motd区别在于:当一个网路用户或通过并口登陆系统上时,/etc/issue的文件内容显示在login提示符之前,而/etc/motd内容显示在用户成功登陆系统以后。更改这两个文件都可以达到加入个人信息的疗效。

2.更改/boot/grub/grub.cfg文件来改动我们的引导项的名子来完成显示个人信息。

3.在编译之前加入个人信息,将信息编译进内核:对/usr/src/linux-3.6/init.c文件进行更改,在最后一个函数中,加入printk("***")复印想要的信息linux 内核编译文件说明,在这儿要注意复印的优先级,必须设置超过一定的优先级方可在控制台复印出想要的信息(可参考相关printk函数的介绍)。

3.卸载内核

首先我们须要查看一下当前使用的是那个内核:

uname-r

该命令会告诉你当前使用的内核版本,在登陆时侯,不能卸载当前的内核,以免引起难以启动的惨剧~~

接出来,假如你是自己动手编译的内核的话,请删掉以下文件和文件夹

1.删掉掉/lib/modules/目录下过时的内核库文件

2.删掉掉/usr/src/kernels/目录下过时的内核源代码

3.删掉掉/boot目录下启动的核心档案以及内核映像

4.修改/boot/grub/menu.lst,删掉掉不用的启动列表

在这儿就只接受自己动手编译的内核怎么卸载了,若果是安装包安装的内核,百度查询相关指令即可卸载,其实,自己自动卸载也是可以的。

三、重要Linux内核文件剖析

(一).config

使用makemenuconfig生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。

(二)vmlinuz和vmlinux

vmlinuz是可引导的、压缩的内核,“vm”代表“VirtualMemory”。Linux支持虚拟显存,不像老的操作系统例如DOS有640KB显存的限制,Linux才能使用硬碟空间作为虚拟显存,因而得名“vm”。vmlinuz是可执行的Linux内核,坐落/boot/vmlinuz

linux编译内核 arm_linux 内核编译文件说明_linux 内核编译文件说明

vmlinuz的构建有两种形式:

linux 内核编译文件说明_linux编译内核 arm_linux 内核编译文件说明

一是编译内核时通过“makezImage”创建,之后通过:“cp/usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz”产生zImage适用于小内核的情况,它的存在是为了向后的兼容性;

二是内核编译时通过命令makebzImage创建,bzImage是压缩的内核映像,须要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易造成误会,bz表示“bigzImage”,bzImage中的b是“big”意思。zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们除了是一个压缩文件,并且在这两个文件的开头部份内嵌有gzip解压缩代码,所以你不能用gunzip或gzip–dc解包vmlinuz。内核文件中包含一个微型的gzip用于解压缩内核并引导它。三者的不同之处在于,老的zImage解压缩内核到高端显存(第一个640K),bzImage解压缩内核到高档显存(1M以上)。假如内核比较小,这么可以采用zImage或bzImage之一,两种方法引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。

vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。

(三)initrd.img

initrd是“initialramdisk”的缩写。initrd通常被拿来临时的引导硬件到实际内核vmlinuz才能接管并继续引导的状态。例如initrd-2.4.7-10.img主要是用于加载ext3等文件系统及scsi设备的驱动。假如你使用的是scsi硬碟,而内核vmlinuz中并没有这个scsi硬件的驱动,这么在放入scsi模块之前,内核不能加载根文件系统,但scsi模块储存在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个才能读实际内核的initrd内核并用initrd修正scsi引导问题,initrd-2.2.39.img是用gzip压缩的文件。initrd映象文件是使用mkinitrd创建的,mkinitrd实用程序才能创建initrd映象文件,这个命令是RedHat专有的,其它Linux发行版其实有相应的命令。这是个很便捷的实用程序。具体情况请看帮助:manmkinitrd

(四)System.map

System.map是一个特定内核的内核符号表,由“nmvmlinux”产生而且不相关的符号被滤出。

(五)几个重要的内核文件剖析

linux 内核编译文件说明_linux编译内核 arm_linux 内核编译文件说明

arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种支持的体系结构,比如i386就是关于intelcpu及与之相兼容体系结构的子目录。PC机通常都基于此目录;

include子目录包括编译核心所须要的大部份头文件。与平台无关的头文件在include/linux子目录下,与intelcpu相关的头文件在include/asm-i386子目录下,而include/scsi目录则是有关scsi设备的头文件目录;

init子目录包含核心的初始化代码(注:不是系统的引导代码),包含的两个文件main.c和Version.c,这是研究核心怎样工作的一个特别好的起点。

Mm子目录包括所有独立于cpu体系结构的显存管理代码,如页式储存管理显存的分配和释放等;而和体系结构相关的显存管理代码则坐落arch/*/mm/,比如arch/i386/mm/Fault.c

Kernel子目录包括主要的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c;同样,和体系结构相关的代码在arch/*/kernel中;

Drivers子目录放置系统所有的设备驱动程序;每种驱动程序又各占用一个子目录:如,/block下为块设备驱动程序,例如ide(ide.c)。假如你希望查看所有可能包含文件系统的设备是怎样初始化的,你可以看drivers/block/genhd.c中的device_setup()。它除了初始化硬碟,也初始化网路,由于安装nfs文件系统的时侯须要网路;

其他子目录:

Lib放置核心的库代码;Net,核心与网路相关的代码;Ipc,这个目录包含核心的进程间通信的代码;

Fs,所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,比如fat和ext2;Scripts,此目录包含用于配置核心的脚本文件等。通常,在每位目录下,都有一个.depend文件和一个Makefile文件,这两个文件都是编译时使用的辅助文件,仔细阅读这两个文件对弄清各个文件这间的联系和依托关系很有帮助;并且,在有的目录下还有Readme文件,它是对该目录下的文件的一些说明,同样有利于我们对内核源码的理解。

四、遇到的问题

1.源的问题

安装必备软件编译工具:#apt-getinstalllibncurses5-devbuild-essentialkernel-package的时侯,难以更新,输入#sudoapt-getupdate也难以更新数据。

在这儿是因为ubuntu10.10的源出现问题,致使未能更新、下载软件,这儿须要重新更改源文件。处理如下:

参考该网站内容后,将源换为地址,即可更新、下载软件(其实,其他可用的源地址也是可以的)。

2.权限问题

在这个内核的编译、安装过程中,涉及到的操作都是须要root权限能够进行操作的,假如权限不够,则形成错误。处理方式:使用sudo(必须给了给用户申请root的权限)或则直接suroot切换到root用户下进行整个过程操作。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 内核 压缩 操作 目录 解压
最后更新:2023年6月3日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
如何在Linux系统中查看CPU信息使用lscpu命令行 linux服务器搭建ftp的6下安装vsftpd步骤及步骤 贵州工业职业技术学院求职意向期望工作地--诚聘英才 实验1Linux安装实验掌握虚拟机的使用 Linux系统tar命令的使用方法及使用命令教程 linux 开源nas系统 杰和科技NAS服务器媒体见面会在京召开 Android与Linux开发大不同 Linux系统软件安装包:自己动手,安装不用愁 车市新战局:汽车操作系统会复制智能手机的历史吗? Linux文件系统种类 如何卸载用源码包安装的软件?在线视频教程推荐 「职位」ASP.、PHP、Linux服务器集群开发 Torvalds:Linux内核开发的创新前景充满了热情 Linux文件系统的结构从终端窗口探索Linux目录树结构 卸载软件命令Linux.You linux软件开发如何入门?学习Linux步骤及学习方法介绍 14年Linux发行版的有趣历史观点 Linux中不像Windows可以直接在控制面板中卸载? 2018年波及众多Linux发行版的性能对比会更加深入 如何用源码包安装的软件?name的方法总结
嵌入式Linux操作系统学习规划+LINUX路线,主攻江苏电信天翼校园客户端故障指引及解决办法(101)英特尔GMAGMA950显卡驱动程序/WIN8/8.1电信校园网宽带用USB数据线共享给电脑无线上网国防科大开源操作系统:它只是一个吉祥的象征10个常用Linux文本查看命令及其详细说明和使用示例Linux嵌入式系统内核裁剪与定制方法的介绍情况淘宝教育热卖C语言编程开发C++程序设计零基础入门课程从CPU、内存、硬盘、显卡等这些方面安装Linux系统的最低配置Linux通过chkconfig设置开机启动服务创建的几种常见方式(技术分析)Linux多线程的使用与操作系统的区别通常rar命令由一个主命令加若干选项(可选)构成RedHatLinux中自动运行程序中的应用linux 读写文件 关于Linux内核的神秘面纱,你知道几个?使用wget实用程序的有用命令行工具的使用怎么设置linux开机项自启动?方式是怎样的?嵌入式Linux应用层与驱动层要想学习关于Linux内核的交叉编译步骤和方法:步骤、方法STM32嵌入式linux开发流程及应用程序分析-STMlinux下有哪些文件在介绍lsof命令实用用法介绍?
CentOS6.5中安装和配置IP地址的步骤和基本步骤 你期待什么专业软件推出Web网页版本呢? 在Linux中轻松删除单个文件、文件组或整个文件夹 Linux视频教程以上就是usb的目录及操作环境.3 linux软件开发如何入门?学习Linux步骤及学习方法介绍 Linux用户来说意味着什么?简单来说,实际上意味着即白 MySQL安装完成后不象SQLServer默认安装在一个目录 如何在Linux上创建可执行文件? 如何在Linux中找到软件包版本的版本? 系统消耗掉了29M的内存是被谁消耗掉的? 如何在Ubuntu22.04上安装VSFTPD以设置服务服务器? Linux游戏起源于最受欢迎的游戏平台:SteamOS介绍 Linux内核启动有次引导程序Grub Android插件化框架DL代理Activity的原理和三个关键问题 Linux里如何退出Nano编辑器退出Vim编辑 ARM嵌入式Linux系统开发详解.rar 9个最佳的Linux终端模拟器的通用列表 服务器上安装linux系统的具体操作过程-如何选择系统? TeXLive和MiKTeX两大主要发行版的镜像配置方法 (Linux命令大全)之Linux语法参数说明与使用方法
标签聚合
软件 linux系统 linux服务器 文件目录 内核 文件 命令 操作 应用 虚拟机
书籍
课程
技术群
技术干货大合集↓
  • 2023年9月 / 78篇
  • 2023年8月 / 93篇
  • 2023年7月 / 94篇
  • 2023年6月 / 90篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.