osnosn

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

Armbian_N1_笔记

转载注明来源: 本文链接 来自osnosn的博客,写于 2020-11-17, 更新于 2023-08.

一些笔记/备忘,关于N1(S905d)

  • Debian-10 防火墙内核是 nft。默认是通过 iptables/ip6tables 命令转换的。
  • armbian 默认开了 restore-iptables。所以关了它,改用nftables。
    systemctl disable armbian-restore-iptables ,
    apt install nftables; systemctl enable nftables; nft -f /etc/nftables.conf

apt upgrade 之后,文件系统错误

  • 发现文件系统错误。重启之后。
    • 如果直接 fsck -y /dev/mmcblk1p2 提示 /dev/mmcblk1p2 is mounted. 说明还是 mount 在 rw 模式。
    • 执行 find / -ls > /tmp/xxxx.log 让它触发错误,自动 remount 为 ro 模式。就可以 fsck 了。
  • cd /tmp 这个目录是挂载在内存的,速度很快,
    find / -ls > /tmp/xxxx.logfind / -ls > /dev/null 触发文件系统错误。(如果有错误的话)
  • 出现文件系统错误后,/dev/mmcblk1p2 挂载的所有点,都会变成 ro (只读)。
    乘此机会,fsck /dev/mmcblk1p2 ,检查出的错误,全部用 y 回答。
  • 然后 reboot 整个系统,即可。

interfaces 中配置了 dhcp , resolv.conf (DNS) 不更新

  • 执行 resolvconf -u 会给出警告,Warning: /etc/resolv.conf is not a symbolic link to /run/resolvconf/resolv.conf
    原因是 /etc/resolv.conf 被 NetworkManager 接管了。
    改网卡由 NetworkManager 管理,取消 /etc/network/interfaces 中的配置。
  • NetworkManager 比 interfaces 好用多了。可以用 nmtui 管理网卡。
    参考【Linux_ipv6_无状态_设置为_eui64_有状态ipv6更改后缀
  • 如果发现 /etc/resolv.conf没有更新,看man NetworkManager.conf中,关于rc-manager的说明。
    修改 /etc/NetworkManager/NetworkManager.conf中 main 部分,rc-manager=file

chrony is masked 无法启动

  • systemctl unmask chrony 取消 mask,就正常了。
  • /etc/chrony/chrony.conf 最后一行加入 allow all 就能作为对时服务器,为内网其他机器对时。

检查一下系统文件的 owner 是否正确,应该是 root

  • 如果不是,就全部改成root。即,把用户id 1234 改为 id 0。
    find / -uid 1234 -exec chown -h 0 {} \;
    find / -gid 1234 -exec chgrp -h 0 {} \;

eth0 上添加一个ip (单网口,多IP)

  • 此系统的网口是由 NetworkManager 管理的。
  • 临时:
    • 添加,ip addr add 192.168.1.100/24 dev eth0
    • 删除,ip addr del 192.168.1.100/24 dev eth0
  • 永久:
    • nmtui 编辑 eth0 网口,在ipv4部分,
      保持 IPv4 CONFIGURATION <Automatic>
      Addresses <Add...> 添加一个IP(包括掩码)。如192.168.1.100/24
      reboot 后生效。 (仅 restart NetworkManager 好像不行。)

远程 ssh 升级 Debian

  • 大版本升级, 建议用一个可靠的机器作为跳板,套上 tmux 或 screen,然后连接目标 N1,再次套上 tmux, 再执行大版本的升级操作。
    因为大版本升级,会更新关键库文件。在 sshd 升级完成前,无法再次通过ssh连接机器。新启动的 sshd 进程因为库不兼容会闪退。
    已经连接的 ssh 不会主动断开。
    升级完成前,如果断电重启,会导致 kernel panic 无法启动。
    当 sshd 服务完成升级后 (大约是20分钟后),就没问题了。如果断线可以重新连回去。再用tmux恢复升级的界面。
    如果 tmux 不可用,见【tmux_server_version_is_too_old
  • 小版本升级, 直接连 目标 N1,套上 tmux, 升级即可。

