Linux内核学习1——Linux内核编译安装

一、使用VScode连接远程Linux服务器

首先介绍一下比较方便的编辑内核文件的方法

连接远程服务器的方法有很多,比如可以借助XShell、putty等软件使用ssh命令来登录远程服务器。但如果使用这种连接方法在远程服务器上进行开发工作,会来带诸多不便,比如:

  • 全程只能在终端使用指令操作,文件操作麻烦。
  • 写代码不方便,我们可能会先在本地写好代码再使用scp指令把源代码传送到服务器再运行,或直接在服务器上使用Vim或Vi进行编辑,这些操作起来我个人觉得都不顺手。
  • 服务器上的图片无法查看,比如有时候我们的程序最后输出一些图片,我们在终端上无法查看,还要传回本地才能看到。

使用VScode能够很好的解决以上问题,VScode连接服务器后的方便程度和本地开发几乎没有差别!在VScode中编辑代码直接同步更新到服务器上,可以用鼠标在文件目录对文件进行操作,可以查看图片。

可以查看这篇知乎

https://zhuanlan.zhihu.com/p/141205262

可能会遇见vscode连接服务器报错: could not establish connectionto Name_sever.Connecting was canceled

可以查看这两篇博客

参考1

参考2

打开以后可以看到服务器文件目录,直接在文件目录中选择文件进行编辑,实时同步到服务器上,这时候已经可以开始愉快的进行开发了,开发体验媲美本地开发!

二、ubuntu下载编译安装Linux内核

1.下载最新的Linux内核

小版本号为偶数是稳定版本,我们选择稳定版本下载。内核官方网站 https://www.kernel.org/,点击那个黄色的按钮就开始下载了,或者点击第二行stable 后面那个tarball也可以。具体更新内容可以在解压后得文档里看。
Linux内核学习1——Linux内核编译安装_第1张图片

2.环境配置

在正式编译前需要安装部分软件。

sudo apt update && sudo apt upgrade
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison

这里面可能会出现一些问题,按照提示做即可,涉及一些软件包版本相互依赖关系,每个机器可能问题不一样,可以百度。

3.解压缩

下载完成之后,解压缩刚刚下载好的内核压缩包。解压后大概1G,提前预留充足空间。解压之后进入目录。可以先提前看下新版内核有什么变化。

tar -xvf linux-5.14.17.tar.xz
cd linux-5.14.17

Linux内核学习1——Linux内核编译安装_第2张图片

可以先用uname -r自行查看下当前内核版本

在这里插入图片描述

4.配置内核

对内核进行配置是为了得到内核配置文件.config。通过对内核进行配置,可以使未来编译成功的内核增加或减少对一些内核特性的支持。对内核进行配置有多种方法,有基于文本的配置方式也有基于图形的用户界面。下面采用使用比较广泛的make menuconfig方式

在正式编译内核之前,我们首先必须配置需要包含哪些模块。实际上,有一些非常简单的方式来配置。使用一个命令,你能拷贝当前内核的配置文件,然后使用可靠的 menuconfig 命令来做任何必要的更改。

cp /boot/config-$(uname -r) .config

上述命令的意思就是拷贝对应当前内核配置到当前目录下并重命名为.config(文件名前加.意思为隐藏文件)。
之后在解压后得内核目录里执行命令

make menuconfig

在这里可以选择启用或者禁用一些模块。如果你不知道该如何选择的话,默认退出即可。

我们这里对内核按照默认的配置方式进行编译,因此当配置菜单启动后直接退出并保存即可。此时就在内核源码根目录下生成了.config文件。

5.编译

编译内核包含两部分的工作,其一是编译内核,即编译配置选项中标记为Y的那部分,这部分内核最终形成bzIamge镜像文件;其二是编译内核模块,即编译配置选项中标记为M的那部分内核,这部分形成以.ko结尾的内核模块目标文件。

上述两部分编译工作可以依次通过make bzImage和make modules完成,也可以通过一条make命令直接完成。编译内核的整个过程比较漫长,因此可以对make加-j参数来提高编译的效率。在make时使用该选项会为编译过程分配n个并发任务,这样可以缩短编译时间。

make -j5
6.安装

安装过程分为两部分,首先对内核模块进行安装,这个过程会将刚刚编译内核模块时生成的内核模块复制到/lib/modules/5.14.17/目录下,其中5.14.17为对应的内核版本。使用的命令如下:

sudo make modules_install

其次安装编译好的内核,命令为:

sudo make install

可能会遇见一些问题,可以参考这篇博客 参考3

安装内核的过程主要完成了以下的工作:

1.将编译内核时生成的内核镜像bzImage拷贝到/boot目录下,并将这个镜像命名为vmlinuz-5.14.17。如果使用x86的cpu,则该镜像位于arch/x86/boot/目录下(处于正在编译的内核源码下)。

2.将~/linux-5.14.17/目录下的System.map拷贝到/boot/目录下,重新命名为System.map-5.14.17。该文件中存放了内核的符号表。

3.将~/linux-5.14.17/目录下的.config拷贝到/boot/目录下,重新命名为config-5.14.17。

7.完成后启用内核作为引导

输入下列命令将内核作为引导,将数字更改为你自己编译的版本号:

sudo update-initramfs -c -k 5.14.17
8.更新grub

最后一步则是更新grub启动菜单,使用下面的命令则可以自动更新启动菜单:

sudo update-grub

这样会将刚才编译好的内核放在启动菜单的首位,如果需要修改启动菜单中默认系统的启动顺序,则修改/boot/grub/grub.cfg文件中的set default=的值即可。

OK,内核编译完毕。

使用reboot命令重启系统

如果重启系统后,出现了选择内核的界面,说明内核编译成功。

如果看不到启动选择界面,请执行以下操作:

输入命令:

sudo vi /etc/default/grub

将文件修改为以下模式:(注释掉hidden那一行,将timeout更改为较大值,这里改为了10)

Linux内核学习1——Linux内核编译安装_第3张图片

之后执行

sudo update-grub

重启即可见到下面菜单,选择advanced,进入后选择刚编译安装好的内核进入即可。

Linux内核学习1——Linux内核编译安装_第4张图片

Linux内核学习1——Linux内核编译安装_第5张图片

9.确认内核版本#

在这里插入图片描述

在这里插入图片描述

说明内核安装成功。

自定义grub启动项

  1. 修改启动项名称

在ubuntu下,可以直接修改/boot/grub/grub.cfg中有关启动项的名称。

  1. 增加自定义启动项

复制/boot/grub/grub.cfg有关启动项的内容到/etc/grub.d/40_custom进行自定义即可。

  1. 执行update

最后都要执行下述命令以生效。

sudo update-grub

参考资料

https://www.cnblogs.com/harrypotterjackson/p/11846222.html#_label9

你可能感兴趣的:(Linux内核,linux,vscode,运维)