龙芯 3A4000 安装 Loongnix 20 + Debian 12 双系统

DSC03387_副本_修复后.jpg

一、系统安装

龙芯 3A4000 可以安装的操作系统选择还是很多的,商用的操作系统包括银河麒麟和统信 UOS。开源系统包括航天龙梦定制的 Fedora​、龙芯中科的 Loongnix​,这两种系统都针对 3A4000 的指令集做了特别优化。另外 Debian 的 mips64el 版本也可以使用。

我一开始打算先安装航天龙梦版的 Fedora 32​,但是航天龙梦的软件仓库(http://mirror.lemote.com:8000/)已经停止维护,目前在芯联芯的仓库还有少量备份,仓库内还有的 Fedora 32​的下载地址,较早的 Fedora 28​已经彻底丢失了,不过我还是从迅雷缓存中把这版系统找了回来,下载地址,可能会有龙芯 3A4000 以前硬件的同学需要。然而由于备份的软件仓库内容不完整,也无法作为软件源更新,加上系统版本也很老旧,因此这版系统就不建议安装了。

第二个准备安装的系统是 Loongnix 20​,下载地址。龙芯 3A4000 使用的操作系统是 mips64el 架构的,注意不要和 3A5000 等后续型号使用的 LoongArch​架构的系统镜像搞混淆了。

最后利用 debootstrap​安装最新的 Debian 12 系统。

1.1 准备工作

准备 1 个不低于 4GB 的 U 盘用于存储引导系统。为了 U 盘能顺利在龙芯主机上引导启动,建议在 Linux 环境下使用 dd​命令分区,Windows 环境下可以使用 Win32DiskImager​,不能使用 rufus​, UltraISO​等工具。使用 parted​命令可以将 U 盘分区,使用 MBR 引导,然后使用 dd​给 U 盘写入系统镜像。

# 查看U盘所在分区: sdb
$ lsblk
sdb      8:16   1  14.6G  0 disk 

# parted 分区工具
$ sudo parted /dev/sdb

# 查看U盘基本信息
(parted) print list                                             
Model: General UDisk (scsi)
Disk /dev/sdb: 15.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  15.7GB  15.7GB  primary  fat32        boot, lba

# 选择分区设备
(parted) select /dev/sdb                                        
Using /dev/sdb

# 分区格式类型为MBR
(parted) mklabel msdos

# 整块硬盘分为一个分区
(parted) mkpart primary ext3 0% 100%

# 退出 parted 分区工具
(parted) quit

# 格式化U盘为 ext3 格式分区
$ sudo mkfs.ext3 /dev/sdb

# 写入系统引导镜像
# Fedora 32 航天龙梦版
$ sudo dd if=Fedora-32-GNOME-for-3A4000-beta1.iso of=/dev/sdb bs=4M status=progress && sync

# Loongnix 20 Mips64el
$ sudo dd if=Loongnix-20.mips64el.rc2.iso of=/dev/sdb bs=4M status=progress && sync

完成后就拥有一个可以引导龙芯 3A4000 主机的引导 U 盘了。此时重新插拔一下 U 盘就可以查看到 U 盘的引导分区

1.2 安装航天龙梦版 Fedora 32

由于航天龙梦的 Fedora 32 更新源已经废弃,因此不再建议安装这版系统

使用装有航天龙梦版的 Fedora 32​的系统 U 盘引导,可以进入系统安装界面。

image-20240528163551161.png

选择默认语言为简体中文

03_安装 fedora32.mp4_20240528_163744.778.jpg

点击“安装目的地”进行分区规划

image-20240528164108592.png

选择指定的硬盘,选择“高级自定义(Blivet-GUI​)”存储配置

image-20240528164230382.png

手动规划分区结构,我这里使用的是一块 1TB 的 M.2 SSD 固态硬盘,我这里划分出一个 128MB 的 EFI 分区,挂载到 /boot/efi​,一个 256MB 的 ext4 分区,挂载到 /boot​;一个 16GB 的交换分区;一个 128GB 的根分区,挂载到 /​;其余空间不做操作,留给其他系统备用,多个系统可以共用 boot 分区和交换分区。

image-20240528164416242.png

设置完成后,点击“开始安装”,等待系统安装完成。

03_安装 fedora32.mp4_20240528_163914.187.jpg

初次启动后需要设置用户名和密码,然后 Fedora 32​就安装完毕了。

03_安装 fedora32.mp4_20240528_165119.837.jpg

1.3 安装 Loongnix 20 mips64el

1.3.1 安装

使用装有 Loongnix 20 mips64el​的系统 U 盘引导,可以进入系统安装界面。

07_U 盘启动 loongnix20.mp4_20240529_002759.121.jpg

image-20240528165555156.png

选择时区和键盘布局后,进入分区界面,这里选择手动分区。

image-20240528165707821.png

这里删除原有的分区,重新划分分区为:第一个 320MB 的 ext4 分区,挂载到 /boot​,第二个 16GB 分区挂载到交换分区 ;第三个 128GB 的根分区,挂载到 /​;第四个和第五个为 128GB 的分区不挂载;第六个分区将剩余空间挂载到 /home​作为共享空间。

image-20240529002833799.png

然后设置用户名、主机名和密码,确认信息后开始安装系统。

image-20240529003020697.png

安装完成后,重启系统。

image-20240528172756451.png

1.3.2 软件源更新

安装完成后,可以首先更新一下软件源。

# 更新软件源
# 将 ftp.loongnix.org 改为 ftp.loongnix.cn
$ vim /etc/apt/sources.list

# See https://wiki.debian.org/SourcesList for more information.
deb http://ftp.loongnix.cn/os/loongnix/20/mips64el DaoXiangHu-testing main contrib non-free
deb-src http://ftp.loongnix.cn/os/loongnix/20/mips64el DaoXiangHu-testing main contrib non-free

另外 Loongnix 20​软件源默认的数字签名已经过期,需要重新导入修复。

# 获取新的软件源的数字签名
$ gpg --recv-key A8C7C20CEDF1B817
gpg: 钥匙箱‘/root/.gnupg/pubring.kbx’已创建
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 A8C7C20CEDF1B817:公钥 “loongsonos (loongsonos) <service@loongnix.cn>” 已导入
gpg: 处理的总数:1
gpg:               已导入:1

# 导出签名文件
$ gpg --output loongnix20.gpg --armor --export A8C7C20CEDF1B817

# 添加新的数字签名
$ sudo apt-key add loongnix20.gpg

# 此时可以查看对应的数字签名,显示已正常
$ apt-key list

然后就可以愉快的更新软件源了

# 更新软件
$ sudo apt update
$ sudo apt upgrade

1.4 利用 debootstrap​安装 Debian 12

注意,使用 debootstrap​安装 Debian 12 的过程比较抽象,没有图形化界面简单直观,同时又包含大量危险操作,教程只是给出一种解决思路,实际上手还需要掌握其原理后才能灵活运用,如果不熟悉可以在虚拟环境先测试几次再尝试。

1.4.1 安装 Debian 12

在安装好 Loongnix 20​后,进入系统打开终端,安装 debootstrap

$ sudo apt-get install debootstrap

# 安装其他必要工具
$ sudo apt install wget gnupg2 gparted

查看分区结构,根据之前的分区规划,这里将 Debian 12 安装在 nvme0n1p4 分区中。此时我们已经设置好了分区并格式化为 ext4 分区。如果之前没有规划出额外分区,可以使用 gparted​进行磁盘分区。

# 查看分区结构
$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0 953.9G  0 disk 
├─nvme0n1p1 259:1    0   320M  0 part /boot
├─nvme0n1p2 259:2    0    16G  0 part [SWAP]
├─nvme0n1p3 259:3    0   128G  0 part /
├─nvme0n1p4 259:4    0   128G  0 part 
├─nvme0n1p5 259:5    0   128G  0 part 
└─nvme0n1p6 259:6    0 553.6G  0 part /home

使用 debootstrap​安装 Debian 基础系统。这里我们将即将安装 Debian 12 的分区挂载到 /mnt​中。

# 挂载安装分区
$ sudo mount /dev/nvme0n1p4 /mnt

挂载准备完毕后,开始安装基本操作系统

# 如果出现数字签名过期错误
# 可以从 Debian 官方站点下载最新的密钥文件
$ wget https://ftp-master.debian.org/keys/archive-key-12.asc
$ gpg --no-default-keyring --keyring /usr/share/keyrings/debian-archive-keyring.gpg --import archive-key-12.asc

# 安装 Debian 基础系统
$ sudo debootstrap --arch=mips64el bookworm /mnt http://ftp.cn.debian.org/debian

这里会需要一些时间安装一些基本组件,结束后 Debian 12 的基础系统就安装好了。

1.4.2 配置系统

安装完毕之后,首先挂载必要的文件系统,然后使用 chroot 进入 Debian 12 的系统环境:

$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys
$ sudo chroot /mnt

为不了解这一步骤的同学科普一下:chroot​ 是 Unix 和 Unix-like 操作系统中的一个命令,用于更改当前进程及其子进程的根目录。这个新根目录称为“chroot jail”。在 chroot 环境中,进程只能访问新根目录及其子目录,从而限制了对系统其余部分的访问。这在系统管理和安全方面有许多用途。我们这里使用 debootstrap​ 和 chroot​ 在一个目录中创建一个基本的 Debian 系统环境,以便在 Loongnix 20​环境中安装和配置 Debian 12 系统。

在 chroot 之前,我们所处于 Loongnix 20​环境;进入 chroot 之后,我们就处于模拟的 Debian 12 环境了。虽然从命令行看基本没什么区别,但是此时就是以新系统的视角去做各种操作,接下来我们的各种操作就是要在正式启动 Debian 12 之前,对新系统做一些基本的、必要的设置。(实际上和在图形界面中安装时做的各种设置是类似的,只不过需要在纯命令行界面去完成)

设置基础配置

设置时区:

# 设置时区为中国
$ ln -sf /usr/share/zoneinfo/PRC /etc/localtime
dpkg-reconfigure -f noninteractive tzdata

设置 hostname:

$ echo "LS3A4000" > /etc/hostname

配置 hosts 文件:

$ echo "127.0.0.1 localhost" >> /etc/hosts
$ echo "127.0.1.1 yourhostname" >> /etc/hosts

配置本地化,首先配置 locales ,该包默认未安装。

$ apt-get install locales
$ sudo dpkg-reconfigure locales

按提示选择需要的 locale ,用空格取消或选中。这里提供一个示例:

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8

确定后根据提示选择默认 locale ,选择中文:

zh_CN.UTF-8

再次确定,将自动完成配置。

然后配置时区:

$ dpkg-reconfigure tzdata
配置系统挂载

创建 fstab​文件:

# 使用 查看每个分区的 UUID,方便后面编辑 fstab 启动挂载位置
$ sudo blkid
/dev/nvme0n1p5: UUID="e3db4efb-f04e-4c6a-8a71-23d843ef2777" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="e9a49e7e-5960-4d29-b764-f955f52ce834"
/dev/nvme0n1p3: UUID="6deb1ed1-9842-4a22-b753-66951564a469" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="f44996be-99a5-48f3-b9ba-e7fa5bcba6e1"
/dev/nvme0n1p1: UUID="ef9815ff-24dc-46ab-bff8-5d8910152ee2" BLOCK_SIZE="1024" TYPE="ext4" PARTUUID="a82918bf-fa65-40d7-935b-6dedafe9b9c7"
/dev/nvme0n1p6: UUID="b058e305-82e1-448e-9642-aeb06dbaf240" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="0a3f9a01-ae61-4137-80b2-a97087aca74d"
/dev/nvme0n1p4: UUID="cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="aee92887-d8d9-47b5-bbd5-3c9e80148e54"
/dev/nvme0n1p2: UUID="3dd9a37b-0521-4303-b2a0-668c60cd0206" TYPE="swap" PARTUUID="84a1fb05-3379-4f22-85f1-bb8d3257e7d8"

# 编辑 fstab 文件
$ sudo vim /etc/fstab

# /etc/fstab: static file system information.
# <file system>             <mount point>  <type>  <options>  <dump>  <pass>
UUID=ef9815ff-24dc-46ab-bff8-5d8910152ee2 /boot          ext4    defaults,noatime 0 2
UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206 swap           swap    defaults,noatime 0 2
UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 /              ext4    defaults,noatime 0 1
UUID=b058e305-82e1-448e-9642-aeb06dbaf240 /home1         ext4    defaults,noatime 0 2

# 对比 Loongnix 20 的 fstab 文件内容
# 区别就是挂载根目录的分区不同

# /etc/fstab: static file system information.
# <file system>             <mount point>  <type>  <options>  <dump>  <pass>
UUID=ef9815ff-24dc-46ab-bff8-5d8910152ee2 /boot          ext4    defaults,noatime 0 2
UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206 swap           swap    defaults,noatime 0 2
UUID=6deb1ed1-9842-4a22-b753-66951564a469 /              ext4    defaults,noatime 0 1
UUID=b058e305-82e1-448e-9642-aeb06dbaf240 /home          ext4    defaults,noatime 0 2
更新软件源
$ sudo apt install vim grub-common ca-certificates

# 添加软件源
$ vim /etc/apt/sources.list

# 使用中科大源
deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware
deb-src https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware

# 更新软件
$ sudo apt update
$ sudo apt upgrade
安装显卡驱动
# 安装 AMD 独显驱动
$ sudo apt install firmware-linux-free firmware-linux-nonfree
建立新用户

添加一个喜欢的用户, -m​ 选项为这个用户建立默认的用户目录:

$ useradd -m myuser

我们默认这个新建立的用户名为 myuser​ 。

设置新用户的默认 shell :

$ usermod -s /bin/bash myuser

设置密码:

$ passwd myuser
安装 sudo
$ apt-get install sudo

将前面建立的新用户加入 sudo 用户组:

$ usermod -a -G sudo myuser

运行 visudo​ 可以看到默认的配置,其中部分摘录如下:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

可以看到 sudo 用户组是被允许运行 sudo​ 命令的。

更新内核

我们可以在龙芯的软件源中找到更新的 Loongnix 20​的内核,同时使用 Debian 官方的内核(当前版本 6.1.0-21)。根据测试,Debian 12 最新的内核不能正常启动,可能是需要重新编译(留待后续研究),因此我们可以使用 Loongnix 20​的最新内核作为备选方案。

# 下载 Loongnix20 的内核软件包并安装,如果有更新的请使用新版本
# 下载地址:http://ftp.loongnix.cn/os/loongnix/20/mips64el/pool/main/l/linux/
# linux-kbuild 需要依赖 libssl1.1
# linux-headers-4.19.0-loongson 需要依赖 linux-headers-4.19.0-common 和 linux-kbuild
$ wget http://ftp.loongnix.cn/os/loongnix/20/mips64el/pool/main/o/openssl/libssl1.1_1.1.1d-0+lnd.3_mips64el.deb
$ wget http://ftp.loongnix.cn/os/loongnix/20/mips64el/pool/main/l/linux/linux-image-4.19.0-15-loongson-3_4.19.190-rc4.lnd.1_mips64el.deb
$ wget http://ftp.loongnix.cn/os/loongnix/20/mips64el/pool/main/l/linux/linux-kbuild-4.19_4.19.190-rc4.lnd.1_mips64el.deb
$ wget http://ftp.loongnix.cn/os/loongnix/20/mips64el/pool/main/l/linux/linux-headers-4.19.0-common_4.19.167-rc5.lnd.1_all.deb
$ wget http://ftp.loongnix.cn/os/loongnix/20/mips64el/pool/main/l/linux/linux-headers-4.19.0-loongson-3_4.19.167-rc5.lnd.1_mips64el.deb

$ apt-get install ./linux-image-4.19.0-15-loongson-3_4.19.190-rc4.lnd.1_mips64el.deb
$ apt-get install ./libssl1.1_1.1.1d-0+lnd.3_mips64el.deb
$ apt-get install ./linux-kbuild-4.19_4.19.190-rc4.lnd.1_mips64el.deb
$ apt-get install ./linux-headers-4.19.0-common_4.19.167-rc5.lnd.1_all.deb
$ apt-get install ./linux-headers-4.19.0-loongson-3_4.19.167-rc5.lnd.1_mips64el.deb

# 安装 Debian 的默认内核
$ apt-get install linux-image-loongson-3

此时在 /boot​目录下会生成 Debian 12 的引导文件和对应内核。

image-20240529061348512.png

接下来我们配置 initramfs.conf​,我们需要将配置改成只包含需要的模块。

$ vim /etc/initramfs-tools/initramfs.conf

找到一行 MODULES=most​ 配置,将其改成下面的:

MODULES=dep

重新生成 initrd.img​。

$ update-initramfs -k all -c

检查其生成的大小,应该小了一些。

image-20240529061445186.png

以上操作就基本完成了 Debian 12 系统的安装,但是由于实际情况的特殊性。为了防止意外,可以额外安装图形界面和 SSH 远程登陆,方便出现误操作时的恢复工作。

注:笔者在第一次尝试 debootstrap​时,发现 grub.cfg​的修改有些问题,处于原始命令行状态,中文显示异常,无法 SSH,最离谱的是连键盘输入都存在随机卡顿(高频随机出现键盘输入没反应,所以甚至连 sudo​输入密码都成问题)。导致不得不推翻重来。

安装 GNOME 图形界面
$ sudo apt install gnome
$ sudo systemctl start gdm3
$ sudo systemctl enable gdm3
安装 SSH 远程连接
$ sudo apt install openssh-server
$ sudo systemctl start ssh
$ sudo systemctl enable ssh

配置工作准备完毕,就可以退出 chroot 回到 Loongnix 20​的终端了。

退出 chroot 并重启

退出 chroot 环境:

$ exit

1.4.3 配置启动项

退出到 Loongnix 20​的终端环境,此时我们需要把两个系统的启动项设置合并。为了避免误操作,可以首先把原来的 /boot​目录文件全部备份一下。

# 挂载 Debian 12 系统分区到 /mnt
$ mount /dev/nvme0n1p4 /mnt

# 备份原始启动文件
$ cd /boot
$ mv boot.cfg boot.cfg.bak

# 拷贝内核文件
cp -r /mnt/boot/* /boot/
更新 GRUB

Loongnix 20​在 /boot​中有三处位置包含 grub.cfg​,实测启动时执行的是 /boot/EFI/BOOT/grub.cfg​这个文件,其他两个属于备份冗余。

/boot/grub/grub.cfg
/boot/boot/grub/grub.cfg
/boot/EFI/BOOT/grub.cfg

修改 /etc/grub.d/40_custom​文件,在文件末尾添加以下内容。注意等参数需要根据实际情况修改。

menuentry 'Debian GNU/Linux 12 (bookworm)' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro  quiet splash resume=UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-15-loongson-3
		boot
	}

submenu 'Advanced options for Debian GNU/Linux 12 (bookworm)' $menuentry_id_option 'gnulinux-advanced-cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76' {

	menuentry 'Debian GNU/Linux 12 (bookworm), with Linux 4.19.0-15-loongson-3' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-advanced-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro  quiet splash resume=UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-15-loongson-3
		boot
	}

	menuentry 'Debian GNU/Linux 12 (bookworm), with Linux 4.19.0-15-loongson-3 (recovery mode)' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-recovery-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro single
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-15-loongson-3
		boot
	}

	# 注意: Debian 12 默认的 6.1.0-21 内核无法正常启动
    menuentry 'Debian GNU/Linux 12 (bookworm), with Linux 6.1.0-21-loongson-3' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-advanced-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 6.1.0-21-loongson-3 ...'
		linux	/vmlinuz-6.1.0-21-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro  quiet splash resume=UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-6.1.0-21-loongson-3
		boot
	}

	menuentry 'Debian GNU/Linux 12 (bookworm), with Linux 6.1.0-21-loongson-3 (recovery mode)' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-recovery-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 6.1.0-21-loongson-3 ...'
		linux	/vmlinuz-6.1.0-21-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro single
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-6.1.0-21-loongson-3
		boot
	}
}

然后更新 GRUB 启动配置,注意备份

# 备份原文件
$ mv /boot/EFI/BOOT/grub.cfg /boot/EFI/BOOT/grub.cfg.bak

# 更新 GRUB
$ grub-mkconfig -o /boot/EFI/BOOT/grub.cfg

此时就可以看到新的启动项了。

一番这番操作下来,启动项还是有很多冗余,为了简化启动项,我们也可以手动修改 grub.cfg​。不过这样操作有一定风险,请一定要彻底理解其中含义才能继续操作。我们打开文件 /boot/EFI/BOOT/grub.cfg​,从 112 行开始编辑:

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
	set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
menuentry 'Loongnix 20 GNU/Linux' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=6deb1ed1-9842-4a22-b753-66951564a469 ro  quiet splash resume=UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-15-loongson-3
		boot
	}

submenu 'Advanced options for Loongnix 20 GNU/Linux' $menuentry_id_option 'gnulinux-advanced-6deb1ed1-9842-4a22-b753-66951564a469' {
	menuentry 'Loongnix 20 GNU/Linux,Linux 4.19.0-15-loongson-3' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-15-loongson-3-advanced-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=6deb1ed1-9842-4a22-b753-66951564a469 ro  quiet splash resume=UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-15-loongson-3
		boot
	}
	menuentry 'Loongnix 20 GNU/Linux, with Linux 4.19.0-15-loongson-3 (recovery mode)' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-15-loongson-3-recovery-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=6deb1ed1-9842-4a22-b753-66951564a469 ro single 
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-15-loongson-3
		boot
	}
	menuentry 'Loongnix 20 GNU/Linux,Linux 4.19.0-12-loongson-3' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-12-loongson-3-advanced-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-12-loongson-3 ...'
		linux	/vmlinuz-4.19.0-12-loongson-3 root=UUID=6deb1ed1-9842-4a22-b753-66951564a469 ro  quiet splash resume=UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-12-loongson-3
		boot
	}
	menuentry 'Loongnix 20 GNU/Linux, with Linux 4.19.0-12-loongson-3 (recovery mode)' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-12-loongson-3-recovery-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-12-loongson-3 ...'
		linux	/vmlinuz-4.19.0-12-loongson-3 root=UUID=6deb1ed1-9842-4a22-b753-66951564a469 ro single 
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-12-loongson-3
		boot
	}
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###

menuentry 'Debian GNU/Linux 12 (bookworm)' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro  quiet splash resume=UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-15-loongson-3
		boot
	}
submenu 'Advanced options for Debian GNU/Linux 12 (bookworm)' $menuentry_id_option 'gnulinux-advanced-cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76' {
	menuentry 'Debian GNU/Linux 12 (bookworm), with Linux 4.19.0-15-loongson-3' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-advanced-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro  quiet splash resume=UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-15-loongson-3
		boot
	}
	menuentry 'Debian GNU/Linux 12 (bookworm), with Linux 4.19.0-15-loongson-3 (recovery mode)' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-recovery-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro single
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-4.19.0-15-loongson-3
		boot
	}
    menuentry 'Debian GNU/Linux 12 (bookworm), with Linux 6.1.0-21-loongson-3' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-advanced-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 6.1.0-21-loongson-3 ...'
		linux	/vmlinuz-6.1.0-21-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro  quiet splash resume=UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-6.1.0-21-loongson-3
		boot
	}
	menuentry 'Debian GNU/Linux 12 (bookworm), with Linux 6.1.0-21-loongson-3 (recovery mode)' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-recovery-6deb1ed1-9842-4a22-b753-66951564a469' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_gpt
		insmod ext2
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
		else
		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
		fi
		echo	'载入 Linux 6.1.0-21-loongson-3 ...'
		linux	/vmlinuz-6.1.0-21-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro single
		echo	'载入初始化内存盘...'
		initrd	/initrd.img-6.1.0-21-loongson-3
		boot
	}
}

### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

# Add custom menu entries here.
### END /etc/grub.d/40_custom ###
安装完成

确认 GRUB 启动配置完毕,就可以卸载挂载点,完成全部安装操作了。

$ sudo umount /mnt/dev
$ sudo umount /mnt/proc
$ sudo umount /mnt/sys
$ sudo umount /mnt/boot
$ sudo umount /mnt

# 重启系统
$ sudo reboot

重启后的启动项如图所示,我这里针对 Loongnix 20​系统,在原有的 4.19.0-12 内核基础上,添加了 4.19.0-15 版本的内核启动。对于 Debian 12​系统,分别使用 4.19.0-15 和 6.1.0-21 两种内核启动,虽然 6.1.0-21 内核暂时无法正常工作,可以留待以后自行编译研究。

image-20240603134640875.png

image-20240603134744246.png

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...