斐讯N1盒子刷机做Linux服务器

修订

2023-02-26: 按新版Armbian修订,增加ZFS安装说明

准备

自打斐讯的P2P业务翻车以后,给我们这些穷玩家带来了一项福利,那就是很多“理财产品” 被在市场上便宜甩卖了。

个人觉得这些遗产大多还是挺值的,特别是刚翻车那阵子时,比如一百多块的K2P路由器,T1盒子等,当然最值的还是这个不到一百块的N1盒子。

N1的硬件配置比之前大部分树莓派及其它各种派都要高(当然最新版的树莓派配置还是要更高一些),但是价格比它们都要低得多。

  • CPU: Amlogic S905D
  • RAM: 2G
  • NAND: 8G
  • 网络:1000M
  • 另有双频WIFI,HDMI输出,两个USB2.0

虽然默认的系统很垃圾,是一个基于Android系统做的天天链P2P应用,但是可以刷啊。一个常用的用法是刷电视盒子系统,再配一个T1的遥控器(现在还在卖的官方P1实际就是这样的组合)。但是本文要说的是刷一个真正的Linux系统。

这个系统叫做Armbian,是一个基于Debian或Ubuntu构建的用于各种ARM开发板的系统,支持包括树莓派在内的各种派,支持多种SoC方案,其中刚好也包括了N1用的Amlogic芯片。

步骤

  • 降级bootloader
  • 制作armbian启动盘
  • 启动到armbian
  • 刷入armbian
  • 后续配置

降级bootloader

  • 如果版本为V2.19则无须降级,以上版本都需要
  • 下载文件:N1_V2.19_imgs.zip,并解压
  • 开启ADB调试:用鼠标点击斐讯 N1 官方固件的那个版本号 4 次,出现 【ADB调试开启】的字样即可
  • N1 连接有线或无线网络,电脑与N1在同一LAN,不要联Internet,防止降级完又自动升级
  • 连接一下:adb connect 192.168.x.x,IP为盒子地址
  • 确认ADB连接成功:adb devices -l
  • 盒子插上usb双公头线连接到电脑,请尽量用电脑主板原生usb端口,N1请用靠近hdmi的usb口
  • 进入fastboot模式:adb shell reboot fastboot
  • 重启后确认进入fastboot模式成功:fastboot devices
  • 完成后开始刷机:
fastboot flash bootloader bootloader.img  
fastboot flash boot boot.img  
fastboot flash recovery recovery.img  
  • 然后重启:fastboot reboot

制作armbian启动U盘并启动

  • 原Armbian论坛的大神已经退出这个项目,现在是ophub大神在维护:Amlogic S9xxx Armbian
  • 最近版的固件在Release页面下载,选择你喜欢的发行版和内核版本,目前提供的是Debian bullseye和Ubuntu Jammy两个发行版和5.x和6.x两个内核版本。注意要选择N1用的SoC版本:amlogic_s905d,这个不能选错。
  • 之前烧完安装U盘还要改配置的操作现在已经不需要了,直接U盘启动即可。
  • 如果是从Android系统开始刷机,还需要以下步骤:
    • N1启动完成后确认已经连网
    • 连接N1:adb connect 192.168.x.x
    • 从U盘启动:adb shell reboot update
    • 必须在启动瞬间插入U盘,不要提前插入,会导致Android修改U盘文件属性,导致安装后的系统用户权限错
    • 也不能太晚插入,否则会进入recovery
    • N1会重启(早先的版本会启动两次)
  • 如果之前就是Armbian系统或已经完成Android的上述步骤后,即可完成从U盘启动到Armbian
  • 初次登录会要求设置root用户密码
  • 之后会建议创建一个用户,之后可以用这个用户通过sudo操作系统。也可以跳过这步

刷入armbian linux

  • 如果是从Android系统进入,建议先备份原来的Android系统:
    • 备份:armbian-ddbr,选择备份(之后可以用同样的方式恢复备份),等待备份完成,视U盘速度而定,备份是对整个NAND的复制,不过有压缩,最终大小约600M
  • 执行armbian-install刷入NAND
  • 会提示选择盒子型号,N1一般是用101,不过102也可以,不知道有什么区别
  • 之后是选择磁盘文件系统格式,推荐用btrfs
  • 刷完后即可关机:poweroff
  • 关机后拔掉U盘,再重新通电开机,即可从NAND启动armbian

