N1盒子初体验(降级+刷armbian)

  |   0 评论   |   16 浏览

背景

在PDD上买了一台N1盒子玩,黑色版本。客服说黑色版本和白色版本硬件是一样的,仅仅是颜色的区别。

上手

本文用到的设备:

  • 蓝牙鼠标(手边刚好一个蓝牙的)
  • HDMI线
  • 显示器
  • 网线:刷armbian后,通过网线远程盒子。

开机,接入HDMI线连接显示器,即可发现,固件版本为 V2.22_0326_NS。

插入鼠标,连接上WIFI,可以直接连接5G WIFI。

连网成功后,mac提示可以隔空播放至“乐投U1”。试了下,确实可以投屏。

降级

打开盒子adb

鼠标点击版本号四次,即可打开盒子adb。

mac安装adb

brew cask install android-platform-tools

或者直接下载包

https://dl.google.com/android/repository/platform-tools_r29.0.5-darwin.zip

下载降级固件

按照论坛上的提示,找到降级固件 https://share.weiyun.com/5vAkZ7p,密码 nzwy53。

N1 三个分区镜像文件是V2.19版本,实测 V2.27、V2.28降级后即可正常线刷

执行降级

# adb 连接盒子
adb connect 盒子的 IP 地址

# 进入 fastboot
adb shell reboot fastboot

# 这里需要使用USB连接盒子
# 刷入 bootloader
fastboot flash bootloader bootloader.img

# 刷入 boot
fastboot flash boot boot.img 

# 刷入 recovery
fastboot flash recovery recovery.img

# 重启 fastboot
fastboot reboot

结果

note@abeffect % N1_V2.19_imgs % fastboot flash bootloader bootloader.img
Sending 'bootloader' (656 KB)                      OKAY [  0.041s]
Writing 'bootloader'                               OKAY [  0.038s]
Finished. Total time: 0.090s

note@abeffect % N1_V2.19_imgs % fastboot flash boot boot.img
Sending 'boot' (13858 KB)                          OKAY [  0.673s]
Writing 'boot'                                     OKAY [  0.588s]
Finished. Total time: 1.271s

note@abeffect % N1_V2.19_imgs % fastboot flash recovery recovery.img
Sending 'recovery' (17866 KB)                      OKAY [  0.864s]
Writing 'recovery'                                 OKAY [  0.770s]
Finished. Total time: 1.653s

note@abeffect % N1_V2.19_imgs % fastboot reboot
Rebooting                                          OKAY [  0.001s]
Finished. Total time: 0.001s

由于上面降级仅覆盖了boot分区,所以重启后,显示的系统版本号还是原来的版本号,不会有变化。

刷机

下载刷机镜像

稳定版本:Armbian_5.99_Aml-g12_Debian_buster_default_5.3.0_20191125。地址见本文末尾的参考中。

其中 buster 是 debian 10的代号,5.3.0是内核版本,20191125是编译日期。

制作刷机U盘

  1. 下载一个制作启动盘的工具rufus

  2. windows下用rufus将下载好的 Armbian_5.99_Aml-g12_Debian_buster_default_5.3.0_20191125.img.xz 刻录到U盘中。

linux下用 xz -cd Armbian_5.99_Aml-g12_Debian_buster_default_5.3.0_20191125.img.xz > /dev/sda来刻录到U盘中。

成功后,U盘上会有两个分区。一个较小的BOOT分区,格式是FAT,一个较大的ROOTFS分区,格式是ext4。

  1. 编辑 BOOT分区上的 uEnv.ini 文件

修改第一行,将路径的文件名替换为meson-gxl-s905d-phicomm-n1.dtb,即指定从U盘启动。

使用U盘启动

两种方法:

方法一:
在断电的情况下,插入U盘启动到离HDMI口近的那个USB口上,然后通电。

方法二:

不断电,插入U盘启动到离HDMI口近的那个USB口上,然后在mac上执行

adb shell reboot update

成功后,可以看到重启后,直接进入了熟悉的 linux 启动页面。

在U盘系统中安装系统到盒子

在路由器中找到aml的IP地址。

第一次没有插网线,无法远程上机器。找了根网线后,在路由器页面中可以看到名为 aml的设备,即通过U盘引导的盒子。

远程连接

默认账号为 root/1234,进去后需要立即改密码,然后按 Ctrl + C跳过新建用户。

