在Ubuntu18.04和Ubuntu20.04编译Multi-clock步骤(从安装系统开始)

本文详细介绍了在Ubuntu20.04系统上进行多时钟内核的编译过程,包括系统安装、BIOS设置、分区管理、依赖安装和内核配置等步骤。文章还提及了可能遇到的问题及解决方案,如SecureBoot的禁用和内核配置文件的修改。此外,提到了QQ的Linux版本安装和GRUB配置以选择不同内核版本。
摘要由CSDN通过智能技术生成

背景

该内核来自于这篇论文
为什么不用最新的Ubuntu22.04?
因为在Ubuntu22.04上编译该内核出现的报错笔者没有解决。当时解决方案是需要在.config文件添加CONFIG_PREEMPT=y,和CPU抢占有关,导致这个报错解决后又出现下一个报错,并且指向某个内核的文件需要修改,就没有继续了。
也很不建议用Ubuntu18.04,因为如果用傲腾AD模式这个版本对应的ndctl和daxctl的版本默认是达不到66及以上的。

不过注意,论文里用的是CentOS7,如果用deb系列,那就Ubuntu20.04最方便。

系统安装

下载镜像

直接去官网下载速度很慢,下载过阿里云的镜像但是也遇到问题了,最保险且快速的镜像下载是清华大学开源软件镜像站页面下滑找到u开头的发布版本。
在这里插入图片描述
点进去后选择桌面版镜像
在这里插入图片描述

制作启动盘

使用rufus制作启动盘,下载地址,下载第一个即可。
在这里插入图片描述
下载后打开,其他选项都默认就好了。
在这里插入图片描述

BIOS设置

一般开机在显示电脑品牌时按住F12或者F2,还有少数是Del键可以进入BIOS设置,变成U盘启动。而对于Windows10和11,还可以从系统进入,这样更加方便,图文教程具体步骤如下:搜索框搜索BIOS,点击更改高级启动选项——>点击高级启动下面的立即重新启动——>等待几秒黑屏进入蓝色界面,点击疑难解答——>选择点击高级选项——>选择点击UEFI固件设置——>最后一步点击重启,等待电脑直接进入BIOS界面。

如果看不见启动盘,可能是Secure Boot处于Enable的状态,改为Disable看看。

如果上面两种方式都没有成功,那么可以电话咨询该品牌的售后,他们会热心且顺畅的教你。

系统分区

安装建议选择中文,之后不用配置键盘啥的。建议选择最小安装就够了。记得安装时不要联网,会很慢很慢。磁盘至少需要50G容量!

到了分区选择的时候,如果是整个系统重置直接选第一个,最简单了:
在这里插入图片描述
如果是双系统或者虚拟机以及其他,一个用户自己用,建议分区尽量少,如果有多余的50G容量,请留出空白磁盘不急着分区。目的是遇见提示文件系统空间不足而编译失败, 则会有一行的"已用%"为100%(或者百分比最大且容量最大的那一行, 应该是/dev/sda编号的某一个)。记住这一行的名字,之后去磁盘扩容。

当要是出现Out of memory的黑屏或者屏幕卡住没办法操作的情况:
在这里插入图片描述

不用强制重启!这里给出安全重启的方法:同时按住Ctrl+Alt不要放,再依次按下:SysRq(有的是PrtSc)、R、E、I、S、U、B键,之后系统会安全重启。

安装QQ(方便传文件,需要的话)

  1. 在Firefox内搜索QQ,在QQ安装的网页滑到最底端,就会有Linux版本安装入口。
  2. 选择X64、deb格式,下载。
  3. 下载完成后进入文件所在位置输入命令sudo dpkg -i linuxqq_2.0.0-b2-1089_amd64.deb 注意大家版本不同,可以输入linuxqq后按Tab键补全。

ARM64是ARM中64位体系结构,ARM属于精简指令集体系,汇编指令比较简单。x64是x86系列中的64位体系,是x86_64(Intel设计)和AMD64(AMD设计)的简称。x86属于复杂指令集体系,汇编指令较多。属于两种不同的体系。