远程 ssh 升级 Debian 过程中掉线,重启失败,需要重装恢复

  • 参考【N1盒子刷Armbian,看这一篇就够了——Armbian全方位安装指导书
    文件获取【N1_armbian_Debian_stretch_5.0.2_20190318.7z
    直接从 第二步:制作系统U盘 开始。
  • 重装,会清空N1中原有的所有内容。以下,是步骤的文字描述。
  • Armbian_5.77_Aml-s905_Debian_stretch_default_5.0.2_20190318.img.xz 解压后,用 Win32DiskImager 写入U盘,约 1.9GB
  • meson-gxl-s905d-phicomm-n1.dtb copy到 u盘的 dtb 目录
  • 修改 u盘根目录的 uEnv.ini 文件,核对 dtb文件路径。
  • 将U盘插入靠近hdmi的USB口里,上电重启,会自动进入U盘系统。
  • 用 root、1234 登录系统,修改 root 密码。创建普通用户 (可跳过)。
  • 用命令 nand–sata-install 把系统写入 emmc。
    这个Armbian-5.77安装映像的 nand-stat-install 是链接到 /root/install.sh,是同一个脚本。
  • 执行 2次 sync 防止文件系统软故障。
  • shutdownhalt -p 关机,拔掉u盘。重新插拔电源,重启系统。
  • 修改系统的 machine-id。 这样 此机的 DUID, client-id 都会改变。
    rm /etc/machine-id; rm /var/lib/dbus/machine-id; systemd-machine-id-setup;
    /etc/machine-id 可以手工修改。
    /var/lib/dbus/machine-id 不要手工修改,重启后可能导致进不了系统。
  • 写入的文件系统有 bug,
    find / -ls > /dev/null 触发文件系统错误。
    fsck /dev/mmcblk1p2 修复文件系统。
    reboot 重启。
  • nmtui 修改一下机器名。
  • 时区,用 timedatectl 命令设置。
  • 重装完成。
  • nmtui 增加 eth0 的网口,设置 eui64。取消 interfaces 中的 eth0。

n1 的 debian 从 stretch 升级到 bullseys (2021-10记录)

  • 直接修改 sources.list 为 bullseye, apt update 就会出错。说是pgp key错误。
  • 发现可以跳过 buster 直接升级到 bullseye。以下是升级的步骤。
  • 先保留 sources.list 为 stretch,apt update , 发现有错误,update-command-not-found修正。
    然后 apt upgrade 升级到 stretch 的最新。
  • 修改 sources.list 为 bullseye,apt update, 先apt update --fix-missing修正一下,否则 full-upgrade 会有错误。
    然后 apt full-upgrade
  • sync,再 重启,完成升级。
  • 发现 root 分区还是有错误。(如果有sync,可能不会有错误了)
    需要反复多次 find / -ls > /dev/null 触发错误, 然后fsck -y /dev/mmcblk1p2修复文件系统,然后重启。

