斐讯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
: 配置LEDarmbian-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]