斐讯P1刷armbian变身linux小型服务器

前情提要

斐讯P1即之前的N1天天链矿机,N1翻车后不到一年的时间内被玩机圈硬生生搞成了SBC(单板电脑),玩出了电视盒子、Linux服务器、NAS、路由器等多种花样,连官方也受到启发把N1改头换面成P1电视盒子,线上销售清库存。以70~90的价格来看,这玩意的性价比远超树莓派,300元以性能内无敌手的称号可以说当之无愧。除了没有GPIO,也就是说不能玩嵌入式开发以外,其最大的缺点就是需要折腾,毕竟不是开源硬件,刷机之类的得需要上网多搜搜教程。好在已经有恩山论坛的各种大牛铺路,对于计算机背景的人来说,折腾起来也不算麻烦。在此过程中的一个感受是,不论软件还是硬件,拥抱开源才是正道。

准备

  • 双头USB线一根
  • 降级到2.19的分区固件
  • armbian for Amlogic S905固件
    • 开发者balbes150
    • 下载地址yadi.sk,建议选择5.77(Linux5.0.2内核)版本,5.88及5.89会有wifi无法识别的问题
  • 为N1适配优化的dtb文件(可选)
    • Linux 5.0.2适配版:meson-gxl-s905d-phicomm-n1-xiangsm.dtb,地址
  • adb调试工具
  • u盘及u盘刻录软件

降级

  • N1/P1盒子开机,进入android系统

    • 联网
    • 打开远程调试
  • 电脑端远程降级

    • 解压 adb调试工具

    • 将分区固件 bootloader.img 、boot.img 、 recovery.img 拷贝到 adb所在目录

    • 远程连接盒子,重启进入fastboot模式

      1
      2
      adb connect 192.168.10.127 #盒子ip
      adb shell reboot fastboot
    • 验证设备能够被正常识别

      1
      fastboot devices
    • 刷入降级镜像

      1
      2
      3
      fastboot flash bootloader bootloader.img
      fastboot flash boot boot.img
      fastboot flash recovery recovery.img
    • 重启盒子

      1
      fastboot reboot

      制作armbian启动盘

  • 将armbian for Amlogic S905固件烧入u盘

  • 打开u盘,替换dtb文件(可选,这一步可以在启动armbian之后再执行)

    • 将适配版dtb文件放入/boot/dtb

    • 修改/boot/uEnv.ini文件

      1
      2
      修改前的uEnv.ini:dtb_name=/dtb/meson-gxl-s905x-khadas-vim.dtb
      修改后的uEnv.ini:dtb_name=/dtb/meson-gxl-s905d-phicomm-n1-xiangsm.dtb

      u盘启动armbian

  • N1/P1盒子断电

  • 将启动盘插入N1/P1盒子靠近hdmi口的usb口

  • N1/P1盒子插入电源

  • 初次启动会仍然进入原android系统,这时候仍然采用adb方式远程连接并重启

    1
    2
    adb connect 192.168.1.184
    adb shell reboot update
  • 重启后进入armbian系统,初始登录用户名密码root/1234