完善一下系统

  • nmtui 修改一下机器名。
  • 时区,用 timedatectl 命令设置。【Linux下使用timedatectl命令时间时区操作详解
    timedatectl status 查看系统时间方面的各种状态
    timedatectl list-timezones 列出所有时区
    timedatectl set-local-rtc 1 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间
    timedatectl set-timezone Asia/Shanghai 设置系统时区为上海
    • N1没有RTC,用timedatectl如果修改失败。手动修改 /etc/timezone 的内容,手动修改 /etc/localtime 的链接,即可。
  • date 显示24小时制,在 /etc/default/locale 加一行 LC_TIME=C.UTF-8
    或者 .bashrc 中加入 export LC_TIME=C.UTF-8 (似乎没用)
    • localectl list-locales 查看列表。
      apt install locales-all 之后可以用 en_DK.UTF-8
    • 如果要自定义 date 的格式,用 alias 吧。
  • 装本地邮件系统 postfix ,邮件客户端 mutt。改 aliases,把root邮件转给自己。
  • 装 tmux。
    • 修改 prefix 键 Ctrl-b 为 Ctrl-a ,copy-mode 为 vi 样式。历史行增加到2万行。
      /etc/tmux.conf 中加入以下5行。
      set-option -g prefix C-a
      unbind-key C-b
      bind-key C-a send-prefix
      set -g mode-keys vi
      set -g history-limit 20000
    • ~/.bashrc 中添加,alias tmux='tmux -2',让 tmux 支持256colors
      测试echo -e '\033[38;5;158mAAA\033[38;5;189m666\033[0m'应该是颜色差异很小的白色, 而不是绿/蓝。
    • 如果出现错误 unknown terminal type tmux-256color
      检查 ncurses-base ncurses-term 是否安装。用 apt install ...安装,可解决。
  • sshd 增加一个端口,为了方便 ipv6 登录。另外,设置一下用 key 登录。
  • 创建一个 ddns 更新脚本,用 crontab 定时启动。
  • 参考【UnRAID_6.8.2_配置_设置】中,关于 Debian 的设置。
  • /var/log/journal 目录,会占用不少空间,需要解决一下。
    Linux 系统 /var/log/journal/ 垃圾日志清理
    N1刷入Armbian后保护emmc – 禁止varlog日志
    N1盒子armbian/ubuntu/linux系统修改日志输出到内存
    • 手动删除到8M journalctl --vacuum-size=8M
    • 配置中限制大小8M /etc/systemd/journald.confSystemMaxUse=8M
    • 手工清理 /var/log/中的东西,记得还要清理/var/log.hdd/目录中对应的文件。否则,重启又回来了。
  • sshd 配置,仅允许 root 从内网用密码登录。其他地方要用密钥登录。
    配置sshd_除了特定ip外_仅密钥登录
    # 修改 /etc/ssh/sshd_config
    # 找到 PermitRootLogin yes,改为以下一行。没找到就添加这行。
    # 禁止 root 用户通过密码登录。
    PermitRootLogin prohibit-password
    PasswordAuthentication no
    # 在文件最后添加以下两行
    Match Address 127.0.0.1/32,::1/128,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,fe80::/16,fd00::/8
    #  PermitRootLogin yes
       PasswordAuthentication yes
    
  • Subsystem sftp /usr/lib/openssh/sftp-server -l INFO 记录sftp的活动。
  • 太多猜密码的,在 log 中留下不少记录,占用空间。装个 fail2bain 限制一下。只需限制 sshd 的对应端口就够了。
  • N1 的 armbian 有 ntpd 对时服务。不用装 chronyd 了。
    如果没有 ntpd 就装 chronyd 吧。
  • auth.log 中留下很多 dev/ttyS0: not a tty 的记录,syslog daemaon.log 也有不少 ttyS0 的记录。
    因为 N1 本身没有串口,所以出错。除非 USB 上插了一个。
    systemctl disable serial-getty@ttyS0,service serial-getty@ttyS0 stop 即可
    • ttyAML0 是 TTL串口。N1有这个设备,需要自己接线出来用。
  • 修改默认的 editor。
    • 设置环境变量 EDITOR=vim
    • 使用命令 update-alternatives --config editor
  • ls带颜色输出时,目录是蓝色,阅读吃力,改一下。
    dircolors -p > ~/.dircolors 修改这个文件,把DIR 01;34改为DIR 00;44
    • debian 只支持 ~/.dircolors,centos支持 ~/.dircolors~/.dir_colors

ssh 连接上去 debian 从 11 升级到 12,bullseye升bookworm

(2023-06记录)

  • 把 11 升级到最新 apt update ; apt upgrade
  • find / -ls > /dev/null 触发文件系统错误。防止重启失败。
  • reboot (选做)。
  • 改 sources.list ,准备升到 12。
    把 bullseye 改为 bookworm ,
    把 non-free 改为 non-free non-free-firmware ,
  • 执行 tmux 。(使用一个好的网络,最好不要掉线。家庭宽带或4G网络,比酒店网的稳定)。
  • "apt update ; apt full-upgrade"。
    如果出现某个包下载失败的错误。则再执行一次,"apt update ; apt full-upgrade --fix-missing"。
  • find / -ls > /dev/null 触发文件系统错误。防止重启失败。
  • sync 然后 reboot
    • 启动失败。用armbian的U盘启动。"fsck /dev/mmblk1p1 ; fsck /dev/mmblk1p2"
    • 拔掉U盘,启动成功。
    • 再次reboot,失败。U盘启动后,
      发现 mmblk1p1 没有正确的umount,需要用fsck清除mount标记,才行。
      发现是一个服务启动失败 "systemd-fsck@'dev-disk-by\x2dlabel-BOOT_EMMC' " 这个不影响。
      又发现,内核-5.0.2和nft-1.06 搭配不好,导致 nftables 服务卡住。
      • 降级 nftables-0.9.8
        “/etc/apt/sources.list" 中保留一行 "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free"。
        创建 "/etc/apt/preferences", 内容,
        Package: nftables
        Pin: version 0.9.8*
        Pin-Priority: 1001
        
        Package: libnftables1
        Pin: version 0.9.8*
        Pin-Priority: 1001
        
        重新安装这两个包,remove 和 install。
        自定义规则,不能放在 nftables.service 中启动,否则会卡死系统(系统不能登录)。
        等系统完全启动好之后,手工执行 "nft -f my-nft-rules.nft" 就没有问题。
  • "apt autolean ; apt autoremove" 清理一下无用的包。