rpm包主要用于redhat及分支如redhat,centos,Fedora等;而deb包主要用于debian及分支如debian,ubuntu等。

换源

依然是使用清华源选择对应版本就行,网页上有教学怎么换。
在这里插入图片描述
换完后使用sudo apt-get update更新

安装分区管理工具gparted

sudo apt-get install gparted
sudo gparted //启动工具

可以拖动上边的的条形框或者输入新大小来扩展磁盘大小
在这里插入图片描述

内核编译相关依赖下载

这是内核编译通用依赖

sudo apt-get install make gcc g++ flex bison libncurses-dev build-essential kernel-package libssl-dev libc6-dev bin86 qttools5-dev libelf-dev -y

在readme文件上还有

Install required packages

  • IPMCTL
  • Installation: https://docs.pmem.io/ipmctl-user-guide/installing-ipmctl/installing-ipmctl-packages-on-linux
  • NDCTL
  • Installation: https://docs.pmem.io/ndctl-user-guide/installing-ndctl/installing-ndctl-packages-on-linux

前者在Ubuntu19及以后的版本都能安装,而之前的版本需要自己编译。后者旧版在添加PPA源之后能安装。

Ubuntu20.04

相比较而言这个版本安装要省事很多,直接输入命令:

sudo apt install ipmctl
sudo apt install ndctl daxctl

Ubuntu18.04

需要参考官方链接在 Linux 上从源代码构建和安装 IPMCTL网页下滑还有一些常见错误的处理方案。

安装所需实用程序

sudo apt update
sudo apt install wget git cmake pkg-config autoconf doxygen libtool build-essential

安装libsafec-devel

然后添加一个额外的ppa,相当于添加了一个只包括libsafec的公网库,否则会出现说找不到的报错(如果该repository中没有该package,则会抛出Error. E: Unable to locate package)。

sudo add-apt-repository ppa:jhli/libsafec
sudo apt update
sudo apt install libsafec-dev libsafec-3.5.3

Personal Package Archive, 意思是个人包档案。PPA可以提供新版本的软件以及在Linux官方库中没有的软件。PPA就是一种repository,对于Linux系统来说,Repository就是个文件仓库,包含了各个软件的信息,例如:版本号,校验码(checksum)分为以下四种组成部分:

  • Main: 标准支持的免费和开源的软件
  • Universe: 社区维护的免费和开源的软件
  • Restricted: 对各个设备的专有驱动
  • Multiverse: 受限于版权或法律条目的软

对于Ubuntu来说,只需要保存这条链接(存放在/etc/apt/source.list中),就能够找到所有属于该repository的软件。对于用户来说,只需将目标软件的PPA repository添加到sources.list中,更新repository列表后便可以找到和安装。有人得到了该软件的源码,在源码上制作PPA。

使用PPA并不会修改原有的sources.list文件,而是在/etc/apt/sources.d目录下创建两个文件。删除PPA:在Settings > Software & Updates > Other Software中可以看到,选中的PPA链接。若取消选中,/etc/apt/sources.list.d则会注释该条目。若选择Remove,/etc/apt/sources.list.d中则会删除该条目。

安装libndctl-devel

下一个依赖安装倒是顺利sudo apt install libndctl-dev

安装ruby-asciidoctor

之后安装又会出现报错,但是连续两次报错,就连续两次输入报错中推荐安装的命令即可以成功。

sudo apt install ruby
sudo gem install asciidoctor asciidoctor-pdf --pre

在这里插入图片描述

Build&Install

依赖都装好后开始编译和安装

cd ~
wget https://github.com/intel/ipmctl/archive/refs/tags/v02.00.00.3885.zip
unzip v02.00.00.3885.zip 
cd ipmctl-02.00.00.3885/
mkdir output && cd output
cmake -DRELEASE=ON -DCMAKE_INSTALL_PREFIX=/ ..
make -j all
sudo make install

最后验证一下安装成功了没,输入ipmctl会显示详细信息。
在这里插入图片描述

