前言

  • 抄一份以防以后需要
  • 我刷的时候没像他这么麻烦,也没这么多问题,仅供参考啦 ~

Ref: https://qiuzhong.fun/archives/n1

准备

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

操练

降级关键分区

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

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

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

    • 只能使用他家的安卓系统
    • 不支持 U 盘引导操作系统
  4. 所以呢,恩山论坛有一位叫做 webpad 的大神,修改了斐讯的 bootloader。所以呢,恩山论坛有一位叫做 webpad 的大神,修改了斐讯的 bootloader。

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

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

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

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

Armbian 和 DTB

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

  1. 刷 armbian 的整体逻辑如下:
    1. 为了把 armbian 刷入 emmc 存储,我们首先得把 armbian 刷到 U 盘上,然后通过 U 盘引导进入 armbian 系统。
    2. U 盘进入系统后,我们执行一个命令就可以把 armbian 系统的 boot 分区以及 rootfs 等等都 copy 到 emmc 上。
    3. 一旦完成 emmc 刷写,此后 bootloader 就会直接读 emmc 中的 boot 分区,直接引导进入 armbian。
  2. 首先是选什么版本的 Armbian,以及替换哪一个 dtb 文件,我直接告诉大家结论:Armbian 5.77 版本,使用 xiangsm 的 dtb 文件,这是目前恩山论坛最新也是最广泛肯定的版本,大家就不要自己再折腾研究了。
  3. 至于 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盘

  1. 系统烧录到 U 盘

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

  2. 修改引导 DTO

    1. 打开此电脑,找到 Boot 分区修改11

    2. 打开 boot 分区,找到 dto 文件夹,将 meson-gxl-s905d-phicomm-n1-xiangsm.dtb 文件复制到此文件夹修改22

    3. 打开 uEnv.ini,在文件第一行添加下面这行命令,保存:

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

      修改33

引导从 U 盘启动

  1. 将显示屏和键盘接入 N1 盒子,执行 N1-ADBU盘启动 文件夹下的 U盘启动.bat,输入 N1 盒子的 IP 地址,地址可以从路由器管理界面看到。u盘启动
  2. 脚本执行之后,将U盘插入靠近 hdmi 的 U 口里,上电重启,会自动进入U盘系统,在显示屏上可以看到 Linxu 系统正在启动,最后会在 login 命令下等待你输入账号密码,默认账号密码是:root/1234login
  3. 输入后会要求提示修改密码,先输入一遍旧密码 1234,再输两遍新密码。
  4. 密码长度大于 8 个字符,修改后,提示新建账户,直接按 Ctrl+C 跳过,再次输入登录。
  5. 至此,你就可以用远程连接工具连接 N1 了。

刷 Armbian到 EMMC

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

1
nand-sata-install

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

其他问题

网络分配问题

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

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

    1
    2
    3
    4
    5
    6
    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 地址即可:

1
2
3
4
5
6
7
8
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

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

配置时区

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

换 apt 源

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

1
2
3
4
5
6
7
8
9
10
11
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

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

1
2
3
apt-get update

apt-get upgrade