前言
前几天在咸鱼上买到了一块龙芯的电脑主板,CPU型号是龙芯(Loongson) 3A3000,芯片组似乎是780E。回来装系统的时候遇到了不少麻烦,这里记录一下,如果能帮到后来者,那自然是最好不过。
系统选择
实际上,我仍然推荐有条件的用户,使用龙芯官方适配的操作系统Loongnix,因为这是龙芯优化过的系统。
只不过,因为mips64el架构上的Loongnix是基于Fedora发行版的,且版本古老。我个人习惯的环境是Debian,只有LoongArch上的Loongnix才是基于Debian制作的。况且,Loongnix默认带一个GUI,连服务器版都带,我不是很喜欢先装后卸,因此我还是希望安装一个相对干净的Debian系统上去。
龙芯3A3000基于mips架构,具体到Debian上,属于mips64el架构(MIPS 64-bit little-endian mode, MIPS 64位 小端序),请记住这个代号,因为我们后面会反复用到。
关于Debian的系统代号选择,在本文编写时,最新的Debain系统是Debian 11 Bullseye,使用的系统内核是Linux 5.10. 但我们目前会使用上一个版本,也就是Debain 10 Buster,具体原因下面会说明。
下面我们讨论的方法,基于狗剩百科:Debian 系发行版安装指南,并做一些自己经验的额外补充。
条件限制和实现方式
安装方式的选择
在平时x86计算机上,安装Debian的方法,首选当然是直接从Debian CD源中下载安装镜像,将镜像刻录到U盘上,引导镜像中的安装程序完成安装。这样当然是最简单的。
然而,根据我的简单测试,似乎Debian CD源中的ISO镜像,并不能顺利地在我手头上这块主板中引导。
失败的Debian安装程序引导测试这一段是我尝试在龙芯上引导Debian安装镜像时的失败操作,或许是该镜像不具备在龙芯电脑上引导的能力,也有可能是我本身操作方法不正确。因此我将这一过程记录在此,如有谬误,还请批评指正。如果您希望参考本文进行Debian系统的安装,请略过这一段。
- 下载Debian CD中的安装镜像debian-11.2.0-mips64el-netinst.iso
- 使用
dd命令,将其刻录到U盘上:dd if=debian-11.2.0-mips64el-netinst.iso of=/dev/sdb bs=8M,(其中/dev/sdb是我的U盘设备)- 将U盘插入龙芯电脑,启动,提示找不到LiveCD中的一个文件。
根据上述表现,个人猜测电脑已经成功读取并加载了U盘上的引导程序,但不知为何无法加载U盘上的后续文件,无法进入安装程序。
此外,目前我个人还暂时无法确定这块龙芯主板究竟是BIOS/CSM引导模式还是EFI引导模式。BIOS设定中无对应选项可调整。
在龙芯提供的Loongnix镜像中,存在一个EFI文件夹,且引导该Loongnix镜像时,在GRUB Shell中执行
echo $grub_platform,回显结果为efi。且在Loongnix LiveCD系统中,grub-install命令提示安装的平台为MIPS下的EFI平台。但进入该LiveCD系统后,使用Loongnix的安装程序尝试安装系统时,如果磁盘为GPT分区表,会提示当前计算机运行在BIOS/CSM模式下,需要创建额外分区才能继续安装。采用MS-DOS分区表则无此问题,安装时不需要创建ESP分区也可完成安装并正常引导本地磁盘系统。这也是我电脑目前的状态。
因此,我已经无法区分这台龙芯电脑运行在何种模式下,需要进一步考察。如果您有什么看法或观点,欢迎通过邮件同我交流,我的电子邮件地址在站内可找到。
有些难办的是,mips64el的Debian源,没有GRUB2软件包提供! 这就意味着,我们需要借助其他方法,安装GRUB引导器 —— 如果没有GRUB引导器,我们是无法引导我们的系统的!
因此,我们需要另辟蹊径,分两步安装Debian系统:
- 安装龙芯的Loongnix系统到本地硬盘上。我选用的镜像是loongnix-20180930.iso。这一步骤主要目的是借助官方的安装程序,完成分区并将GRUB与Linux内核安装到本地硬盘。
- 重新进入LiveCD系统,删除本地硬盘中原有的根目录结构 (但需要保留
/boot目录下的所有内容!因此建议在 第一步安装Loongnix系统时,将/boot作为一个独立的分区,空间大约1GB) - 使用
debootstrap工具,创建Debian根文件系统,并在此基础上,进行修改。更多相关的信息可以阅读通过 Unix/Linux 系统来安装 Debian GNU/Linux。
总体而言,我们相当于借用了Loongnix系统提供的内核引导Debian系统。大部分情况下,这种方法没有问题,但也有一些情况下,系统中的部分程序要求Linux内核版本号高于一个指定版本。此时需要自行斟酌是否升级,升级到何版本。本文后面会讨论这一问题。
Debian大版本号的选择
不同Debian大版本号下,对应的Linux内核版本号也不同。原则上讲,我们使用的内核版本号应该接近Debian官方指定的内核版本号。在Debian软件源中,龙芯3代CPU使用的内核包名为linux-image-loongson-3。
| Debian版本号 | Debian代号 | 软件源中使用的内核版本号 |
|---|---|---|
| 9 | stretch | 4.9 |
| 10 | buster | 4.19 |
| 11 | bullseye | 5.10 |
此外,北京龙芯也有提供一些预编译的Debian格式内核包:https://mirrors.tuna.tsinghua.edu.cn/bjlx/pool/main/l/,我目前使用的是其提供的linux-4.19.0-loongson-3下的包。暂时不清楚北京龙芯提供的内核包相对于Debian提供的包是否有特别的优化,或其他区别。
选用Linux 4.19内核的前提下,Debian 10就成为了适配的最佳选择。
过段时间我会尝试下是否能直接用Debian 11 + Linux 5.10,届时会更新后续。
备注后续1: 2022年4月11日下午
根据我的简单测试,Debian维护者打包的Linux 5.10内核,虽然可以正常工作,但似乎和我手上这块780E主板有点不相兼容。
具体表现为,开机后风扇非常嘈杂,怀疑是有一部分功能没能成功移交给操作系统。过段时间再试试看吧。
安装流程
准备
注意备份文件警告!
请务必在执行后续操作前,备份目标计算机上的所有重要文件!本人不会对您任何操作/误操作造成的损失负责!
- 一个空白U盘,用于刻录LiveCD镜像
- Loongnix LiveCD镜像,我选用的版本为loongnix-20180930.iso(实际上这个版本有些不好用,因为其基于Fedora 21构建,软件包版本非常老,如果有新版本的Loongnix LiveCD在你的电脑上可用,完全可以替换)。
- 有效的网络连接(这要求第二步中的镜像可以正常驱动网卡)
同时,下面的操作几乎都是在root权限中完成的。
刻录LiveCD镜像并引导
我想这一步会是大伙比较熟悉的了。
|
|
of=/dev/sdX部分,请替换成你的U盘实际设备块,如/dev/sdb。不清楚的可以使用fdisk -l查看。
写入完成后,将U盘插到龙芯电脑上,开机并从U盘引导。
安装debootstrap
进入LiveCD环境后,首先配置好网络。接着安装debootstrap。可以使用命令dnf install debootstrap从Fedora源中下载安装。如果源中的工具太老不方便,也可以直接从Debian软件源中下载debootstrap的.deb包,使用tar与ar将其解压即可使用该程序(在Loongnix/Fedora上也可以!)
挂载目标分区
接下来,随便在根目录下创建一个新路径,例如/deb,用于挂载我们的本地磁盘分区。
接着,将本地磁盘上,已经安装有Loongnix的根目录分区,挂载到挂载点上。但此时先不需要挂载/boot分区。如果真的需要挂载boot,请在删除时选择忽略/boot下的所有文件!
挂载之后,删除该分区下的所有文件
下面的例子,我们假设本地磁盘上,/dev/sda1是/boot分区,/dev/sda2是/分区,/dev/sda3是swap分区。
|
|
执行安装程序
接下来,我们要用debootstrap创建一个Debian根文件系统。
|
|
最后的地址可以替换成你所在位置速度最快的Debian镜像地址。
如果debootstrap提示找不到一个名称中包含buster的配置文件,可能是当前使用的debootstrap工具版本太老(常见于使用Fedora源安装)。一种解决方法是下载新版的debootstrap工具,另一种是直接使用Debian的相对代号,如在本文编写时,Debian 10 Buster是上一个稳定版,则可以使用oldstable替代buster。同理,如果使用旧版的debootstrap安装Debian 11 Bullseye报错,也可以使用stable替代bullseye。
坐下来,等一等,喝杯咖啡,根文件系统就创建好了。
基础系统配置
为了让系统能跑起来,单有个根文件系统是完全不够的。
复制内核模块
虽然这么做不知道是否合适,可以考虑试试。
将Loongnix的内核模块,复制到目标Debian系统中。
|
|
fstab文件
/etc/fstab文件指定了系统启动时挂载文件目录的规则,需要仔细配置。
编写该文件,可以自己亲历亲为,仔细编写即可。但懒人有懒人的方法,不喜欢自己写这种配置文件,怕出错的话,也完全可以用ArchLinux团队提供的genfstab脚本,自动生成配置文件。方法也非常简单,可以去人家Github主页GitHub - archlinux/arch-install-scripts: Useful scripts for installing Arch Linux 直接下载源码包,make一下就好。或者,现在包括Debian在内的发行版仓库也包含了这个脚本的可执行文件,下载解压运行一气呵成。
使用genfstab,需要在LiveCD操作系统中运行,且需要在运行前将/boot分区挂载到Debian系统的/boot上,物归原主。如果有swap分区的话,也需要确认已经启用。
|
|
确认无误后,就可以使用下面的命令生成fstab文件了。
|
|
-U参数是指定使用UUID作为分区识别的标准。/deb是Debian根文件系统的挂载点,最后的重定向是将输出写入到目标系统的/etc/fstab中。
建议生成后自行检查一下文件是否符合预期。
chroot环境
还需要chroot进入Debian系统,对其进行一些配置。
|
|
设置root口令
|
|
安装常用软件包
或许下列软件包会提供一些提示,具体是否需要可以看您的需求。
- locales: 使用英语以外的语言必须的软件包
- vim/emacs/nano: 文本编辑器
- openssh-server: SSH服务器,使用SSH登录系统的必须
- build-essential: Debian下用于构建软件包的套件,包含了gcc/g++/make等工具
- network-manager: Network Manager工具,可以自动配置网络
安装这些软件包只要用apt工具即可。如:
|
|
网络配置
网络配置是一件烦人的事情,人生或许应该用在更有意义的事情上。因此我个人喜欢用Netowork Manager自动接管网络配置。
|
|
还有什么比开机就能看到有线网络已连接,无线网络只需要一行命令就可连接,更令人开心的事情吗?
当然,如果你喜欢其他方法,如直接编辑/etc/network/interfaces,那也可以参考对应的教程。
此外,我们还需要配置hostname,也就是本机的主机名。
|
|
完成
我想上述配置已经可以让Debain系统跑起来了。退出chroot环境,重启电脑,记得拔掉U盘,没有意外的话,就可以进入Debian系统了。
如果电脑引导卡在Loongnix字样的引导动画,不妨尝试按下 Ctrl + Alt + F2 (F2~F8都可以试试),看能否见到熟悉的登录界面。
更换内核
如果你阅读到这里,看起来你已经进入了Debian系统,那么先恭喜你,你的Debian系统已经可以使用了!
但问题随之而来,如果你使用的Loongnix镜像和我相同,那你一定会发现,Loongnix使用的内核版本较老,可能是3.10附近的版本。而即便使用Fedora 28,其内核版本号也约为4.4~4.9左右的版本,和Debian官方的内核版本号是不匹配的。对于强迫症来说,这样的情况不太爽, 我们得想想办法替换内核!
备份
然而,这样的操作注定是危险的,经常失败的,我想在进行下述操作前,需要先将系统备份一次。毕竟从debootstrap安装系统的流程终究繁琐,值得创建一个小小的备份帮助我们快速恢复。
具体备份的方法就不展开了。数据备份的责任在各位操作者本身!
安装新内核
安装新版本内核的方法有许多,Debian官方软件源中的会是一个选择。不过既然我没用过,那我也不具体展开介绍了。反正安装方法极为简单,apt install linux-image-loongson-3 linux-headers-loongson-3 linux-libc-dev就可以了。
我们接下来介绍怎么安装北京龙芯提供的4.19.0内核包。
下载地址位于https://mirrors.tuna.tsinghua.edu.cn/bjlx/pool/main/l/linux-4.19.0-loongson-3/,需要下载该地址下的三个文件:
- linux-headers-4.19.0-loongson-3_4.19.124-lemote-20200525_mips64el.deb
- linux-image-4.19.0-loongson-3_4.19.124-lemote-20200525_mips64el.deb
- linux-libc-dev_4.19.124-lemote-20200525_mips64el.deb
可以考虑将三个文件下载到同一个文件夹中。随后进入该文件夹,执行
|
|
即可安装三个软件包。
更新initramfs
首先安装initramfs-tools软件包
|
|
执行下述命令,更新initramfs
|
|
这会在/boot下生成一个initrd.img-4.19.0-loongson-3文件。我们接下来配置GRUB引导项会使用到这一文件。
修改GRUB配置文件
最后一步,修改GRUB配置文件。
失败的GRUB配置生成这一部分我也不确定最佳做法是什么,因此还请熟悉GRUB的同学批评指正!
众所周知,在x86平台下,每次更新内核后,只需要使用
grub-mkconfig命令,即可自动生成正确的GRUB配置文件。尽管Debian MIPS64EL软件源不提供GRUB2软件包,但提供了
grub-common软件包,其包含了grub-mkconfig命令。因此我尝试使用该程序为新内核创建引导菜单。就生成的结果看,其生成确实正常。但在重启引导时,GRUB提示
insmod命令无法找到。这是很奇怪的事情,因为无论是原Loongnix生成的
grub.cfg还是Debian生成的grub.cfg,都使用了insmod命令。目前我尚未弄清楚造成该问题的原因,正在比较两配置文件的差异,还请大家批评指正。
这里,我们使用的方法是,直接修改原有的/boot/grub.cfg文件,将原先引导的3.x内核文件,改为新安装的4.19内核文件。
|
|
编辑后,保存该文件,重启,至少在我的电脑上,这种方法成功替换了系统内核。
目前我还没探索到更优雅地生成GRUB配置文件的方法,如果您有好的想法或见解,欢迎给我发邮件,敬请批评指正。
可能的改进方法
这部分主要是我暂时的改进想法,如果您是参考本文安装Debian系统,或许可以跳过这一段落了。
很明显,两种GRUB配置文件中,有部分insmod命令没有正常执行。
一种解决方法是,每次安装内核,都通过自己手动修改/boot/grub.cfg文件,达到引导新内核的目的,缺点是不优雅,容易出错。
另一种解决方法是,我们都知道,GRUB配置文件的生成是基于/etc/grub.d/下的模板文件的,那么可以考虑将Loongnix系统中的模板文件复制到Debian中,即可生成格式接近的配置文件,或许也可以解决问题。
但目前头疼的问题还有,Debian不提供MIPS64EL架构的GRUB2包,导致必须依赖Loongnix/Fedora安装GRUB主引导记录。我在尝试自行编译GRUB,具体测试情况可能得等下一篇博文更新了。
尾声
目前经过几天的使用, 龙芯3A3000整体还是超过了我的预期的。基本上,3A3000接近于英特尔J1900水准。据说使用LoongArch架构的3A5000性能上了几个台阶,或许今后有机会可以试试看。
我会更期待,我们有更多的实干家出现。