一、系统安装
龙芯 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 盘引导,可以进入系统安装界面。
选择默认语言为简体中文
点击“安装目的地”进行分区规划
选择指定的硬盘,选择“高级自定义(Blivet-GUI
)”存储配置
手动规划分区结构,我这里使用的是一块 1TB 的 M.2 SSD 固态硬盘,我这里划分出一个 128MB 的 EFI 分区,挂载到 /boot/efi
,一个 256MB 的 ext4 分区,挂载到 /boot
;一个 16GB 的交换分区;一个 128GB 的根分区,挂载到 /
;其余空间不做操作,留给其他系统备用,多个系统可以共用 boot 分区和交换分区。
设置完成后,点击“开始安装”,等待系统安装完成。
初次启动后需要设置用户名和密码,然后 Fedora 32
就安装完毕了。
1.3 安装 Loongnix 20 mips64el
1.3.1 安装
使用装有 Loongnix 20 mips64el
的系统 U 盘引导,可以进入系统安装界面。
选择时区和键盘布局后,进入分区界面,这里选择手动分区。
这里删除原有的分区,重新划分分区为:第一个 320MB 的 ext4 分区,挂载到 /boot
,第二个 16GB 分区挂载到交换分区 ;第三个 128GB 的根分区,挂载到 /
;第四个和第五个为 128GB 的分区不挂载;第六个分区将剩余空间挂载到 /home
作为共享空间。
然后设置用户名、主机名和密码,确认信息后开始安装系统。
安装完成后,重启系统。
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 的引导文件和对应内核。
接下来我们配置 initramfs.conf
,我们需要将配置改成只包含需要的模块。
$ vim /etc/initramfs-tools/initramfs.conf
找到一行 MODULES=most
配置,将其改成下面的:
MODULES=dep
重新生成 initrd.img
。
$ update-initramfs -k all -c
检查其生成的大小,应该小了一些。
以上操作就基本完成了 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 内核暂时无法正常工作,可以留待以后自行编译研究。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于