新的参考

  • 之前用的 armbian 系统 (Armbian_5.77_Aml-s905_Ubuntu_bionic_default_5.0.2_20190401),内核是无法升级的。升级系统过程中,内核的升级,因权限问题,无法写入。
  • SuzukiHonoka/s905d-kernel-precompiled】由 Starx 预编译的 S905d 内核仓库。
    有个【视频教程】,
  • ophub/amlogic-s9xxx-armbian】ophub的armbian系统。整套系统,更新活跃。
    给 N1 新装系统,建议使用 ophub 的 armbian,内核比较新,稳定性不错,也方便今后的升级,包括 kernel 的升级。(2023-06)

ARMBIAN 5.67 或 5.77 换新内核

(2023-08记录)

  • 之前刷的 ARMBIAN-5.67,内核为 kernel-4.18 好旧。是 stretch (9)。
    之前刷的 ARMBIAN-5.77,内核为 kernel-5.0.2 比较旧。是 stretch (9)。
  • 先升级到 buster (10),再升级到 bullseye (11),最后升级到 bookworm (12)
    因为直接升级到 bullseye,apt会报错,大概是 apt的版本太低。
    • 可以试试,更改了 sources.list 之后,
      apt update; apt install apt 只升级apt。
      最终改为 bookworm 再做完整升级 apt upgrade

换SuzukiHonoka/s905d-kernel-precompiled