armbian常用配置

  • armbian-config 可以用来配置网络、时区、语言、常用软件等内容

  • nmcli 查看/配置网络端口

  • uptime 系统使用状况,如运行时长、负载

  • armbianmonitor -m 实时查看系统负载

  • /etc/update-motd.d/30-armbian-sysinfo查看系统运行情况汇总

  • 解决syslog中每10s出现一次ttyS0服务启动失败的日志

    • systemctl disable serial-getty@ttyS0
    • systemctl stop serial-getty@ttyS0
  • ddbr 备份/恢复emmc写入的系统

  • 手动修改国内源(首选基于自带向导armbian-config修改)

  • /etc/apt/sources.list 将debian的官方源修改为国内源(如mirror.tuna.tsinghua.edu.cn)

  • apt update && apt upgrade

  • 启用bbr

    • /etc/sysctl.conf末尾添加下面两行

      1
      2
      net.core.default_qdisc=fq
      net.ipv4.tcp_congestion_control=bbr
    • sudo sysctl -p

  • 修复静态无线MAC地址

    • 由于所有N1盒子出厂后的无线MAC地址是一样的,所以多个盒子同时连接相同路由器的时候IP相同,可利用脚本进行修复

    • 可以暂时通过配置静态MAC地址的方式解决

      1
      2
      3
      4
      vi /etc/network/interfaces
      allow-hotplug wlan0
      iface wlan0 inet dhcp
      hwaddress ether XX:XX:XX:XX:XX:XX
  • 自动挂载U盘

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    git clone http://github.com/rbrito/usbmount.git
    cd usbmount
    sudo apt-get update && sudo apt-get install -y debhelper build-essential
    sudo dpkg-buildpackage -us -uc -b
    sudo dpkg -i usbmount_0.0.24_all.deb

    # Probably first time also with
    sudo apt-get install lockfile-progs
    sudo apt --fix-broken install

    # Clean
    rm ../usbmount_*

    https://askubuntu.com/questions/1074909/usbmount-fails-to-automount

    将系统刷入emmc

  • 执行lsblk命令查看能否正常识别mmcblk1分区,若不能识别则无法刷入emmc

  • 执行ddbr对emmc上原android系统进行备份,备份文件为/ddbr/BACKUP-s9xxx-emmc.img.gz (文件名可能会因固件版本而异)

  • 执行./root/install.sh命令将u盘中的armbian系统复制到emmc

    • 其中的install脚本可参考MY SCRIPT FOR INSTALLING ARMBIAN 5.67 INTO PHICOMM N1

    • 注意其中最后会将ddbr命令删除,介意者可以注释掉

      1
      2
      3
      4
      rm $DIR_INSTALL/usr/bin/ddbr
      rm $DIR_INSTALL/usr/bin/ddbr_backup_nand
      rm $DIR_INSTALL/usr/bin/ddbr_backup_nand_full
      rm $DIR_INSTALL/usr/bin/ddbr_restore_nand
  • 执行shutdown now关机断电,拔掉u盘后插电即可直接进入armbian

利用ddbr进行系统的备份和恢复

  • ddbr是一个利器,原理上不论是原厂android还是新刷入的armbian系统,只要有其emmc备份文件,就可以直接一键恢复:
    • 仍然通过u盘启动到armbian系统
    • 备份文件必须仍放到原路径下/ddbr/BACKUP-s9xxx-emmc.img.gz
    • ddbr恢复
  • 甚至基于ddbr来进行新盒子的系统刷入也是可行的

运行docker

  • 安装docker

  • 镜像加速
    创建并且编辑配置文件:vi /etc/docker/daemon.json

    1
    2
    3
    4
    5
    6
    7
    {
    "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://f1361db2.m.daocloud.io",
    "https://registry.docker-cn.com"
    ]
    }
  • 安装docker-compose

    1
    2
    3
    4
    5
    sudo apt-get install python3-pip
    sudo apt-get install -y python3-setuptools
    sudo apt-get install python3-dev
    sudo apt-get install libssl-dev
    sudo pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple
  • docker镜像清理

    1
    2
    3
    systemctl stop docker
    rm -rf /var/lib/docker
    systemctl start docker
  • docker开机自启

    1
    sudo systemctl enable docker

安装Aria2和Samba

  • Aria2
1
2
3
4
5
6
7
8
docker run -d \
--restart always \
--name aria2-ui \
-p 8080:8080 \
-v /media/usb:/aria2/data \
-v /media/conf:/aria2/conf \
-e RPC_SECRET=NOBODYKNOWSME \
hurlenko/aria2-ariang
  • samba
1
apt-get install samba
  • 共享文件路径,配置/etc/samba/smb.conf
1
2
3
4
5
6
7
[n1]
path = /media
available = yes
browseable = yes
public = yes
writable = yes
guest ok = yes
  • 给用户设置 Samba 密码
1
smbpasswd -a root
  • 磁盘挂载
1
2
blkid
mount -t ntfs /dev/sdb1 /media/smb
  • 开机自动挂载,配置/etc/fstab
1
UUID=0733-17E8	/media/smb	vfat		defaults,nofail				0 0

参考

扩展