下载源码

wget https://github.com/sylab/multi-clock/archive/refs/heads/main.zip
unzip main.zip
cd multi-clock/src //进入源码的文件,编译需要先找到Kconfig文件

修改源码

这个main下载后,我有遇到报错,包括但不限于如下的报错:
在这里插入图片描述
我的解决方式是在mm/vmscan.c文件中加入一行代码
在这里插入图片描述

内核编译

开启内核配置选项

一般采用make menuconfig,个人觉得这个页面太难找了,还是qt的界面方便一些。

make xconfig

按照readme上的
Enable Multi-Clock for Tiered Memory System to compile the MULTI-CLOCK kernel.
Following are the other required configurations need to be eanbled for MULTI-CLOCK:

  • allow for memory hot-add //已默认开启,但可以检查一下
  • Device memory (pmem, HMM, etc...) hotplug support //已默认开启,但可以检查一下
  • NVDIMM (Non-Volatile Memory Device) Support --->
    • NVDIMM DAX: Raw access to persistent memory //已默认开启,但可以检查一下

然后是配置PM热插拔要用的,不是选Y(打勾)是点(选M)

Device Drivers --->
-\*- DAX: direct access to differentiated memory --->
<M> Device DAX: direct access mapping device
<M> PMEM DAX: direct access to persistent memory
<M> KMEM DAX: volatile-use of persistent memory
< > PMEM DAX: support the deprecated /sys/class/dax interface

使用Ctrl+F可以搜索,但是只限于搜索一个单词,不过足够定位选项了,下面用图片展示这些选项的位置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置选项都开启完后,点击左上角file>save>quit.

修改内核配置文件

上一步操作后会生成一个.config文件,当内核编译发生报错时,一般会到这个文件里做修改。
在编译前都会做的修改有一个:将CONFIG_SYSTEM_TRUSTED_KEYS的内容变为空。(否则后面会报错的)

gedit .config

然后用Ctrl+F搜索CONFIG_SYSTEM_TRUSTED_KEYS,改掉,保存。
在这里插入图片描述
如果编译时遇到报错:Makefile:988: recipe for target ‘certs’ failed,还需要在这个文件里改,将这个参数关闭掉CONFIG_MODULE_SIG=n
注意每次报错后重新开始内核编译都需要:

sudo make mrproper
sudo make clean

然后从make xconfig这一步重来!

编译内核

这里j几是几个线程同时编译,后面数字是CPU核数的整数倍就可,这样速度会快很多。

make -j20

安装内核

sudo make modules_install //这里出现报错也是需要重来
sudo make install //将自动修改GRUB配置文件

如果用make modules_install执行时,报错如下的话

can't read modules.order: No such file or directory Makefile:xxxx: recipe for target '_modinst_' failed
make: *** [_modinst_] Error 1

解决办法:将make 命令换用 make V=1 all 执行。

更换系统内核

使用ls -l /lib/modules/命令,可以看到5.3.1-multiclock内核已经装好了。
在这里插入图片描述
GRUB 是一个用于加载和管理系统启动的完整程序。它是 Linux 发行版中最常见的引导程序bootloader。引导程序是计算机启动时运行的第一个软件。它加载操作系统的内核,然后再由内核初始化操作系统的其他部分(包括 Shell、显示管理器、桌面环境 等等)。

sudo gedit /etc/default/grub

在文件末尾添加:

GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

注释并且修改:

# GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=30

在这里插入图片描述
接着更新 grub 配置:sudo update-grub
重启系统:sudo reboot
在开机之前的 grub 界面中,选择 Advantages for ubuntu (ubuntu高级设置)选项,接着选择自己想要的内核版本进入便可。
uname -r 查看系统内核版本。

如果要长期使用这个内核,那就需要注释掉 GRUB_TIMEOUT=30 这一段代码,设置 GRUB_TIMEOUT_STYLE 值为 hidden,不然下次开机还会弹出 grub 界面,最后更新一下配置sudo update-grub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值