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