木须柄的时光工坊

探索技术与游戏乐趣的奇妙之旅

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

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

DSC03387_副本_修复后.jpg

一、系统安装

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

我一开始打算先安装航天龙梦版的Fedora 32,但是航天龙梦的软件仓库(http://mirror.lemote.com/)已经停止维护,目前在芯联芯的仓库还有少量备份,仓库内还有的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盘写入系统镜像。

 1# 查看U盘所在分区: sdb
 2$ lsblk
 3sdb      8:16   1  14.6G  0 disk 
 4
 5# parted 分区工具
 6$ sudo parted /dev/sdb
 7
 8# 查看U盘基本信息
 9(parted) print list                                                   
10Model: General UDisk (scsi)
11Disk /dev/sdb: 15.7GB
12Sector size (logical/physical): 512B/512B
13Partition Table: msdos
14Disk Flags: 
15
16Number  Start   End     Size    Type     File system  Flags
17 1      1049kB  15.7GB  15.7GB  primary  fat32        boot, lba
18
19# 选择分区设备
20(parted) select /dev/sdb                                              
21Using /dev/sdb
22
23# 分区格式类型为MBR
24(parted) mklabel msdos
25
26# 整块硬盘分为一个分区
27(parted) mkpart primary ext3 0% 100%
28
29# 退出 parted 分区工具
30(parted) quit
31
32# 格式化U盘为 ext3 格式分区
33$ sudo mkfs.ext3 /dev/sdb
34
35# 写入系统引导镜像
36# Fedora 32 航天龙梦版
37$ sudo dd if=Fedora-32-GNOME-for-3A4000-beta1.iso of=/dev/sdb bs=4M status=progress && sync
38
39# Loongnix 20 Mips64el
40$ 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 软件源更新

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

1# 更新软件源
2# 将 ftp.loongnix.org 改为 ftp.loongnix.cn
3$ vim /etc/apt/sources.list
4
5# See https://wiki.debian.org/SourcesList for more information.
6deb http://ftp.loongnix.cn/os/loongnix/20/mips64el DaoXiangHu-testing main contrib non-free
7deb-src http://ftp.loongnix.cn/os/loongnix/20/mips64el DaoXiangHu-testing main contrib non-free

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

 1# 获取新的软件源的数字签名
 2$ gpg --recv-key A8C7C20CEDF1B817
 3gpg: 钥匙箱‘/root/.gnupg/pubring.kbx’已创建
 4gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
 5gpg: 密钥 A8C7C20CEDF1B817:公钥 “loongsonos (loongsonos) <service@loongnix.cn>” 已导入
 6gpg: 处理的总数:1
 7gpg:               已导入:1
 8
 9# 导出签名文件
10$ gpg --output loongnix20.gpg --armor --export A8C7C20CEDF1B817
11
12# 添加新的数字签名
13$ sudo apt-key add loongnix20.gpg
14
15# 此时可以查看对应的数字签名,显示已正常
16$ apt-key list

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

1# 更新软件
2$ sudo apt update
3$ sudo apt upgrade

1.4 利用debootstrap安装 Debian 12

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

1.4.1 安装 Debian 12

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

1$ sudo apt-get install debootstrap
2
3# 安装其他必要工具
4$ sudo apt install wget gnupg2 gparted

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

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

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

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

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

1# 如果出现数字签名过期错误
2# 可以从 Debian 官方站点下载最新的密钥文件
3$ wget https://ftp-master.debian.org/keys/archive-key-12.asc
4$ gpg --no-default-keyring --keyring /usr/share/keyrings/debian-archive-keyring.gpg --import archive-key-12.asc
5
6# 安装 Debian 基础系统
7$ sudo debootstrap --arch=mips64el bookworm /mnt http://ftp.cn.debian.org/debian

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

1.4.2 配置系统

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

1$ sudo mount --bind /dev /mnt/dev
2$ sudo mount --bind /proc /mnt/proc
3$ sudo mount --bind /sys /mnt/sys
4$ sudo chroot /mnt

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

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

设置基础配置

设置时区:

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

设置 hostname:

1$ echo "LS3A4000" > /etc/hostname

配置 hosts 文件:

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

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

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

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

1en_US.UTF-8 UTF-8
2zh_CN.UTF-8 UTF-8

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

1zh_CN.UTF-8

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

然后配置时区:

1$ dpkg-reconfigure tzdata
配置系统挂载

创建fstab文件:

 1# 使用 查看每个分区的 UUID,方便后面编辑 fstab 启动挂载位置
 2$ sudo blkid
 3/dev/nvme0n1p5: UUID="e3db4efb-f04e-4c6a-8a71-23d843ef2777" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="e9a49e7e-5960-4d29-b764-f955f52ce834"
 4/dev/nvme0n1p3: UUID="6deb1ed1-9842-4a22-b753-66951564a469" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="f44996be-99a5-48f3-b9ba-e7fa5bcba6e1"
 5/dev/nvme0n1p1: UUID="ef9815ff-24dc-46ab-bff8-5d8910152ee2" BLOCK_SIZE="1024" TYPE="ext4" PARTUUID="a82918bf-fa65-40d7-935b-6dedafe9b9c7"
 6/dev/nvme0n1p6: UUID="b058e305-82e1-448e-9642-aeb06dbaf240" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="0a3f9a01-ae61-4137-80b2-a97087aca74d"
 7/dev/nvme0n1p4: UUID="cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="aee92887-d8d9-47b5-bbd5-3c9e80148e54"
 8/dev/nvme0n1p2: UUID="3dd9a37b-0521-4303-b2a0-668c60cd0206" TYPE="swap" PARTUUID="84a1fb05-3379-4f22-85f1-bb8d3257e7d8"
 9
10# 编辑 fstab 文件
11$ sudo vim /etc/fstab
12
13# /etc/fstab: static file system information.
14# <file system>             <mount point>  <type>  <options>  <dump>  <pass>
15UUID=ef9815ff-24dc-46ab-bff8-5d8910152ee2 /boot          ext4    defaults,noatime 0 2
16UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206 swap           swap    defaults,noatime 0 2
17UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 /              ext4    defaults,noatime 0 1
18UUID=b058e305-82e1-448e-9642-aeb06dbaf240 /home1         ext4    defaults,noatime 0 2
19
20# 对比 Loongnix 20 的 fstab 文件内容
21# 区别就是挂载根目录的分区不同
22
23# /etc/fstab: static file system information.
24# <file system>             <mount point>  <type>  <options>  <dump>  <pass>
25UUID=ef9815ff-24dc-46ab-bff8-5d8910152ee2 /boot          ext4    defaults,noatime 0 2
26UUID=3dd9a37b-0521-4303-b2a0-668c60cd0206 swap           swap    defaults,noatime 0 2
27UUID=6deb1ed1-9842-4a22-b753-66951564a469 /              ext4    defaults,noatime 0 1
28UUID=b058e305-82e1-448e-9642-aeb06dbaf240 /home          ext4    defaults,noatime 0 2
更新软件源
 1$ sudo apt install vim grub-common ca-certificates
 2
 3# 添加软件源
 4$ vim /etc/apt/sources.list
 5
 6# 使用中科大源
 7deb https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
 8deb-src https://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
 9deb https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
10deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
11deb https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
12deb-src https://mirrors.ustc.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
13deb https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware
14deb-src https://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware
15
16# 更新软件
17$ sudo apt update
18$ sudo apt upgrade
安装显卡驱动
1# 安装 AMD 独显驱动
2$ sudo apt install firmware-linux-free firmware-linux-nonfree
建立新用户

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

1$ useradd -m myuser

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

设置新用户的默认 shell :

1$ usermod -s /bin/bash myuser

设置密码:

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

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

1$ usermod -a -G sudo myuser

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

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

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

更新内核

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

 1# 下载 Loongnix20 的内核软件包并安装,如果有更新的请使用新版本
 2# 下载地址:http://ftp.loongnix.cn/os/loongnix/20/mips64el/pool/main/l/linux/
 3# linux-kbuild 需要依赖 libssl1.1
 4# linux-headers-4.19.0-loongson 需要依赖 linux-headers-4.19.0-common 和 linux-kbuild
 5$ wget http://ftp.loongnix.cn/os/loongnix/20/mips64el/pool/main/o/openssl/libssl1.1_1.1.1d-0+lnd.3_mips64el.deb
 6$ 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
 7$ 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
 8$ 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
 9$ 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
10
11$ apt-get install ./linux-image-4.19.0-15-loongson-3_4.19.190-rc4.lnd.1_mips64el.deb
12$ apt-get install ./libssl1.1_1.1.1d-0+lnd.3_mips64el.deb
13$ apt-get install ./linux-kbuild-4.19_4.19.190-rc4.lnd.1_mips64el.deb
14$ apt-get install ./linux-headers-4.19.0-common_4.19.167-rc5.lnd.1_all.deb
15$ apt-get install ./linux-headers-4.19.0-loongson-3_4.19.167-rc5.lnd.1_mips64el.deb
16
17# 安装 Debian 的默认内核
18$ apt-get install linux-image-loongson-3

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

image-20240529061348512.png

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

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

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

1MODULES=dep

重新生成initrd.img

1$ update-initramfs -k all -c

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

image-20240529061445186.png

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

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

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

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

退出 chroot 并重启

退出 chroot 环境:

1$ exit

1.4.3 配置启动项

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

1# 挂载 Debian 12 系统分区到 /mnt
2$ mount /dev/nvme0n1p4 /mnt
3
4# 备份原始启动文件
5$ cd /boot
6$ mv boot.cfg boot.cfg.bak
7
8# 拷贝内核文件
9cp -r /mnt/boot/* /boot/
更新GRUB

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

1/boot/grub/grub.cfg
2/boot/boot/grub/grub.cfg
3/boot/EFI/BOOT/grub.cfg

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

 1menuentry 'Debian GNU/Linux 12 (bookworm)' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-6deb1ed1-9842-4a22-b753-66951564a469' {
 2		load_video
 3		insmod gzio
 4		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
 5		insmod part_gpt
 6		insmod ext2
 7		if [ x$feature_platform_search_hint = xy ]; then
 8		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
 9		else
10		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
11		fi
12		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
13		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
14		echo	'载入初始化内存盘...'
15		initrd	/initrd.img-4.19.0-15-loongson-3
16		boot
17	}
18
19submenu 'Advanced options for Debian GNU/Linux 12 (bookworm)' $menuentry_id_option 'gnulinux-advanced-cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76' {
20
21	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' {
22		load_video
23		insmod gzio
24		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
25		insmod part_gpt
26		insmod ext2
27		if [ x$feature_platform_search_hint = xy ]; then
28		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
29		else
30		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
31		fi
32		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
33		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
34		echo	'载入初始化内存盘...'
35		initrd	/initrd.img-4.19.0-15-loongson-3
36		boot
37	}
38
39	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' {
40		load_video
41		insmod gzio
42		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
43		insmod part_gpt
44		insmod ext2
45		if [ x$feature_platform_search_hint = xy ]; then
46		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
47		else
48		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
49		fi
50		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
51		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro single
52		echo	'载入初始化内存盘...'
53		initrd	/initrd.img-4.19.0-15-loongson-3
54		boot
55	}
56
57	# 注意: Debian 12 默认的 6.1.0-21 内核无法正常启动
58    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' {
59		load_video
60		insmod gzio
61		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
62		insmod part_gpt
63		insmod ext2
64		if [ x$feature_platform_search_hint = xy ]; then
65		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
66		else
67		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
68		fi
69		echo	'载入 Linux 6.1.0-21-loongson-3 ...'
70		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
71		echo	'载入初始化内存盘...'
72		initrd	/initrd.img-6.1.0-21-loongson-3
73		boot
74	}
75
76	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' {
77		load_video
78		insmod gzio
79		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
80		insmod part_gpt
81		insmod ext2
82		if [ x$feature_platform_search_hint = xy ]; then
83		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
84		else
85		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
86		fi
87		echo	'载入 Linux 6.1.0-21-loongson-3 ...'
88		linux	/vmlinuz-6.1.0-21-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro single
89		echo	'载入初始化内存盘...'
90		initrd	/initrd.img-6.1.0-21-loongson-3
91		boot
92	}
93}

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

1# 备份原文件
2$ mv /boot/EFI/BOOT/grub.cfg /boot/EFI/BOOT/grub.cfg.bak
3
4# 更新 GRUB
5$ grub-mkconfig -o /boot/EFI/BOOT/grub.cfg

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

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

  1### BEGIN /etc/grub.d/10_linux ###
  2function gfxmode {
  3	set gfxpayload="${1}"
  4}
  5set linux_gfx_mode=
  6export linux_gfx_mode
  7menuentry 'Loongnix 20 GNU/Linux' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-6deb1ed1-9842-4a22-b753-66951564a469' {
  8		load_video
  9		insmod gzio
 10		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
 11		insmod part_gpt
 12		insmod ext2
 13		if [ x$feature_platform_search_hint = xy ]; then
 14		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
 15		else
 16		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
 17		fi
 18		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
 19		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
 20		echo	'载入初始化内存盘...'
 21		initrd	/initrd.img-4.19.0-15-loongson-3
 22		boot
 23	}
 24
 25submenu 'Advanced options for Loongnix 20 GNU/Linux' $menuentry_id_option 'gnulinux-advanced-6deb1ed1-9842-4a22-b753-66951564a469' {
 26	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' {
 27		load_video
 28		insmod gzio
 29		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
 30		insmod part_gpt
 31		insmod ext2
 32		if [ x$feature_platform_search_hint = xy ]; then
 33		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
 34		else
 35		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
 36		fi
 37		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
 38		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
 39		echo	'载入初始化内存盘...'
 40		initrd	/initrd.img-4.19.0-15-loongson-3
 41		boot
 42	}
 43	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' {
 44		load_video
 45		insmod gzio
 46		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
 47		insmod part_gpt
 48		insmod ext2
 49		if [ x$feature_platform_search_hint = xy ]; then
 50		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
 51		else
 52		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
 53		fi
 54		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
 55		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=6deb1ed1-9842-4a22-b753-66951564a469 ro single 
 56		echo	'载入初始化内存盘...'
 57		initrd	/initrd.img-4.19.0-15-loongson-3
 58		boot
 59	}
 60	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' {
 61		load_video
 62		insmod gzio
 63		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
 64		insmod part_gpt
 65		insmod ext2
 66		if [ x$feature_platform_search_hint = xy ]; then
 67		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
 68		else
 69		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
 70		fi
 71		echo	'载入 Linux 4.19.0-12-loongson-3 ...'
 72		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
 73		echo	'载入初始化内存盘...'
 74		initrd	/initrd.img-4.19.0-12-loongson-3
 75		boot
 76	}
 77	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' {
 78		load_video
 79		insmod gzio
 80		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
 81		insmod part_gpt
 82		insmod ext2
 83		if [ x$feature_platform_search_hint = xy ]; then
 84		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
 85		else
 86		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
 87		fi
 88		echo	'载入 Linux 4.19.0-12-loongson-3 ...'
 89		linux	/vmlinuz-4.19.0-12-loongson-3 root=UUID=6deb1ed1-9842-4a22-b753-66951564a469 ro single 
 90		echo	'载入初始化内存盘...'
 91		initrd	/initrd.img-4.19.0-12-loongson-3
 92		boot
 93	}
 94}
 95
 96### END /etc/grub.d/10_linux ###
 97
 98### BEGIN /etc/grub.d/20_linux_xen ###
 99### END /etc/grub.d/20_linux_xen ###
100
101### BEGIN /etc/grub.d/30_os-prober ###
102
103menuentry 'Debian GNU/Linux 12 (bookworm)' --class loongnix --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-6deb1ed1-9842-4a22-b753-66951564a469' {
104		load_video
105		insmod gzio
106		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
107		insmod part_gpt
108		insmod ext2
109		if [ x$feature_platform_search_hint = xy ]; then
110		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
111		else
112		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
113		fi
114		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
115		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
116		echo	'载入初始化内存盘...'
117		initrd	/initrd.img-4.19.0-15-loongson-3
118		boot
119	}
120submenu 'Advanced options for Debian GNU/Linux 12 (bookworm)' $menuentry_id_option 'gnulinux-advanced-cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76' {
121	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' {
122		load_video
123		insmod gzio
124		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
125		insmod part_gpt
126		insmod ext2
127		if [ x$feature_platform_search_hint = xy ]; then
128		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
129		else
130		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
131		fi
132		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
133		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
134		echo	'载入初始化内存盘...'
135		initrd	/initrd.img-4.19.0-15-loongson-3
136		boot
137	}
138	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' {
139		load_video
140		insmod gzio
141		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
142		insmod part_gpt
143		insmod ext2
144		if [ x$feature_platform_search_hint = xy ]; then
145		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
146		else
147		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
148		fi
149		echo	'载入 Linux 4.19.0-15-loongson-3 ...'
150		linux	/vmlinuz-4.19.0-15-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro single
151		echo	'载入初始化内存盘...'
152		initrd	/initrd.img-4.19.0-15-loongson-3
153		boot
154	}
155    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' {
156		load_video
157		insmod gzio
158		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
159		insmod part_gpt
160		insmod ext2
161		if [ x$feature_platform_search_hint = xy ]; then
162		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
163		else
164		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
165		fi
166		echo	'载入 Linux 6.1.0-21-loongson-3 ...'
167		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
168		echo	'载入初始化内存盘...'
169		initrd	/initrd.img-6.1.0-21-loongson-3
170		boot
171	}
172	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' {
173		load_video
174		insmod gzio
175		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
176		insmod part_gpt
177		insmod ext2
178		if [ x$feature_platform_search_hint = xy ]; then
179		  search --no-floppy --fs-uuid --set=root  ef9815ff-24dc-46ab-bff8-5d8910152ee2
180		else
181		  search --no-floppy --fs-uuid --set=root ef9815ff-24dc-46ab-bff8-5d8910152ee2
182		fi
183		echo	'载入 Linux 6.1.0-21-loongson-3 ...'
184		linux	/vmlinuz-6.1.0-21-loongson-3 root=UUID=cd8f6e4d-beff-4cfb-9f06-ff68a6ccbf76 ro single
185		echo	'载入初始化内存盘...'
186		initrd	/initrd.img-6.1.0-21-loongson-3
187		boot
188	}
189}
190
191### END /etc/grub.d/30_os-prober ###
192
193### BEGIN /etc/grub.d/30_uefi-firmware ###
194### END /etc/grub.d/30_uefi-firmware ###
195
196### BEGIN /etc/grub.d/40_custom ###
197# This file provides an easy way to add custom menu entries.  Simply type the
198# menu entries you want to add after this comment.  Be careful not to change
199# the 'exec tail' line above.
200
201# Add custom menu entries here.
202### END /etc/grub.d/40_custom ###
安装完成

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

1$ sudo umount /mnt/dev
2$ sudo umount /mnt/proc
3$ sudo umount /mnt/sys
4$ sudo umount /mnt/boot
5$ sudo umount /mnt
6
7# 重启系统
8$ 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

评论
取消