(2023-08记录)

  • 去 【SuzukiHonoka/s905d-kernel-precompiled】找预编译内核。
    主页上的 README 说:
    • "从 5.15.x 开始,本内核已不适合非服务器环境使用。"
    • "目前 N1 已完成 5.9.x - 5.15.x 内核的安装及稳定性测试。"
    • "通过测试的版本: Linux Kernel 5.15.15 and above"。
      就用比较新的 5.15.15 吧。去 【releases 的历史】 下载 Kernel.5.15.15.zip
  • 上传到目标机器 (N1),解压。
    里头有个 install_kernel.sh 脚本,脚本中写漏了两句。需要手工补上。
    • su 到 root 身份。
    • cp /boot/uInitrd /root/uInitrd.old 这是漏的第一句。这句也很重要,否则失败后,恢复不了旧内核。
    • mkdir /boot/dtb/amlogic/ 这是漏的第二句。
    • 然后执行这个脚本,sh install_kernel.sh
      其实,脚本中应该少装一个 deb 包。"linux-libc-dev_5.15.15-...arm64.deb",
      这个 linux-libc-dev 包 bookworm 中的版本更高,没必要装。
    • 重要: 别漏这一步,修改 "/boot/uEnv.ini" 文件中 "dtb_name=" 这一行。
      改为 dtb_name=/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb
    • 执行 sync 2次,防止缓存未写入磁盘。
    • find / -ls > /dev/null 触发文件系统错误。防止重启失败。
    • reboot ,就应该成功了。
    • 重启后,用 find / -ls > /dev/null 再次触发文件系统错误。
      如果没问题,那就是 OK 啦。
    • 因为 /boot/ 分区只有 122MB。此时应该只剩下 11MB 左右了。
      应该清理一下这个分区。删除旧内核。否则下次更换内核,空间就不够用了。
      • N1 启动,其实只需要 zImage, uInitrd, dtb, uEnv.ini。
        config-xxx, initrd.img-xxx, vmlinuz-xxx 启动时用不到。
        如果 "boot" 分区空间紧张,可以把 vmlinuz-xxxx, initrd.img-xxxx 移出去别的地方备份。
  • 如果启动失败,恢复方法。
    断电,插u盘启动。
    挂载 "/dev/mmcblk1p1" 到某个目录(就是 armbian的 "/boot/" 分区)。
    删除 zImage,把 zImage.old 改名为 zImage。
    把备份的 uInitrd.old 拷贝覆盖到 uInitrd 上。
    然后修改 uEnv.ini 中,关于 dtb 的路径。
    重启,就能恢复原来的内核。
  • 如果想再重新换个kernel版本。
    先恢复 zImage.old,参考上面"启动失败"的恢复方法。
    卸载旧版的几个 deb 包,
    dpkg -r linux-headers-xxxx......
    dpkg -r linux-image-xxxx......
    dpkg -r linux-libc-dev  #如果装了他的版本
    
    然后,删除 /boot/ 中,initrd.img-5.15.xx... ,
    把备份的 uInitrd.old 拷贝覆盖到 uInitrd 上。(如果没备份,应该可以用 update-initramfs 重新生成)
    /boot/ 中,旧版的 zImage 已经恢复了,就不用处理了。
    即可。
    注意。我尝试 从 kernel-5.15.15 直接 降级换到 kernel-5.13.14,启动失败了。
    然后,退回最初的 kernel-5.0.2 之后再换 kernel-5.13.14,启动成功。(2023-08记录)
  • 其中,ARMBIAN-5.77,换内核的时候,发现 /dev/mmcblk1 中的分区表丢失。
    用 fdisk 恢复它就行了。开始/结束,抄下面的表。5.67和5.77制作的分区表是一样的。(2023-08记录)
    如果担心和我的N1的分区表不同。最好自己先备份一个。用命令 fdisk -l /dev/mmcblk1
    Disk /dev/mmcblk1: 7.28 GiB, 7818182656 bytes, 15269888 sectors
    Disklabel type: dos
    Device         Boot   Start      End  Sectors  Size Id Type
    /dev/mmcblk1p1      1368064  1617919   249856  122M  c W95 FAT32 (LBA)
    /dev/mmcblk1p2      1619968 15269887 13649920  6.5G 83 Linux
    
    • 如果确实没有备份。找到当时的安装u盘,找到文件 "/root/install.sh"。
      手工执行一下前面的20-30行,跳过最前的 u-boot 备份,就用 u盘上原来的备份文件 "u-boot-default.img"。
      执行 parted 分区, 恢复 u-boot,执行到 "sync"。就恢复分区表了。
  • 两个链接,感觉有用,但没看懂。先留着。
    eMMC读写操作(eMMC5.1)】,【E900v22C Armbian 写入emmc

各个kernel版本的尝试

最终,我用了 ophub的 kernel-5.15.125。见本帖子的后面。

  • 尝试 SuzukiHonoka/s905d-kernel-precompiled 的各个kernel版本。
  • kernel-5.15.15 和 kernel-5.15.104。(2023-08记录)
    • uname -a 分别显示:
      Linux aml 5.15.15-aml-s905d-starx-action #1 SMP PREEMPT Tue Jan 18 08:33:08 UTC 2022 aarch64 GNU/Linux
      Linux aml 5.15.104-aml-s905d-starx-action #1 SMP PREEMPT Tue Mar 28 01:48:47 UTC 2023 aarch64 GNU/Linux
    • /boot/ 分区剩余 11MB, 8.2MB。
    • 内核 和 nft-1.06 搭配很好。 TUN, TAP, WIREGUARD, PPP, PPPOE 支持。 loop 设备。
    • N1启动,直到进入系统,插 HDMI 的显示器,一直都显示开机 LOGO 图。启动OK
      插上USB键盘也没变化。系统只能远程登录。本地的键盘,显示器,没法用。
      (15和104版一样,USB键盘,显示器没法用。网络正常。)
    • kernel-5.15.104 比5.15.15 编译的config项目多了一些。个人感觉 104 应该更好点。
  • kernel-6.1.42。 启动失败。N1 不能用。(2023-08记录)
  • kernel-6.1.25。 启动失败。N1 不能用。(2023-08记录)
  • kernel-5.13.14 (2023-08记录)
    • uname -a 显示:
      Linux aml 5.13.14-aml-s905d-starx-action #1 SMP PREEMPT Sat Sep 4 10:35:52 UTC 2021 aarch64 GNU/Linux
    • /boot/ 分区剩余 4.9MB。
    • 内核 和 nft-1.06 搭配很好。 TUN, TAP, WIREGUARD; PPP, PPPOE支持。
    • N1启动,直到进入系统,插 HDMI 的显示器,显示开机 LOGO 图几秒后,蓝屏。显示器提示"无信号"。
      插上USB键盘也没变化。系统只能远程登录。本地的键盘,显示器,没法用。
    • 退回 kernel5.0.2,重新装 kernel5.13.14,居然好了。(也许前一次安装, 哪里做的不对)
      启动成功。本地显示器有显示,usb键盘工作正常。
  • kernel-5.14.11 (2023-08记录)
    • /boot/ 分区剩余 3.1MB。
    • 内核 和 nft-1.06 搭配很好。 TUN, TAP, WIREGUARD; PPP, PPPOE支持。
    • N1启动,直到进入系统,插 HDMI 的显示器,显示开机 LOGO 图几秒后,蓝屏。显示器提示"无信号"。
      插上USB键盘也没变化。系统只能远程登录。本地的键盘,显示器,没法用。
    • 换用 kernel-5.0.2 的 dtb (改uEnv.ini),显示开机 LOGO 图几秒后,显示正常。
      插上usb键盘没反应。本地console,有显示,不能输入,没法用。
    • 也许,重装,也会好。没再测试了。

