N1 备份 + 刷机 + 安装 Armbian


折腾 1645 阅 18 评

大部分细节内容被精简,描述不会太详细,仅为内容记录。

一、准备

  • 网线
  • PC + N1
  • 键盘(备用)
  • 双公头 usb 线
  • HDMI 线 + 显示器

二、注意事项

  • 任何情况都不要把做好的 Armbian 系统 U 盘插入盒子自带的 Android 系统,否则该 U 盘镜像权限会被更改,并且创建很多文件/夹。
  • 查看盒子 lan 和 wlan、蓝牙 MAC 地址,后期会被恢复系统等操作更改,以防那些强迫症。

三、降级

  1. 连接盒子。
    ① 插电、网线、双公头线 usb + HDMI(显示器)
    ② adb 连接 N1(IP 地址会在 HDMI 屏幕显示)

    adb connect 192.168.0.92:5555
    
    * daemon not running; starting now at tcp:5037
    * daemon started successfully
    connected to 192.168.0.92:5555
  2. 切换到线刷模式

    adb reboot fastboot
  3. 确认设备状态

    fastboot devices
    # 输入后显示一串序列号。如无法识别,win10 在设备管理器,右键该设备自动更新安装即可。
  4. 刷入各降级分区(2.19 版本提取)

    fastboot flash bootloader bootloader.img
    fastboot flash boot boot.img
    fastboot flash recovery recovery.img
  5. 重启设备,正常开机一次

    fastboot reboot
  6. kill 掉 adb 服务(可选)

    adb kill-server

四、准备 Armbian

