N1盒子刷Armbian系统

N1盒子刷Armbian系统

彼方 3930 2022-11-22

前言

半个月前,我把N1盒子刷成了Armbian系统,安装了docker,由于各种原因(主要是懒)一直没有写这篇教程,今天是2023年1月2号,来补一下这篇文章。我自认为不是一个喜欢搞代码的人,我只是喜欢鼓捣一些硬件,享受那些刷机的时光,仅此而已。。。

写下这篇文章主要是作为备忘录,来方便以后再操作的时候不用再四处寻找教程,以前写的很多文章也是如此,尽管博客是放在公网上的,但是几乎是没人来看的,主要还是自己没事的时候来看一下。当然了,为了方便以后将文章分享出去,我还是尽量把它写成一篇比较完善的文章。目前网上的很多教程其实都有坑,其实不看这篇文档也是可以的,只是多了一些排坑的时间,也许网上别人的一行命令写错了,你来排查可能就要半天的时间,而你在看这篇文章之后可以一路顺利的走一下,这也是我写这篇文章的意义。

关于N1

如果你不知道N1是什么,那么你可以关掉文章页面了。

N1的优势在于:

  • ARM64主流架构,真64位linux系统,docker随便玩。(Armbian输出:Linux aml 5.0.2-aml-s905 #5.77 SMP PREEMPT Mon Apr 1 17:41:33 MSK 2019 aarch64 GNU/Linux)
  • 真千兆有线网口,2.4/5G双频wifi,可以作热点。
  • 自带8G的emmc存储,linux系统直接刷到盒子里,不用额外插SD卡,I/O性能好。
  • CPU 4核,2G内存。

唯一缺点:

  • USB2.0,显然是不配套千兆网口带宽的,磁盘将成为了下载电影的瓶颈。
  • 需要精力折腾,因为是小众社区来支持N1硬件适配到Armbian系统,安装过程缺乏标准化的方案。

刷机准备

  • 所需硬件
    • N1盒子一个
    • 8G以上U盘一个(用于制作镜像与迁移Docker)
    • 键盘一个(用于输入命令)
    • 显示屏一个(用于看命令执行状态)
    • 网线一根
    • HDMI线一根
    • 一个有网的路由器
    • 电脑
  • 所需软件

具体步骤

1. 降级关键分区

连接HDMI、网线、电源,你会进入斐讯自带的安卓系统。

安卓系统的标准启动过程如下:

  • bootloader:斐讯针对该盒子硬件实现的类似BIOS的东西,它负责硬件的初始化,最终引导操作系统。
  • boot分区:放着安卓操作系统的内核文件,由bootloader唤起,也就实现了进入操作系统的效果。
  • recovery分区:类似于WinPE的东西,如果boot分区挂了,则可以通过Recovery方式进入一个临时的操作系统,然后恢复boot分区(类似于ghost做系统)。

问题就在于,bootloader是斐讯针对盒子定制的,它设置了一些限制,比如:

  • 只能使用他家的安卓系统
  • 不支持U盘引导操作系统

所以呢,恩山论坛有一位叫做webpad的大神,修改了斐讯的bootloader。

我们要做的,就是把bootloader覆盖到盒子里面去。

webpad提供了工具,大家按照教程与工具:降级教程,通过adb网络连接的方式刷入即可。

一台N1这辈子只需要做一次降级操作,后续不需要再研究这个问题了。

连接USB线刷的方式,除非你想玩电视系统,否则刷Armbian是不需要强制使用的。

制作Armbian U盘

这里提一下,现在N1只在pdd上卖了,如果你买的不是原版系统,基本上都是降级过的,所以上面那一步就可以跳过,直接从这一步开始就行了,所有刷机需要的软件,上面那个所需软件的链接里都有!。

刷armbian的整体逻辑如下:

  • 为了把armbian刷入emmc存储,我们首先得把armbian刷到U盘上,然后通过U盘引导进入armbian系统。
  • U盘进入系统后,我们执行一个命令就可以把armbian系统的boot分区以及rootfs等等都copy到emmc上。
  • 一旦完成emmc刷写,此后bootloader就会直接读emmc中的boot分区,直接引导进入armbian。

首先是选什么版本的Armbian,以及替换哪一个dtb文件,我直接告诉大家结论:Armbian 5.77版本,使用xiangsm的dtb文件,这是目前恩山论坛最新也是最广泛肯定的版本,大家就不要自己再折腾研究了。

至于armbian和dtb分别是什么来头,我简单说明一下:

  • armbian:直接来源于armbian的官方,armbian其实就是debian发行版为arm架构适配后的版本。也就是说,恩山论坛是没有人去改动armbian系统代码的,是非常可靠的。
  • dtb:各种品牌的盒子千千万,每个盒子使用的网卡啊、cpu芯片啊的型号千千万,armbian内核为了能够和这些外设正常工作,就要求提供一种叫做dtb的描述文件,我理解就是针对各个硬件的驱动程序。

为了让斐讯N1的各个硬件可以被armbian正常调度,所以需要给斐讯N1适配一套dtb文件。dtb文件需要随着内核编译,所以不同armbian内核版本必须使用配套的dtb文件。
目前斐讯N1的dtb文件已经被armbian收录到官方源码库里,但是使用的时候linux负载会显示的很高,所以热心网友为armbian5.77编译了一个fix过的dtb文件,在上面那个所需软件的链接里,文件名称为:meson-gxl-s905d-phicomm-n1-xiangsm.dtb

下面开始制作Armbian U盘:

  • 系统烧录到U盘

    打开win32磁盘映像工具,按照下图进行操作(执行此步之前将U盘格式化一下)
    制作armbian-U盘

    写入成功

  • 修改引导DTO
    打开此电脑,找到Boot分区
    修改11
    打开boot分区,找到dto文件夹,将meson-gxl-s905d-phicomm-n1-xiangsm.dtb文件复制到此文件夹下
    修改22
    打开uEnv.ini,在文件第一行添加下面这行命令,保存:

    dtb_name=/dtb/meson-gxl-s905d-phicomm-n1-xiangsm.dtb
    

    修改33

引导从U盘启动

将显示屏和键盘接入N1盒子,执行N1-ADBU盘启动文件夹下的U盘启动.bat,输入N1盒子的IP地址,地址可以从路由器管理界面看到。
u盘启动
脚本执行之后,将U盘插入靠近hdmi的U口里,上电重启,会自动进入U盘系统,在显示屏上可以看到Linxu系统正在启动,最后会在login命令下等待你输入账号密码,默认账号密码是:root/1234
login

输入后会要求提示修改密码,先输入一遍旧密码1234,再输两遍新密码。

密码长度大于8个字符,修改后,提示新建账户,直接按Ctrl+C跳过,再次输入登录。

至此,你就可以用远程连接工具连接N1了。

刷armbian到emmc

执行下面这行命令,它会完成所有刷写emmc所需的事情,完成后halt关机拔掉U盘,所有刷机工作就结束了:

nand-sata-install

其他:如果你想重刷armbian系统,那么还是U盘启动armbian,重新执行nand-sata-install即可完整覆盖掉emmc中的数据。

其他问题

网络分配问题

armbian启动的时候没有等待网卡分配到IP,会导致一些监听网络的程序无法正常工作,需要大家修改一下网卡的模式为auto,即可强制开机等待网络分配(当然太久分配不到也会超时进入系统):

修改/etc/network/interfaces,注释hotplug热插拔模式,换成auto即可:

root@aml:~# cat /etc/network/interfaces
source /etc/network/interfaces.d/*
 
# Wired adapter #1
auto eth0
#allow-hotplug eth0

mac地址变动问题

我在路由器上给N1分配静态IP的时候发现,armbian的有线网卡每次重启后MAC地址都会变,解决方法也不复杂。

打开/etc/network/interfaces文件,在eth0网卡上写死一个mac地址即可:

root@aml:~# cat /etc/network/interfaces
source /etc/network/interfaces.d/*

# Wired adapter #1
allow-hotplug eth0
no-auto-down eth0
iface eth0 inet dhcp
hwaddress 4e:03:88:54:39:93

终端中文问题

发现ssh终端无法显示中文,也无法输入中文,只需要改一下/etc/environment中的LC_ALL

root@aml:~# cat /etc/environment
ARCH=arm64
LC_ALL=”en_US.utf-8″

配置时区

执行armbian-config,选择personal,然后配置Timezone为chongqing即可。

换apt源

编辑/etc/apt/sources.list,使用以下配置替换原来的配置:

deb https://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb https://mirrors.aliyun.com/debian-security stretch/updates main
deb-src https://mirrors.aliyun.com/debian-security stretch/updates main
deb https://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
# deb https://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
# deb-src https://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib

deb [arch=amd64] https://download.docker.com/linux/debian stretch stable
# deb-src [arch=amd64] https://download.docker.com/linux/debian stretch stable

修改完成后,执行以下命令更新:

apt-get update

apt-get upgrade

安装docker

此处有大坑,按照网上已有的教程基本上都安装不成功,换源的教程就是在放屁,我建议大家查看系统的版本,再根据对应的版本进行安装,例如我的N1刷的版本是debian9,那就直接搜debian 9 安装docker即可,不要搜N1安装docker的教程,不会成功的。

具体可参考这篇文章,我就不再赘述了:Debian9安装docker教程

挂载U盘,迁移Docker

可参考此篇文章:N1挂载U盘,迁移Docker

参考文章

N1盒子刷Armbian,看这一篇就够了——Armbian全方位安装指导书

斐讯N1 – 完美刷机Armbian教程

[N1盒子] Armbian-5.77 on N1, so far so good

如何在Debian 9上安装和使用Docker

N1挂载U盘,迁移Docker

n1盒子armbain系统挂载u盘和开机启动挂载