ARMBIAN 5.67, 5.77 之前换的不满意,再换

基础知识参考

  • vmlinuz 文件解压缩
    How do I uncompress vmlinuz to vmlinux?
    Extract vmlinux from vmlinuz or bzImage
    N1 的 uboot 不支持 gzip压缩的内核,我测试过,启动失败。所以要解开它。
    # 如果 "file vmlinuz" 显示: Linux kernel ARM64 boot executable Image,
    #--- 则 vmlinuz 不是 gzip压缩的,执行
    cp vmlinuz Image
    # 如果 "file vmlinuz" 显示: gzip compressed data, max compression,
    #--- 则 vmlinuz 是 gzip压缩的,执行 (较慢)
    dd if=vmlinuz-xxxx skip=$(head -c1m vmlinuz-xxxx | grep -abo -m1 -e $'\x1f\x8b\x08\x00' |cut -d: -f 1) bs=1 |zcat > ./Image
    #或 (较快)
    N=$(head -c1m vmlinuz-xxxx | grep -abo -m1 -e $'\x1f\x8b\x08\x00'| awk -F: '{print $1+1}') && tail -c +$N vmlinuz-xxx | gzip -d > ./Image
    
  • initrd.img, vmlinux
  • initrd.img的压缩(制作)及解压的过程
  • How to build uInitrd/initrd.img for Ubuntu?
    Extracting content from the file uInitrd
    mkimage, dumpimage 需要安装 apt install u-boot-tools
    #---- 安装好 vmlinuz 之后,生成 initrd.img 和 uInitrd,执行,
    /etc/kernel/postinst.d/initramfs-tools ${version}
    #或
    update-initramfs -c -t -k "${version}"
    #---- uInitrd 转 initrd.img.gz
    dd if=/boot/uInitrd  of=./initrd.img.gz  bs=64  skip=1
    #或
    dumpimage -T ramdisk -o uInitrd  initrd.img.gz
    #---- initrd.img.gz 转 uInitrd,
    mkimage -A arm64 -O linux -T ramdisk -C gzip -a 0 -e 0 -n uInitrd -d /boot/initrd.img-xxx  ./uInitrd-xxx
    #---- vmlinuz 转 uImage,
    mkimage -A arm64 -O linux -T kernel -C gzip -a 0x1080000 -e 0x1080000 -n "Linux" -d  vmlinuz-xxx uImage
    #---- uImage 转 vmlinuz,
    dumpimage -T kernel -o vmlinuz uImage
    
  • cpio格式 initrd 的解压与压缩

试试别人的内核

devmfc/debian-on-amlogic

  • 试了试 他家的 6.1.38-meson64 (2023-08记录)
    从 .config 文件看,有 TUN, TAP, BLK_DEV_LOOP, 还有很多的 ROCKCHIP 配置。没有选 ACPI。
    换到 N1 上,无法启动。看来不合适。