先备份原系统,再把 Armbian 刷入 eMMC 分区脱离 U 盘引导。
  1. 制作 U 盘 Armbian 镜像

    1.当前选择 Armbian_20.07_Arm-64_buster_current_5.7.9.img.xz。
    2.使用 rufus 刻录 U 盘,成功后电脑会显示 boot 分区。
    3.配置 uEnv.ini 修改 aml s9xxx 段:meson-gxl-s905d-phicomm-n1.dtb,这是针对 N1 的启动参数(类似驱动和硬件引导信息)其它注释掉或删除。
    4.某版本开始内置斐讯 dtb,负载数值显示最低为 2.0,需反编译+修改打包才正常(仅显示问题,不影响使用)。
  2. 进入 U 盘系统(两种方法)
    方法 1:执行命令,立刻把 U 盘插入 usb 口

    adb shell reboot update

    方法 2:关机状态插好 U 盘,上电开机自动引导,也可能会失败,如失败马上拔掉 U 盘。

  3. 接下来在 U 盘系统操作

    1.进入 Armbian 系统后,等待三分钟,即可远程通过 SSH 操作。
    2.SSH:IP 通过路由器查看,用户 root,密码 1234
    3.重复老密码
    4.新密码
    5.重复新密码
    6.按下 Ctrl+C 跳过新建用户
    7.使用 root 登陆
    
    # 20.07 新版本会自动检测设置时区,localtion 选择 zh_CN.UTF-8 支持中文,建议默认 en_US.UTF-8 英文。
    #
    # 检查 U 盘目录全是 root 权限才行。如发现多出 Android 文件夹,必须重做 U 盘。
    ls -l /
  4. 备份原盒子系统(重要

    1.开始备份,输入命令顺序
    ddbr -> b -> y -> y
    =====================
    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:             13179140
    DO YOU WANT COMPRESSION ?
    YES=(y) NO=(n) y
    SAVING AND COMPRESSING mmcblk1 TO /ddbr/BACKUP-s9xxx-emmc.img.gz...
    3.01GiB 0:09:08 [7.21MiB/s] [============>                     ] 40% ETA 0:12:59
    
    2.确认备份
    cd /ddbr && ls -lht
    -rw-r--r-- 1 root root 613M Jul 10 15:26 BACKUP-s9xxx-emmc.img.gz
    
    # 提取备份(在 U 盘系统 /ddbr 目录里)。
    # 可以通过 FlashFXP 或 WinSCP 下载到本地。
    
    3.恢复备份(测试通过),重新进入 U 盘系统执行
    ddbr -> r -> y -> y

    SSH 需要 IP 地址,如何获取?SSH 直接输入:

    - ifconfig eth0 | grep -w inet | awk '{print $2}'
    - 路由器后台
    - ip add 查看 eth0
    - ifconfig eth0
    - nslookup aml / nslookup amlogic (win 命令,版本更新导致失效)
    - 如果获取不到 IP 检查网口,网线。
    - 如果获取到 IP 无法联网,手动给盒子设置 DNS。
  5. 安装 Armbian
    注意:刷入 eMMC 内置分区,需了解利弊再操作!当然,前面备份好 eMMC 分区系统想怎么折腾都行。

    lsblk                        # 查看是否有 mmcblk1,看不到 emmc 分区会刷入失败。
    
    cd ~ && ls                   # 查看具体刷机脚本
    ./nand-sata-install          # 安装命令,更老
    ./install.sh                 # 安装命令,2019 前老版
    ./install-aml.sh             # 安装命令,2020 年初版
    ./install-aml-s905-emmc.sh   # 安装命令,该脚本会出现变砖现象,卡 logo 现象,原因是替换了独立 u-boot-s905.img
    poweroff                     # 刷完执行,避免拔电丢失配置
完成以上五个步骤后,断电、拔 U 盘,上电即可引导盒子 eMMC 分区 Armbian 系统。

五、优化处理

可以在进 U 盘系统时优化好,装到 eMMC 分区就是优化过的系统。
  1. MAC 地址随机变动解决:

    # 修改 /etc/network/interfaces 添加:
    # 2选1
    # 
    # Wired adapter #1
    allow-hotplug eth0
    no-auto-down eth0
    iface eth0 inet dhcp
    hwaddress FC:xx:xx:xx:xx:xx
    
    # 或修改 uEnv.ini 添加:
    ethaddr=FC:xx:xx:xx:xx:xx
  2. SSH 无法显示和输入中文(可选):

    nano /etc/environment
    ARCH=arm64
    LC_ALL=″en_US.utf-8″
    
    # 生效
    source /etc/environment
  3. 设置时区 x2:

    [2选1]
    1. armbian-config => personal => Timezone => Asia =>  Shanghai
    2. rm -rf /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  4. 国内 Debian+Armbian 源,需修改两个位置

    1.执行 armbian-config,选择 personal,选择 Mirror China。
    
    # 等于修改 /etc/apt/sources.list.d/armbian.list
    # mirrors.tuna.tsinghua.edu.cn/armbian
    
    2.快速修改:
    mv /etc/apt/sources.list /etc/apt/sources.list.bak
    
    cat >> /etc/apt/sources.list  << EOF
    # Debian 10
    deb <https://mirrors.tuna.tsinghua.edu.cn/debian/> buster main contrib non-free
    deb <https://mirrors.tuna.tsinghua.edu.cn/debian/> buster-updates main contrib non-free
    deb <https://mirrors.tuna.tsinghua.edu.cn/debian/> buster-backports main contrib non-free
    deb <https://mirrors.tuna.tsinghua.edu.cn/debian-security> buster/updates main contrib non-free
    EOF
    
    # 执行 apt update && apt upgrade -y
    # 最后 reboot
    # 更多国内源:<https://leeyr.com/post/105.html>
  5. 连接 WiFi:
    部分 2.4GHz 信号无法显示,只能找到 5GHz。(偶尔又能显示,但信号差断流)

    # 执行
    armbian-config(或 nmtui)
    # 选择
    network -> wlan0
    选择 wifi 输入密码
  6. 当 Activate a connection 没有 WiFi 选项,开启模块:

    # 某些版本无法操作。
    modprobe dhd && echo dhd >> /etc/modules
    modprobe wifi_dummy && echo wifi_dummy >> /etc/modules
  7. 关闭/打开/扫描 WiFi:

    nmcli radio wifi off
    nmcli radio wifi on
    iwlist wlan0 scan
  8. 系统负载监测:

    armbianmonitor -m
    
    # 写入日志文件(持续)
    armbianmonitor -m > ~/monitor.log &
  9. 挂载 NTFS:

    apt install ntfs-3g
    mkdir /mnt/Disk
    mount -t ntfs-3g /dev/sda1 /mnt/Disk
    # 编辑 fstab
    #/dev/sda1 /mnt/Disk ntfs defaults 0 0
    #/dev/sda1 /mnt/Disk ext4 defaults 0 0
    # 执行 mount -a
  10. 挂载 U 盘:

    fdisk -l                        # 查看磁盘情况
    
    # 快速
    mkfs.ext4 /dev/sda              格式化成 ext4
    mkdir /mnt/usb
    mount /dev/sda /mnt/usb
    sed -i '/exit 0/i\\mount /dev/sda /mnt/usb' /etc/rc.local
    #########################################################
    # 普通方式
    parted /dev/sda                 # 在 /dev/sda 分区操作 parted 工具
    $(parted) mklabel gpt           # 设置分区格式,操作 Ignore->yes
    $(parted) mkpart logical 0 -1   # 设置逻辑分区,操作 Ignore
    $(parted) print
    $(parted) quit
    mkfs.ext4 -F /dev/sda1          # 格式化分区 sda1 为 ext4
    ---------------------------------------------------------
    mkdir /mnt/usb                  # 创建目录供挂载使用
    mount -v /dev/sda1 /mnt/usb     # 挂载 U 盘
    df -h                           # 查看挂载状态
    umount -v /dev/sda1             # 解除挂载
    cd ../..                        # 设备忙无法卸载才使用
    
    # 对分区进行操作
    #fdisk /dev/sda
  11. 安装 samba:

    apt update
    apt install samba samba-common -y
    # 提示 Modify smb.conf to use WINS settings from DHCP?
    # 选择 YES
    # <https://www.linuxquestions.org/questions/linux-software-2/samba-profiles-and-wins-608694/>
    
    cp -pf /etc/samba/smb.conf /etc/samba/smb.conf.bak
    
    nano /etc/samba/smb.conf
    ##########################
    [N1]
    comment = N1 共享
    available = yes
    browseable = yes
    create mode = 0664
    directory mmode = 0775
    force create mode = 0775
    force directory mode = 0775
    path = /media/C/SMB
    public = yes
    read only = no
    writable = yes
    # 高级玩法 <https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html>
    
    # 授权
    #chmod 777 -R /mnt/usb
    service smbd restart
    
    # 此时可读可写,完成安装。
    # <https://www.techrepublic.com/article/how-to-set-up-quick-and-easy-file-sharing-with-samba/>
    
    # 修复 Samba 安装
    sudo apt remove --purge samba samba-* -y
    sudo apt autoremove -y
    apt install samba -y
  12. Read only filesystem 解决方法(未测试):

    # 运行
    e2fsck /dev/mmcblk1p2
    
    # 修改
    install-aml.sh
    parted -s "${DEV_EMMC}" mkpart primary fat32 700M 828M
    parted -s "${DEV_EMMC}" mkpart primary ext4 829M 100%
    
    # 改成
    parted -s "${DEV_EMMC}" mkpart primary fat32 1024M 1152M
    parted -s "${DEV_EMMC}" mkpart primary ext4 1153M 100%
    
    # 验证方式
    sync
    echo s >/proc/sysrq-trigger
    echo u >/proc/sysrq-trigger
    fsck.ext4 -fvy /dev/mmcblk1p2
  13. 实时查看温度,CPU 使用率,任务详情,Kill 进程:

    htop

    高级监控 Zabbix:https://www.cnblogs.com/clsn/p/7885990.html

  14. 查看 CPU 支持的指令集

    cat /proc/cpuinfo
  15. 无法获取 IP 相关问题解决:

    • 可能的原因:两端网口状态不一,自动协商不生效,导致网络问题。
    • 目前发现和 DTB 无关。
    • 使用 Padavan 新版本且 LAN 口为百兆,有一定概率会发生。
    • 可能和 Armbian 版本有关,第三方固件可能在自编译前被修复。
    • 解决办法1:
    # Wired adapter #1
    auto eth0
    #allow-hotplug eth0
    • 解决办法2:
    Padavan => 内部网络 (LAN) => 以太网交换机 => 速度和双工模式:选择 <100 Mbps, Full 或 Half Duplex: [AN]>
    
    注:设置完 N1 立刻会获取到 IP。
  16. 修复 N1 连接千兆路由只显示百兆。需了解各个参数谨慎操作,不然盒子失联需重装系统或接显示器在可视化下恢复。

    # 查看修改前信息
    ------------
    ethtool eth0
    
    # 快速修改
    ethtool -s eth0 speed 1000 duplex full autoneg off
    
    参数:
    - eth0      网卡
    - speed     速率
    - duplex    双工模式:full-全双工,half-半双工
    - autoneg   自动协商
    
    # 查看修改后信息
    ethtool eth0
  17. 修复无线原始 mac 地址,脚本:

    20.07+ 可能不适用!
    #!/bin/bash
    
    #update:2019-11-11
    #author:alon2000
    
    #LAN_MAC=`ifconfig eth0 | grep -w ether | awk '{print $2}'`
    LAN_MAC=`cat /sys/class/net/eth0/address`
    MAC_HEAD=`echo $LAN_MAC|cut -c1-15`
    MAC_TAIL=`echo $LAN_MAC|cut -c16-17`
    MAC_TAILn=$((16#${MAC_TAIL}-1))
    
    WLAN_MAC="$(printf '%s%02x\\n' $MAC_HEAD $[MAC_TAILn])"
    
    if [[ -f "/lib/firmware/brcm/brcmfmac43455-sdio.phicomm,n1.txt" ]] ; then
    sed -i -e "s/^macaddr=b8:27:eb:74:f2:6c$/macaddr=$WLAN_MAC/" \\
    "/lib/firmware/brcm/brcmfmac43455-sdio.phicomm,n1.txt"
    fi
    
    if [[ -f "/lib/firmware/brcm/brcmfmac43455-sdio.txt" ]] ; then
    sed -i -e "s/^macaddr=b8:27:eb:74:f2:6c$/macaddr=$WLAN_MAC/" \\
    "/lib/firmware/brcm/brcmfmac43455-sdio.txt"
    fi
    
    "WiFi MAC address modified successfully! reboot..."
    reboot
  18. 修复 SSH 登陆不显示温度

    老版本

    ln -s /sys/devices/virtual/thermal/thermal_zone0/temp /etc/armbianmonitor/datasources/soctemp

    新版本

    cd /etc/update-motd.d
    wget https://raw.githubusercontent.com/150balbes/Build-Armbian/master/packages/bsp/common/etc/update-motd.d/10-armbian-header
    wget https://raw.githubusercontent.com/150balbes/Build-Armbian/master/packages/bsp/common/etc/update-motd.d/30-armbian-sysinfo
    wget https://raw.githubusercontent.com/150balbes/Build-Armbian/master/packages/bsp/common/etc/update-motd.d/35-armbian-tips
    wget https://raw.githubusercontent.com/150balbes/Build-Armbian/master/packages/bsp/common/etc/update-motd.d/40-armbian-updates
    wget https://raw.githubusercontent.com/150balbes/Build-Armbian/master/packages/bsp/common/etc/update-motd.d/41-armbian-config
    wget https://raw.githubusercontent.com/150balbes/Build-Armbian/master/packages/bsp/common/etc/update-motd.d/98-armbian-autoreboot-warn
    wget https://raw.githubusercontent.com/150balbes/Build-Armbian/master/packages/bsp/common/etc/update-motd.d/99-armbian-point-to-faq
    
    chmod u+x *
    reboot
    
    # <https://github.com/150balbes/build/tree/master/packages/bsp/common/etc/update-motd.d>
    # 可能是卸载 python 造成 armbian-config 依赖丢失,重新安装 armbian-config。
    # htop 界面不显示温度,暂时没有解决办法。
  19. 美化 SSH

    # Logo
    /etc/armbian-release=>BOARD_NAME="仅限英文"
    
    # 汉化
    /etc/update-motd.d/30-armbian-sysinfo
  20. 注释任务

    nano /etc/cron.d/armbian-truncate-logs
    -----------------------------------------
    #*/15 * * * * root /usr/lib/armbian/armbian-truncate-logs
    
    nano /etc/cron.daily/armbian-ram-logging
    -----------------------------------------
    #/usr/lib/armbian/armbian-ramlog write >/dev/null 2>&1

六、编译 dtb

说明:
dtb => 设备树二进制 Device Tree Binary(Blob?)
dts => 设备树源码 Device Tree Source
目前暂时适合任意版本。

先安装

apt install device-tree-compiler
  1. 反编译 dtb => n1.dts

    # 旧版本(5.98 之前)
    
    cd /boot/
    dtc -I dtb -O dts -o n1.dts meson-gxl-s905d-phicomm-n1.dtb
    
    # 新版本(5.98 之后)
    
    cd /boot/dtb/amlogic/
    dtc -I dtb -O dts -o n1.dts meson-gxl-s905d-phicomm-n1.dtb
  2. 编辑 n1.dts 代码

    # 编辑 *.dts
    nano n1.dts
    
    bus@c1100000 {
    compatible = "simple-bus";
    reg = < 0x00 0xc1100000 0x00 0x100000 >;
    #address-cells = < 0x02 >;
    #size-cells = < 0x02 >;
    ranges = < 0x00 0x00 0x00 0xc1100000 0x00 0x100000 >;
    
    interrupt-controller@9880 {
        compatible = "amlogic,meson-gpio-intc\\0amlogic,meson-gxl-gpio-intc";
        reg = < 0x00 0x9880 0x00 0x10 >;
        interrupt-controller;
        #interrupt-cells = < 0x02 >;
        amlogic,channel-interrupts = < 0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47 >;
        status = "okay";
        #phandle = < 0x1e >; // 旧版本(5.98 之前)
        #phandle = < 0x21 >; // 新版本(5.98 之后)
    };
    };
  3. 打包 n1.dts => n1.dtb

    dtc -I dts -O dtb -o n1.dtb n1.dts
    rm n1.dts
  4. 后修改 uEnv.ini 文件对应 dtb 名字。

    FDT=/dtb/amlogic/n1.dtb
  5. 重启

    reboot
  6. 深入 DTB

    • linux设备树笔记--dts基本概念及语法
    • Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)
    • Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)
    • Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953实例分析篇)
    • https://blog.csdn.net/radianceblau/article/details/70800076
  7. DTB 对应版本(可忽略,或许会有些出入)

    • Amlogic S905 = p200/p201
    • Amlogic S905X = p212
    • Amlogic S905D = p230/231
    • Amlogic S905W = p281
    • Amlogic S912 = q200/q201
  8. 存在问题:内存只有 1.8 GB,剩余 200MB 消失,未影响使用不深入研究:

    linux,cma {
         compatible = "shared-dma-pool";
         reusable;
         size = < 0x00 0x38000000 >;
         alignment = < 0x00 0x400000 >;
         linux,cma-default;
     };
    
    # 学习资料:<http://www.wowotech.net/memory_management/cma.html>

