龙芯小试 —— 龙芯3A3000主机简单配置与Debian系统安装
前言
前几天在咸鱼上买到了一块龙芯的电脑主板,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镜像,并不能顺利地在我手头上这块主板中引导。
有些难办的是,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镜像并引导
我想这一步会是大伙比较熟悉的了。
1 | dd if=loongnix-20180930.iso of=/dev/sdX bs=8M |
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分区。
1 | mkdir /deb |
执行安装程序
接下来,我们要用debootstrap创建一个Debian根文件系统。
1 | debootstrap --arch mips64el buster \ |
最后的地址可以替换成你所在位置速度最快的Debian镜像地址。
如果debootstrap提示找不到一个名称中包含buster
的配置文件,可能是当前使用的debootstrap工具版本太老(常见于使用Fedora源安装)。一种解决方法是下载新版的debootstrap工具,另一种是直接使用Debian的相对代号,如在本文编写时,Debian 10 Buster是上一个稳定版,则可以使用oldstable
替代buster
。同理,如果使用旧版的debootstrap安装Debian 11 Bullseye报错,也可以使用stable
替代bullseye
。
坐下来,等一等,喝杯咖啡,根文件系统就创建好了。
基础系统配置
为了让系统能跑起来,单有个根文件系统是完全不够的。
复制内核模块
虽然这么做不知道是否合适,可以考虑试试。
将Loongnix的内核模块,复制到目标Debian系统中。
1 | cp -r /lib/modules /deb/lib/ |
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分区的话,也需要确认已经启用。
1 | mount /dev/sda1 /deb/boot |
确认无误后,就可以使用下面的命令生成fstab
文件了。
1 | genfstab -U /deb > /deb/etc/fstab |
-U
参数是指定使用UUID作为分区识别的标准。/deb
是Debian根文件系统的挂载点,最后的重定向是将输出写入到目标系统的/etc/fstab
中。
建议生成后自行检查一下文件是否符合预期。
chroot环境
还需要chroot进入Debian系统,对其进行一些配置。
1 | LANG=C.UTF-8 chroot /deb /bin/bash |
设置root口令
1 | passwd root |
安装常用软件包
或许下列软件包会提供一些提示,具体是否需要可以看您的需求。
- locales: 使用英语以外的语言必须的软件包
- vim/emacs/nano: 文本编辑器
- openssh-server: SSH服务器,使用SSH登录系统的必须
- build-essential: Debian下用于构建软件包的套件,包含了gcc/g++/make等工具
- network-manager: Network Manager工具,可以自动配置网络
安装这些软件包只要用apt
工具即可。如:
1 | apt install locales vim build-essential |
网络配置
网络配置是一件烦人的事情,人生或许应该用在更有意义的事情上。因此我个人喜欢用Netowork Manager自动接管网络配置。
1 | apt install network-manager |
还有什么比开机就能看到有线网络已连接,无线网络只需要一行命令就可连接,更令人开心的事情吗?
当然,如果你喜欢其他方法,如直接编辑/etc/network/interfaces
,那也可以参考对应的教程。
此外,我们还需要配置hostname,也就是本机的主机名。
1 | echo myloong > /etc/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
可以考虑将三个文件下载到同一个文件夹中。随后进入该文件夹,执行
1 | dpkg -i *.deb |
即可安装三个软件包。
更新initramfs
首先安装initramfs-tools
软件包
1 | apt install initramfs-tools |
执行下述命令,更新initramfs
1 | update-initramfs -k 4.19.0-loongson-3 -u -v |
这会在/boot
下生成一个initrd.img-4.19.0-loongson-3
文件。我们接下来配置GRUB引导项会使用到这一文件。
修改GRUB配置文件
最后一步,修改GRUB配置文件。
这里,我们使用的方法是,直接修改原有的/boot/grub.cfg
文件,将原先引导的3.x内核文件,改为新安装的4.19内核文件。
1 | menuentry 'Loongnix GNU/Linux' --class loongnix --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinu$ set root='hd0,msdos1' |
编辑后,保存该文件,重启,至少在我的电脑上,这种方法成功替换了系统内核。
目前我还没探索到更优雅地生成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性能上了几个台阶,或许今后有机会可以试试看。
我会更期待,我们有更多的实干家出现。