Linux 系统基础知识

实验:给优麒麟 Linux 系统更换“心脏”

我们在虚拟机上实验。首先安装优麒麟 22.04 系统。

一次默认安装的,执行到最后阶段 "sudo make install",提示空间不足的错误。

之后手动安装设置了一下分区大小,设大了 boot 和 backup 分区,实验成功。

安装完成之后,先看一下当前系统的版本信息。

  • tim@tim-vmwarevirtualplatform:~/桌面$ uname -a
  • Linux tim-vmwarevirtualplatform 5.15.0-25-generic #25-Ubuntu SMP Wed Mar 30 15:54:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

在编译 Linux 内核之前,先安装相关软件包。

  • tim@tim-vmwarevirtualplatform:~/桌面$ sudo apt-get install libncurses5-dev libssl-dev build-essential openssl

这边的软件包也不全,之后看编译提示少什么安装什么。

Linux 内核官网 下载最新版本内核源码,当前实验最新的版本是 Linux6.1.8。

解压得到内核源码之后,我们需要使用 make menuconfig 命令进行内核配置。

使用 make menuconfig 命令是手动进行配置,比较繁琐。我们可以直接使用当前系统上的系统文件,不仅省事,还减少了配置错误的风险。

  • tim@tim-vmwarevirtualplatform:~/linux-6.1.8$ cp /boot/config-5.15.0-25-generic .config

打开配置文件,可以看到各个功能就像是对应的各个“宏定义”,可以配置指定各个功能的开关。

设置好配置项之后,就可以开始编译了。

  • tim@tim-vmwarevirtualplatform:~/linux-6.1.8$ make -j4

一些编译问题

编译是个漫长的过程,在此期间遇到了一些编译错误,在此记录一下。

问题 1: fatal error: libelf.h: No such file or directory

需要安装对应的开发组件:

  • tim@tim-vmwarevirtualplatform:~/linux-6.1.8$ sudo apt-get install libelf-dev

问题 2: 没有规则可制作目标 "debian/canonical-revoked-certs.pem",由 "certs/x509_revocation_list"

编辑之前拷贝的 .config 配置文件,将其中以下原本的配置项

  • CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
  • CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"

改为

  • CONFIG_SYSTEM_TRUSTED_KEYS=""
  • CONFIG_SYSTEM_REVOCATION_KEYS=""

在 make 编译好之后,下一步编译和安装内核模块。

  • tim@tim-vmwarevirtualplatform:~/linux-6.1.8$ sudo make modules_install

最后把编译好的内核镜像安装到当前 Linux 系统中。

  • tim@tim-vmwarevirtualplatform:~/linux-6.1.8$ sudo make install

重启之后,可以再次查看当前系统的版本信息。可以看到已经换成了最新的 Linux 内核。

  • tim@tim-vmwarevirtualplatform:~/桌面$ uname -a
  • Linux tim-vmwarevirtualplatform 6.1.8 #1 SMP PREEMPT_DYNAMIC Wed Feb 8 23:14:13 CST 2023 x86_64 x86_64 x86_64 GNU/Linux

实验:使用 QEMU 虚拟机来运行 Linux 系统

首先安装相关工具:

  • tim@tim-vmwarevirtualplatform:~/桌面$ sudo apt-get install qemu-system-arm libncurses5-dev gcc-aarch64-linux-gnu build-essential git bison flex libssl-dev

然后克隆图书作者准备好的 linux 源码仓库:https://github.com/figozhang/runninglinuxkernel_5.0

克隆好之后,编译内核。

  • tim@tim-vmwarevirtualplatform:~/runninglinuxkernel_5.0$ ./run_rlk_arm64.sh build_kernel

编译文件系统。

  • tim@tim-vmwarevirtualplatform:~/runninglinuxkernel_5.0$ sudo ./run_rlk_arm64.sh build_rootfs

最后运行编译好的 ARM64 Linux 系统。

  • tim@tim-vmwarevirtualplatform:~/runninglinuxkernel_5.0$ ./run_rlk_arm64.sh run

问题 3: 运行时提示 failed to find romfile "efi-virtio.rom"

安装对应组件:

  • tim@tim-vmwarevirtualplatform:~/runninglinuxkernel_5.0$ sudo apt-get install ipxe-qemu

在 QEMU 虚拟机中登录系统后,先更新以下软件仓库。

  • benshushu:~# apt update

问题 4: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 3B4FE6ACC0B21F32

添加提示的 key 值:

  • benshushu:~# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32