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.log
或find / -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
防止文件系统软故障。 shutdown
或halt -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 的链接,即可。
- N1没有RTC,用
- 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-term
是否安装。用apt install ...
安装,可解决。
- 修改 prefix 键 Ctrl-b 为 Ctrl-a ,copy-mode 为 vi 样式。历史行增加到2万行。
- 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.conf
中SystemMaxUse=8M
- 手工清理
/var/log/
中的东西,记得还要清理/var/log.hdd/
目录中对应的文件。否则,重启又回来了。
- 手动删除到8M
- 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
。
- debian 只支持
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", 内容,
重新安装这两个包,remove 和 install。Package: nftables Pin: version 0.9.8* Pin-Priority: 1001 Package: libnftables1 Pin: version 0.9.8* Pin-Priority: 1001
自定义规则,不能放在 nftables.service 中启动,否则会卡死系统(系统不能登录)。
等系统完全启动好之后,手工执行 "nft -f my-nft-rules.nft" 就没有问题。
- 降级 nftables-0.9.8
- "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
。
- 可以试试,更改了 sources.list 之后,
换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 移出去别的地方备份。
- N1 启动,其实只需要 zImage, uInitrd, dtb, uEnv.ini。
- 如果启动失败,恢复方法。
断电,插u盘启动。
挂载 "/dev/mmcblk1p1" 到某个目录(就是 armbian的 "/boot/" 分区)。
删除 zImage,把 zImage.old 改名为 zImage。
把备份的 uInitrd.old 拷贝覆盖到 uInitrd 上。
然后修改 uEnv.ini 中,关于 dtb 的路径。
重启,就能恢复原来的内核。 - 如果想再重新换个kernel版本。
先恢复 zImage.old,参考上面"启动失败"的恢复方法。
卸载旧版的几个 deb 包,
然后,删除 /boot/ 中,initrd.img-5.15.xx... ,dpkg -r linux-headers-xxxx...... dpkg -r linux-image-xxxx...... dpkg -r linux-libc-dev #如果装了他的版本
把备份的 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"。就恢复分区表了。
- 如果确实没有备份。找到当时的安装u盘,找到文件 "/root/install.sh"。
- 两个链接,感觉有用,但没看懂。先留着。
【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记录)
- 注意: "boot" 分区剩余空间 86MB,安装 linux-image-xxx.deb 失败,报错:"空间不足"。
-
以下各个版本的内核测试,都是使用【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的博客.