机顶盒从ubuntu16更换到archLinux最新版
- 总体说明
- 方案分析
- 安装archLinuxARM的大体步骤
- 更新系统
- 安装软件
- 使用体验
- 更换内核和硬盘尝试
- 小结
总体说明
需要解决的问题:
之前完成了uboot、内核、文件系统的搭建,机顶盒利旧改造,实现安卓和Linux双系统启动。但是当时使用的Ubuntu16,apk安装的时候提示依赖包未安装,手工安装依赖包也失败。
存在困难
1、于是想安装archLinux arm版,而官网打开慢,好像资料的访问路径也有问题,其wiki都是和arch Linux公用的。即使官方支持的主板,也没有找到详细的步骤说明。
2、参考资料:
树莓派3上安装配置Archlinuxmirabox#installation 可能无法打开页面,我已上传文档,链接点我。如果打开后可点installation没有反应,可以保存再打开就能看到文字了。
方案分析
1、确认好CPU信息:hi3798mv100 通过安卓我记得只能到arm V7架构。
2、准备好内核文件:软件链接:
3、通过uboot设置环境变量已经能正常引导内核了,本次只需要更换根文件系统,uboot和内核都不动。
4、由于我的uboot是从u盘引导Ubuntu,只需要把u盘插在其他linux上,把老文件备份,用新的archlinuxarm安装包ArchLinuxARM-armv7-latest.tar.gz替换就可以了。
安装archLinuxARM的大体步骤
把u盘分区,我这里就不需要分区和格式化了,
挂载第二个分区(比如 mount /dev/sdb2 /mnt),
只需要把原来ubuntu的所有目录删除或者备份
mkdir /mnt/ubtbak; mv /mnt/* /mnt/ubtbak
把新的arch linux解压就完成了系统安装
bsdtar -xpf ArchLinuxARM-armv7-latest.tar.gz /mnt/
bsdtar大概是archLinux,用
tar -zxf ArchLinuxARM-armv7-latest.tar.gz -C /mnt
应该也是一样的效果,没有验证。
卸载分区
umount /mnt
把U盘插回原来的机顶盒,启动电源。
正常启动,通过路由器看IP地址,SSH登录正常,太顺利了。
更新系统
安装软件前要初始化签名,这两条命令一定不能少,否则会报keyring之类的错误
pacman-key --init
pacman-key --populate archlinuxarm
关闭签名,也可以修改配置,不建议
/etc/pacman.conf
SigNever = Never
先该一下镜像,加快下载速度
[root@wtstb ~]# more /etc/pacman.d/mirrorlist
Server = http://mirrors.163.com/archlinuxarm/$arch/$repo
先更新系统,
pacman -Syyu
安装软件
安装命令
BT和磁链下载工具,不能下载http/s链接,服务名transmission
pacman -S transmission-cli
全能下载工具,无服务名,可以写一个服务或者启动脚本
pacman -S aria2
投屏软件,可以通过智能电视和手机vlc等软件直接播放,服务名minidlna
pacman -S minidlna
Windows共享,默认配置文件/etc/samba/smb.conf需要单独下载,服务名smb
pacman -S samba
服务管理举例
启动服务
systemctl start transmission
如果要让开机自动运行
systemctl enable transmission
查看运行状态及最后几条日志
systemctl status transmission
更新配置后尽量重启一下,也许也可以用reload
systemctl restart transmission
配置好之后,远程下载和电视直接播放是正常的,访问smb共享正常读写。
具体配置文件可以网上参考。
使用体验
只是我那个写入速度3-5M的U盘太慢了,经常无响应,只要不写,CPU占用不到5%,内存占用一直不到200M,对于4核心1GB内存的机顶盒来说,完全不是事儿;而且功耗低完全静音,不错不错。
挂载一个2.5寸的移动硬盘,猜测读写应该没有问题(系统都读入内存了,下载软件不写U盘)。实际使用U盘的系统很快就崩溃了,大概是IO太慢文件损坏了,用硬盘启动流畅了。
后面再把WiFi配置搞一下就可以扔到角落里去啦。
更换内核和硬盘尝试
更新系统时,会自动更新/boot目录下的文件,但我写的u-boot指定的文件名并非zImage文件,通过uname -rp可以核实内核未更新。
initramfs也未用到,所以并未挂载任何模块,无任何驱动,也就是说dtb设备树都用不到。
但这些并不影响上述几个软件的运行。
尝试把U盘替换为移动硬盘(目录结构和分区相同,连接U口相同),启动后ssh和ping都失败,接TTL串口去核实原因为:移动硬盘的文件权限错误,全被改成777了,串口下都无法登录,重新解压ArchLinuxARM-armv7-latest.tar.gz即可。
尝试手工替换了内核文件,启动后ssh和ping都失败,未接TTL串口去核实原因。猜测可能是网卡未正常驱动。
更换kernel后
[root@wtstb mnt]# ls -l
total 22586
-rwxr-xr-x 1 root root 7406192 Mar 5 14:37 arch_kernel_can_not_boot.bin
-rwxr-xr-x 1 root root 1130139 May 30 2019 armroot.tar.gz
-rwxr-xr-x 1 root root 7243160 Mar 16 2020 hi_kernel.bin
-rwxr-xr-x 1 root root 7346064 Feb 5 00:26 zImage
[root@wtstb mnt]# mv hi_kernel.bin hi_kernel.bin.bak
[root@wtstb mnt]# mv zImage hi_kernel.bin
[root@wtstb mnt]# ls -l
total 22586
-rwxr-xr-x 1 root root 7406192 Mar 5 14:37 arch_kernel_can_not_boot.bin
-rwxr-xr-x 1 root root 1130139 May 30 2019 armroot.tar.gz
-rwxr-xr-x 1 root root 7346064 Feb 5 00:26 hi_kernel.bin
-rwxr-xr-x 1 root root 7243160 Mar 16 2020 hi_kernel.bin.bak
启动失败
Press Ctrl+C to stop autoboot
(Re)start USB...
USB0: Register 1212 NbrPorts 2
USB EHCI 1.00
scanning bus 0 for devices... 3 USB Device(s) found
USB1: Register 1111 NbrPorts 1
USB EHCI 1.00
scanning bus 1 for devices... 1 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
reading hi_kernel.bin
................................................................................................................................................................................................................................................................................................................................................................................................................................................................
7346064 bytes read
Wrong Image Format for bootm command
ERROR: can't get kernel image!
在串口用备份文件正常启动
usb start;fatload usb 0:1 0x1FFBFC0 hi_kernel.bin.bak;bootm 0x1FFBFC0
挂载查看格式不同,恢复回去
[root@wtstb ~]# mount /dev/sda1 /mnt/
[root@wtstb ~]# cd /mnt
[root@wtstb mnt]# file hi_kernel.bin
hi_kernel.bin: ARM OpenFirmware FORTH Dictionary, Text length: -509607936 bytes, Data length: -509607936 bytes, Text Relocation Table length: -369098747 bytes, Data Relocation Table length: 24061976 bytes, Entry Point: 0x00000000, BSS length: 7346064 bytes
[root@wtstb mnt]# file hi_kernel.bin.bak
hi_kernel.bin.bak: u-boot legacy uImage, Linux-3.18.24_s40, Linux/ARM, OS Kernel Image (Not compressed), 7243096 bytes, Sun Mar 15 16:37:31 2020, Load Address: 0x02000000, Entry Point: 0x02000000, Header CRC: 0xC1CAA0CA, Data CRC: 0xB6071F47
[root@wtstb mnt]# mv hi_kernel.bin.bak hi_kernel.bin
以后更新系统,也只能保持内核不变。
小结
只要硬件和archLinux的ARM架构相同,就可以正常运行。
内核和根文件系统/发行版,无强关联,同一个内核和ubuntu16及archLinuxArm2021版都可以兼容。如果加上声卡/网卡/显卡这些外设可能就有问题了。
uboot和板级硬件强相关,往往需要硬件厂家支持,这些资料可能无法获取。
uboot引导内核时,必须指定kernel内核及rootfs根文件系统位置,可以不指定initramfs及dtb驱动设备树,就可以进入基本的shell界面。