七、其它

1.内核更新
https://apt.armbian.com/pool/main/l/ (搜索 aml)

2.Armbian 镜像

https://yadi.sk/d/_rQgn_FosYuW0g

备份
https://mega.nz/#F!fotgQS6J
https://loksado.com/2020/02/download-armbian-linux-untuk-hg680p-dan-b860h-amlogic-s905-p212/

3.Armbian 更新日志

4.adb 工具

5.其它固件

6.跑个分

# 单核

openssl speed md5 sha1 sha256 sha512 des des-ede3 aes-128-cbc aes-192-cbc aes-256-cbc rsa2048 dsa2048

# 四核 -> 参数 -multi 4

openssl speed -multi 4 md5 sha1 sha256 sha512 des des-ede3 aes-128-cbc aes-192-cbc aes-256-cbc rsa2048 dsa2048

7.镜像定制
https://forum.xda-developers.com/android-stick--console-computers/amlogic/opensource-amlogic-tools-t3786991

8.如何救砖
https://www.right.com.cn/forum/thread-362781-1-1.html

9.如何把 N1 搞坏
https://www.right.com.cn/forum/thread-627425-3-1.html

更新

2020-9-15
针对新版本Armbian_20.08-20200814引导方式:
1.修改 ~/boot/extlinux/extlinux.conf,指定为 ~/boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb,其它删除。
2.修改根目录文件:斐讯 N1 使用 u-boot-s905x-s912 改为 u-boot.ext