备份原系统(留一手,这样出错了还可以恢复)

ddbr -> b -> y -> y

详情如下:

root@aml:~# ddbr
 DO YOU WANT TO BACKUP OR RESTORE ?
 BACKUP=(b) RESTORE=(r) b
 AVAILABLE DEVICES: mmcblk1 sda1 sda2
 YOU ARE RUNNING buster FROM sda2
 INTERNAL EMMC IS: mmcblk1 SIZE:	7634944
 ROOT (sda2) FREE SPACE IS:		13653460
 DO YOU WANT COMPRESSION ?
 YES=(y) NO=(n) y
 SAVING AND COMPRESSING mmcblk1 TO /ddbr/BACKUP-s9xxx-emmc.img.gz...
1.67GiB 0:03:59 [4.01MiB/s] [=========>                                    ] 22% ETA 0:13:24
7.28GiB 0:09:24 [13.2MiB/s] [==============================================================================>] 100%
15269888+0 records in
15269888+0 records out
7818182656 bytes (7.8 GB, 7.3 GiB) copied, 564.043 s, 13.9 MB/s
 JOB FINISHED!

确认备份成功

root@aml:/ddbr# ls -lh /ddbr/BACKUP-s9xxx-emmc.img.gz
-rw-r--r-- 1 root root 584M Mar 28 16:58 /ddbr/BACKUP-s9xxx-emmc.img.gz

将备份文件,自行复制出来,放到一个安全的地方。如果将来需要恢复备份,则重新进入U盘,执行

ddbr -> r -> y -> y

安装armbian到盒子中

  1. 查看分区
root@aml:/ddbr# lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda            8:0    1  14.9G  0 disk
├─sda1         8:1    1   128M  0 part /boot
└─sda2         8:2    1  14.6G  0 part /
mmcblk1      179:0    0   7.3G  0 disk
mmcblk1boot0 179:32   0     4M  1 disk
mmcblk1boot1 179:64   0     4M  1 disk
zram0        253:0    0    50M  0 disk /var/log
zram1        253:1    0 901.1M  0 disk [SWAP]

其中可见有mmcblk1,即emmc分区,才可以安装。

  1. 安装
cd ~
./install.sh // 老版本安装命令
./install-aml.sh // 新版本安装命令
poweroff // 关机

结果

Start script create MBR and filesystem
/dev/mmcblk1
Start backup u-boot default
4+0 records in
4+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.14997 s, 28.0 MB/s
Start create MBR and partittion
Start restore u-boot
442+0 records in
442+0 records out
442 bytes copied, 0.00434992 s, 102 kB/s
8191+0 records in
8191+0 records out
4193792 bytes (4.2 MB, 4.0 MiB) copied, 0.368898 s, 11.4 MB/s
Done
Start copy system for eMMC.
Formatting BOOT partition...mkfs.fat 4.1 (2017-01-24)
done.
Cppying BOOT...done.
Edit init config...done.
Formatting ROOT partition...
e2fsck 1.44.5 (15-Dec-2018)
ROOT_EMMC: clean, 11/427392 files, 50723/1706240 blocks
done.
Copying ROOTFS.
Copy BIN
Create DEV
Copy ETC
Copy HOME
Copy LIB
Create MEDIA
Create MNT
Copy OPT
Create PROC
Copy ROOT
Create RUN
Copy SBIN
Copy SELINUX
Copy SRV
Create SYS
Create TMP
Copy USR
Copy VAR
Copy fstab
*******************************************
Complete copy OS to eMMC
*******************************************
  1. 断电,拔U盘,然后通电,从eMMC引导。

系统调优

设置时区

armbian-config --> personal --> Timezone --> Asia -->  Shanghai

确认修改生效了

root@aml:~# ls -ld /etc/localtime
lrwxrwxrwx 1 root root 33 Mar 29 01:24 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai

设置软件源

armbian-config --> personal --> Mirror --> China

然后修改文件 /etc/apt/sources.list,将

deb http://httpredir.debian.org/debian buster main contrib non-free
#deb-src http://httpredir.debian.org/debian buster main contrib non-free

deb http://httpredir.debian.org/debian buster-updates main contrib non-free
#deb-src http://httpredir.debian.org/debian buster-updates main contrib non-free

deb http://httpredir.debian.org/debian buster-backports main contrib non-free
#deb-src http://httpredir.debian.org/debian buster-backports main contrib non-free