后续配置

  • 用:armbian-config进行初始配置
  • 可选择配置系统时间、系统语言、默认网络等
  • 建议先配置网络再进行其它配置,如:时区,语言,软件源等
  • 也可以用nmtui进行单独的网络配置
  • 目前的版本在每次重装后都会生成新的无线Mac地址,不再有旧版需要手工修改的问题
  • 然后就是apt更新升级安装软件什么的了

重刷回Android

  • 找出安装时用ddbr做的备份
  • 用armbian安装U盘启动N1
  • 运行armbian-ddbr,选择恢复备份
  • 恢复(可能需要较长时间)
  • 按正常线刷方式刷各种Android盒子系统
  • 如果没有备份原始ROM的话可以用恩山论坛的这个方法

问题处理

就我个人使用经验感觉理财产品还是有点质量问题的,特别是用的NAND芯片恐怕是不那么好,碰到过在写入数据时出错导致文件系统变只读的情况,需要重启才能恢复,甚至重启后还会反复出现,在搜解决方案时也看到别人也有碰到过,而且应该也不是使用上的问题,因为全新机器上也出现过。

最后只能通过用Armbian安装U盘启动后修复:

# EXT4格式
fsck /dev/mmcblk2p2
# btrfs格式
btrfs check /dev/mmcblk2p2

其它命令

除了前面用到的以外,还有一些armbian专用命令提供了一些额外的功能:

  • armbian-update: 更新内核,不过实际使用发现只能升版,不能降版或同版本更新(如稳定版切换开发版)
  • armbian-software: 安装软件,功能应该是跟armbian-config里的software是差不多的
  • armbian-swap: 交换空间配置
  • armbian-openvfd: 配置LED
  • armbian-tf: 配置外部存储
  • armbian-kernel: 编译内核——实际上在N1上无法进行,因为N1的8G存储不够,除非先扩展外部存储

详细使用说明见官方github。

安装ZFS

常规安装方法参考ZFS “just works” now on Armbian操作:

  • 安装内核头文件。通过 armbian-config (Software -> Headers_install) 安装。
  • 通过apt安装zfs
apt install zfs-dkms zfsutils-linux

注意:不必像原帖一样使用 backport,因为新版已经包含。

等安装完成即可使用ZFS。

如果安装失败,直接按下述最后ophub大佬建议方法处理。

安装ZFS问题处理

上述方法正常应该是可以的,但问题是稳定版的flippy内核安装不了……

报错说CONFIG_MODULES=y未配置,但是搜索ZFS和内核源码可以看到配置是对的。

试着运行zfs命令,提示找不到模块。运行:

modprobe zfs

报错加载不了模块,不存在。安装模块试试:

dkms install zfs/2.1.5

编译报错,还是CONFIG_MODULES的问题……只好尝试编译一下:

# 因为flippy内核是用clang+llvm编译的,不是用gcc,所以需要先安装一下
apt install clang llvm lld
# 以下命令来自config_modules的Makefile,加上了CC和LD指定使用clang和llvm
make modules -y ... M=/usr/lib/dkms/zfs/build/build/config_modules CC=clang LD=ld.lld

然而编译还是报错说fixdep找不到libc.so.6……但是看了一圈,libc.so.6的路径和文件都是正常的,按ChatGPT的建议重装了libc6也不能解决问题:

apt install --reinstall libc6

最后放狗搜了半天才发现:

cd /path_to_fixdep
file fixdep
# 或安装binwalk后
binwalk fixdep

显示fixdep是个x86-64可执行文件……原来问题的根本原因是flippy内核的header包不是ARM的。但是重编译也不行:

make oldconfig

会报错找不到Kconfig。只好去github上问了ophub大佬,提供的解决方案是更新内核到开发版……

armbian-update -v dev -k 5.15.9x

更新完重启后再重新安装zfs……直接就成功了……当然中间编译dmks模块会比较慢,需要等一会。

安装完如果没有重启,需要手工加载一下内核模块,不然zfs命令还是不能用:

modprobe zfs

现在就可以愉快地使用zfs和zpool了。

推送到[go4pro.org]