s905 (not X)    - used u-boot-s905
s905x and s912  - used u-boot-s905x-s912
s905x2 and s922 - used u-boot-s922

2021-01-03
从Armbian_20.11开始,balbes150已经移除关于s905*的dtb支持,最后版本为Armbian_20.10。

For all. I don't support s905x3. I don't have this equipment. All messages about this platform deleted. What works or doesn't work from this equipment - I don't know. I do not give any answers or comments on the s905x3 chip.

2024-7-26
最新 s905d 固件:

编译/介绍
https://github.com/ophub/amlogic-s9xxx-armbian/blob/main/README.cn.md

下载搜索关键字 amlogic_s905d
https://github.com/ophub/amlogic-s9xxx-armbian/releases

Default username: root
Default password: 1234

更新 2024-07-26
评论 ( 18 )
私信
pic
code
pre
  1. S805玩客云

    博主有没有遇到过HDMI口不显示的情况?一直正常显示,断电后HDMI口就没有显示了,SSH还是可以正常登陆的。重新用img镜像再做一个系统就可以正常显示?求解方法思路.....

    4 年前 回复
  2. oo

    samba为什么要运行这一步啊
    chmod 777 -R /mnt/usb

    4 年前 回复
    1. @oo

      能正常访问自定路径的可以忽略这步。

      4 年前 回复
  3. soulboy

    博主能提供一下,emmc安装脚本吗。

    4 年前 回复
    1. @soulboy

      写 U 盘镜像,启动后在 root 根目录提取。

      4 年前 回复
  4. 刷了无数次,就是不能启动,停在alert!label=rootfs doesnot exist. Dropping to a shell. 换了个TF卡刷,可以正常启动,但说需要尽快重启,但重启后又不进不去...怀疑部分U盘就是不行,但同一个U盘刷小钢炮没问题.....

    4 年前 回复
    1. @Aaron

      刷的 armbian?DTB 用的是哪个? ini 文件修改了吗?测试三个 U 盘均成功。

      4 年前 回复
      1. @一記

        刷你提供的,dtb也是,ini修改了。最后我找了一个128G的TF卡成功了。谢谢!
        其实之前刷了好多版本,5.77,5.88等等好多个,我怀疑就是U盘问题。

        4 年前 回复
  5. ayabrea

    感谢博主分享

    4 年前 回复
  6. lw886

    感谢楼主分享

    4 年前 回复
  7. erlingsiyi

    Armbian_5.99_Aml-g12_Debian_buster_default_5.3.0_20191122
    这个版本的刷到U盘以后,开机无法启动是什么原因导致的

    4 年前 回复
    1. @erlingsiyi

      检查 DTB

      4 年前 回复
  8. matsu

    貌似官方已经把所有旧的固件全都删除了...

    4 年前 回复
    1. @matsu

      已经补上 mega 备份链接,提取密钥 jvoVKF-dOQx-O0StZxOxRQ

      4 年前 回复
  9. 123

    谢谢楼主的分享

    4 年前 回复
  10. 谢谢博主分享

    4 年前 回复