ophub/kernel

  • 去 【ophub/kernel_dev】下载 "5.15.125.tar.gz",约 89MB。

  • 写了个脚本,见【Debian11_手工制作deb安装包_过程和例子】。
    把 tar.gz 压缩包,转换成 deb 安装包。
    这个脚本,创建"文件目录"部分,参考了 ophub 内核升级脚本 【armbian-update】"update_kernel()"函数的安装步骤。

  • 在 N1 上执行这个脚本。耗时 2m55s 生成两个 deb 文件。文件的体积还好。

    7.2M  linux-headers-5.15.125-ophub-amlogic-s905d-osn_arm64.deb
     26M  linux-image-5.15.125-ophub-amlogic-s905d-osn_arm64.deb
    
  • 把这两个包安装好。(2023-08记录)

    • 注意: "boot" 分区剩余空间 86MB,安装 linux-image-xxx.deb 失败,报错:"空间不足"。
      清理到剩余空间 105MB,安装成功。装完剩余 46MB。可以把之前移出的文件,再移回来。
      因为安装结束,会触发脚本重新生成initrd.img,uInitrd,产生的临时文件 导致 boot分区满了。
      两个解决办法,
      • 把文件移出去,剩余空间留大点。
      • 修改生成deb的脚本,去掉 postinst 脚本。不触发重新生成initrd.img。
    • "file vmlinuz-5.15.125-ophub" 显示: Linux kernel ARM64 boot executable Image,
      vmlinuz 27MB。"/boot/"目录中,执行
      cp vmlinuz-5.15.125-ophub zImage
    • uInitrd 已经重新生成了,不用修改。
    • 检查 uEnv.ini 中 dtb 的路径。ophub的dtb,在 "/boot/dtb-5.15.125-ophub/" 目录中。
    • 先 sync,再 reboot,重启。 N1 启动成功。(2023-08记录)
    • "uname -a" 显示,
      Linux aml 5.15.125-ophub #1 SMP PREEMPT Wed Aug 9 12:36:03 CST 2023 aarch64 GNU/Linux
    • TUN, TAP, WIREGUARD, PPP, PPPOE, BLK_DEV_LOOP 支持。ipv6 功能正常。
      BLK_DEV_LOOP 设置了 128 个,有点多,其实有 8个就够用了。
      内核 和 nft-1.06 搭配很好。nftables 规则启用正常。(2023-08记录)
      syslog中有 蓝牙,wifi的相关显示。我没测试 蓝牙,wifi。
    • 连接本机的 HDMI显示器,usb键盘,工作正常。插u盘能正常识别,挂载。(2023-08记录)
    • 如果这个内核,使用 SuzukiHonoka/s905d-kernel-precompiled 的 5.15.104 的 dtb,也能用,运行也没发现问题。
    • N1 不插外设,没啥访问,市电插座上的功率计显示,2.7~3.2 瓦。(2023-08记录)
  • 以下各个版本的内核测试,都是使用【Debian11_手工制作deb安装包_过程和例子】中的脚本,打包成两个 deb 安装包。
    安装其中的 linux-image-xxx(版本号)-amlogic-s905d.deb ,然后启动。

    ophub/kernel
    kernel_dev
    "6.1.45.tar.gz"
    90.5MB。
    启动成功
    2023-08测
    hdmi显示器,usb键盘 工作正常。
    vmlinuz 33MB。
    128个dev_loop。有ppp。
    kernel_dev
    "5.15.125.tar.gz"
    88.2MB。
    启动成功
    2023-08测
    见上文的描述。
    vmlinuz 27MB。
    128个dev_loop。有ppp。
    kernel_stable
    "6.1.45.tar.gz"
    84.4MB。
    启动失败
    2023-08测
    黑屏,大约每十秒闪现一次开机logo。
    似乎在不停重启。
    安装了两次,测试了两次。排除了操作失误的可能。确实是不能启动。
    kernel_stable
    "5.15.125.tar.gz"
    82.1MB。
    启动成功
    2023-08测
    hdmi显示,usb键盘,正常。
    vmlinuz 27MB。
    128个dev_loop。有ppp。
    kernel_flippy
    "6.1.45.tar.gz"
    72.9MB。
    启动失败
    2023-08测
    黑屏,大约每十秒闪现一次开机logo。
    似乎在不停重启。
    kernel_flippy
    "5.15.125.tar.gz"
    65.9MB。
    启动成功
    2023-08测
    hdmi显示,usb键盘,正常。
    vmlinuz 24MB。
    8个dev_loop。有ppp。
    kernel_beta
    "6.1.45.tar.gz"
    84.4MB。
    启动成功
    2023-08测
    hdmi显示,usb键盘,正常。
    vmlinuz 33MB。
    128个dev_loop。有ppp。
    kernel_beta
    "5.15.125.tar.gz"
    82.1MB。
    启动成功
    2023-08测
    hdmi显示,usb键盘,正常。
    vmlinuz 27MB。
    128个dev_loop。有ppp。