deb http://security.debian.org/ buster/updates main contrib non-free
#deb-src http://security.debian.org/ buster/updates main contrib non-free

改为

deb http://mirrors.tuna.tsinghua.edu.cn/debian buster main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian buster-updates main contrib non-free
deb http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free

连接WIFI

  1. 用命令行直接连接WIFI
# 设置配置文件
wpa_passphrase wifi名称 wifi密码 >> /etc/wpa_supplicant/wpa_supplicant.conf

# 加载配置文件
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B

# 自动获取ip
dhclient wlan0
  1. 使用nmtui设置wifi

nmtui --> Edit a connection --> Add --> Wi-Fi --> 填写对应的设置即可

  1. 如果2不行的话,最后的方法。

我这里先使用了3,再做了2,后来把3去掉了,重启后也是可以工作的。

启动自动连接WIFI,临时解决方案:在/etc/rc.local中增加下面内容

ifconfig wlan0 up
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
dhclient wlan0

load为2

原因为网卡驱动问题,将有线网络禁用掉 ifconfig eth0 down即可正常。

彻底解析需要修改dtb。

  1. 反编译dtb -> dts

启动时的dtb文件为/boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb

执行反编译,如下,这些Warning可以忽略 。

dtc -I dtb -O dts -o n1.dts /boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb
n1.dts: Warning (unit_address_vs_reg): /scpi/clocks/scpi_clocks@0: node has a unit name, but no reg property
n1.dts: Warning (unit_address_vs_reg): /soc/bus@c8100000/pinctrl@14: node has a unit name, but no reg property
n1.dts: Warning (unit_address_vs_reg): /soc/periphs@c8834000/rng: node has a reg or ranges property, but no unit name
n1.dts: Warning (unit_address_vs_reg): /soc/periphs@c8834000/pinctrl@4b0: node has a unit name, but no reg property
n1.dts: Warning (unit_address_vs_reg): /soc/periphs@c8834000/eth-phy-mux: node has a reg or ranges property, but no unit name
n1.dts: Warning (unit_address_vs_reg): /soc/usb@c9000000: node has a unit name, but no reg property
n1.dts: Warning (unit_address_vs_reg): /sound/simple-audio-card,dai-link@0: node has a unit name, but no reg property
n1.dts: Warning (unit_address_vs_reg): /gpio-keys-polled/button@0: node has a unit name, but no reg property
n1.dts: Warning (avoid_unnecessary_addr_size): /gpio-keys-polled: unnecessary #address-cells/#size-cells without "ranges" or child "reg" property
  1. 修改dts文件

修改n1.dts文件,注释掉212行,改为如下所示:

 205       interrupt-controller@9880 {
 206         compatible = "amlogic,meson-gpio-intc\0amlogic,meson-gxl-gpio-intc";
 207         reg = < 0x00 0x9880 0x00 0x10 >;
 208         interrupt-controller;
 209         #interrupt-cells = < 0x02 >;
 210         amlogic,channel-interrupts = < 0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47 >;
 211         status = "okay";
 212         #phandle = < 0x21 >;
 213       };
  1. 编译 dts --> dtb

按下面命令编译dtb,忽略掉Warning:

dtc -I dts -O dtb -o n1.dtb n1.dts
  1. 将dtb复制到/boot/dtb中
cp n1.dts /boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1-new.dtb

查看一下变化

root@aml:/boot# ls -ld /boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1*
-rwxr-xr-x 1 root root 27175 Mar 29 01:10 /boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb
-rwxr-xr-x 1 root root 27184 Mar 29 14:58 /boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1-new.dtb
  1. 修改uEnv.ini,重新启动。

修改uEnv.ini,指向新的dtb文件,如下:

root@aml:/boot# head uEnv.ini
dtb_name=/dtb/amlogic/meson-gxl-s905d-phicomm-n1-new.dtb
bootargs=root=LABEL=ROOT_EMMC rootflags=data=writeback rw console=ttyAML0,115200n8 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0

重新启动

root@aml:~# reboot

未解决的问题

emmc只读

emmc卡的读写能力不行,读写快了会变成只读系统。

桌面

安装一个桌面

armbian-config --> System --> Default

按提示,会先创建一个普通用户。

然后按提示,会安装共至少700+个软件包。

安装结束后,即可看见久违的桌面。

参考