龙芯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个不低于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盘的引导分区
Fedora 32
由于航天龙梦的 Fedora 32 更新源已经废弃,因此不再建议安装这版系统
使用装有航天龙梦版的Fedora 32
的系统U盘引导,可以进入系统安装界面。
选择默认语言为简体中文
点击“安装目的地”进行分区规划
选择指定的硬盘,选择“高级自定义(Blivet-GUI
)”存储配置
手动规划分区结构,我这里使用的是一块 1TB 的 M.2 SSD 固态硬盘,我这里划分出一个 128MB 的 EFI 分区,挂载到/boot/efi
,一个 256MB 的 ext4 分区,挂载到/boot
;一个 16GB 的交换分区;一个 128GB 的根分区,挂载到/
;其余空间不做操作,留给其他系统备用,多个系统可以共用 boot 分区和交换分区。
设置完成后,点击“开始安装”,等待系统安装完成。
初次启动后需要设置用户名和密码,然后Fedora 32
就安装完毕了。
Loongnix 20 mips64el
使用装有Loongnix 20 mips64el
的系统U盘引导,可以进入系统安装界面。
选择时区和键盘布局后,进入分区界面,这里选择手动分区。
这里删除原有的分区,重新划分分区为:第一个 320MB 的 ext4 分区,挂载到/boot
,第二个 16GB 分区挂载到交换分区 ;第三个 128GB 的根分区,挂载到/
;第四个和第五个为 128GB 的分区不挂载;第六个分区将剩余空间挂载到/home
作为共享空间。
然后设置用户名、主机名和密码,确认信息后开始安装系统。
安装完成后,重启系统。
安装完成后,可以首先更新一下软件源。
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
debootstrap
安装 Debian 12注意,使用debootstrap
安装 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 的基础系统就安装好了。
安装完毕之后,首先挂载必要的文件系统,然后使用 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 环境中,进程只能访问新根目录及其子目录,从而限制了对系统其余部分的访问。这在系统管理和安全方面有许多用途。我们这里使用debootstrap
和 chroot
在一个目录中创建一个基本的 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
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 的引导文件和对应内核。
接下来我们配置initramfs.conf
,我们需要将配置改成只包含需要的模块。
1$ vim /etc/initramfs-tools/initramfs.conf
找到一行 MODULES=most
配置,将其改成下面的:
1MODULES=dep
重新生成initrd.img
。
1$ update-initramfs -k all -c
检查其生成的大小,应该小了一些。
以上操作就基本完成了 Debian 12 系统的安装,但是由于实际情况的特殊性。为了防止意外,可以额外安装图形界面和 SSH 远程登陆,方便出现误操作时的恢复工作。
注:笔者在第一次尝试debootstrap
时,发现grub.cfg
的修改有些问题,处于原始命令行状态,中文显示异常,无法 SSH,最离谱的是连键盘输入都存在随机卡顿(高频随机出现键盘输入没反应,所以甚至连sudo
输入密码都成问题)。导致不得不推翻重来。
1$ sudo apt install gnome
2$ sudo systemctl start gdm3
3$ sudo systemctl enable gdm3
1$ sudo apt install openssh-server
2$ sudo systemctl start ssh
3$ sudo systemctl enable ssh
配置工作准备完毕,就可以退出 chroot 回到Loongnix 20
的终端了。
退出 chroot 环境:
1$ exit
退出到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/
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 内核暂时无法正常工作,可以留待以后自行编译研究。