自编译一个精简版

  • osnosn/armbian-kernel-precompiled/】,用 ophub的源码,重新编译的。

    # N1_Kernel_5.15.126+.rar 中,需要用到,两个 deb文件和一个 zImage。
    dpkg -c linux-image-5.15.126+_5.15.126+-4_arm64.deb   #查看deb包中的文件列表
    dpkg -x linux-image-5.15.126+_5.15.126+-4_arm64.deb ./xxx/  #把deb包中的文件解压到xxx/目录中,用来查看文件
    

    kernel-5.15.126。vmlinuz 22MB。有 ppp,tun,tap,wireguard。有 8个dev_loop。
    安装说明,见【说明 armbian-kernel-s905d-phicomm-n1】。

    ## ---安装步骤---
    cd /root/
    mkdir boot_5.0.2-bak/; cd boot_5.0.2-bak/
    ## 移动文件,腾出空间
    mv /boot/System.map-5.0.2-aml-s905 ./
    mv /boot/config-5.0.2-aml-s905 ./
    mv /boot/vmlinuz-5.0.2-aml-s905 ./
    mv /boot/initrd.img-5.0.2-aml-s905 ./
    mv /boot/uInitrd ./
    mv /boot/zImage ./
    ## 备份其他文件
    cp -p /boot/u-boot-default.img ./
    cp -p /boot/armbian* ./
    cp -p /boot/boot* ./
    cp -p /boot/emmc_autoscript* ./
    cp -p /boot/uEnv.ini ./
    cp -rp /boot/dtb-5.0.2-aml-s905 ./
    
    # 解压 RAR文件,并进入解压目录。先装headers再装image,然后覆盖zImage,最后替换dtb文件
    dpkg -i linux-headers-5.15.126+_5.15.126+-4_arm64.deb  #安装headers文件
    dpkg -i linux-image-5.15.126+_5.15.126+-4_arm64.deb   #安装新内核
    cp zImage /boot/zImage  #把 RAR中的 zImage拷贝过去
    rm /boot/uImage   #删除无用文件
    cd /boot/; mkdir dtb-5.15.126/
    cp -p /usr/lib/linux-image-5.15.126+/amlogic/meson-gxl-s905d-phicomm-n1.dtb dtb-5.15.126/
    修改 /boot/uEnv.ini 中对应的行,用"#"注释旧的行,新增一行 dtb_name=/dtb-5.15.126/meson-gxl-s905d-phicomm-n1.dtb
    sync; sync; #确保所有更改,已经写入emmc
    
  • 换了 kernel-5.15.126,如果要使用 wireguard 网络,无需安装 wireguard包,仅安装apt install wireguard-tools即可。(2023-10测)
    因为安装 wireguard包,需要依赖官方内核 linux-image-xxx。而,N1无法安装官方内核。
    WireGuard_2和3台OpenWRT测试_LAN-LAN连接测试_Debian11_CentOS8

其他

  • android 旧手机。
    • 做电脑副屏,用 spacedesk。手机和PC都要装 app。
    • 做电脑副屏,买一个 USB3的HDMI视频采集卡,插在手机的 type-C 上。PC无需安装软件。
      也可以插在PC的usb3上采集其他hdmi的视频输出。
    • 做摄像头,用 DroidCam。手机和PC都要装 app。
    • 行车记录仪,dailyraods。

转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/13994474.html 来自osnosn的博客.

posted on 2020-11-17 15:41  osnosn  阅读(3137)  评论(0编辑  收藏  举报