之前有提到过手里有块开发板用来当自己的微型服务器,跑跑脚本,组建局域网之类的,之前一直刷的是 Armbian 的系统,但遗憾的是手中的这块 orangepiwin 型号已经不被 Armbian 支持维护了,爱折腾的我怎么可以忍受陈旧的软件和内核呢, 于是在找了下网上的资料,发现 Arch Linux 同样支持 Arm 架构,下面就来一起看看吧。
初窥 Arch Arm
Arch Arm的官网里是这么介绍它的
这几点完全解决了用户的痛点,由于 Arm 旗下平台众多,芯片种类也各不相同,所以安装方式也不同,我手中这块板子是 Allwinner 全志的芯片,需要参照官网的 pine64安装教程 来进行安装操作
动手安装
pine64安装教程 里描述是 pine64 的安装过程,虽然不是自用的 orangepiwin 但仍可参考借鉴,安装步骤总体可分为三部分
经常折腾电脑的同学会发现,这些步骤类似操作系统的安装步骤。OK,让我们开始
SD 分区
这一步骤区别不大按官网操作即可,SD 存储卡接入电脑里,查看所使用的 驱动器是多少,此处假设为 sdX,以下命令按实际替换 sdX
1 2 3 4 5 6 7 8 9 10
| dd if=/dev/zero of=/dev/sdX bs=1M count=8
fdisk /dev/sdX
mkfs.ext4 /dev/sdX1
|
镜像写入
1 2 3 4 5 6 7 8
| mkdir root
mount /dev/sdX1 root
wget http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C root
|
到此步骤与 pine64 安装教程一致,但此后就开始不同,由于每块版子都有自己的设备树,所以后面和自己的开发板型号做处理。
下载 pine64 wget http://os.archlinuxarm.org/os/allwinner/boot/pine64/boot.scr
启动文件, cat boot.scr
可以看到如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 'Vy�Z����-U-Boot boot script�# After modifying, run ./mkscr
# Set root partition to the second partition of boot device part uuid ${devtype} ${devnum}:${bootpart} uuid
setenv bootargs console=${console} root=PARTUUID=${uuid} rw rootwait
if load ${devtype} ${devnum}:${bootpart} ${kernel_addr_r} /boot/Image; then setenv fdtfile allwinner/sun50i-a64-${board_name}.dtb if load ${devtype} ${devnum}:${bootpart} ${fdt_addr_r} /boot/dtbs/${fdtfile}; then if load ${devtype} ${devnum}:${bootpart} ${ramdisk_addr_r} /boot/initramfs-linux.img; then booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}; else booti ${kernel_addr_r} - ${fdt_addr_r}; fi; fi; fi
|
乱码部分不用关心,由于本人的开发板是 orangepiwin 与 pin 同属于 allwinner/sun50i-a64-
类别下的开发板,所以我的修改内容较为简单增加一行 setenv board_name orangepi-win
,明确指定使用 orangepi-win 即可
其他开发板需要结合自己开发板规格 和 芯片型号来设置 fdtfile 文件,可能要修改 setenv fdtfile allwinner/sun50i-a64-${board_name}.dtb
这一整行内容
新建 boot.cmd
结合微调之后内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| part uuid ${devtype} ${devnum}:${bootpart} uuid
setenv bootargs console=${console} root=PARTUUID=${uuid} rw rootwait
if load ${devtype} ${devnum}:${bootpart} ${kernel_addr_r} /boot/Image; then setenv board_name orangepi-win setenv fdtfile allwinner/sun50i-a64-${board_name}.dtb if load ${devtype} ${devnum}:${bootpart} ${fdt_addr_r} /boot/dtbs/${fdtfile}; then if load ${devtype} ${devnum}:${bootpart} ${ramdisk_addr_r} /boot/initramfs-linux.img; then booti ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}; else booti ${kernel_addr_r} - ${fdt_addr_r}; fi; fi; fi
|
1 2 3 4 5 6
| mkimage -C none -A arm64 -T script -d boot.cmd boot.scr
cp boot.scr root/boot/boot.scr
umount root
|
引导写入
U-Boot 用于嵌入式系统的引导加载程序,此处可以直接用本人编译好的引导程序,点此下载,当然如果有兴趣研究 U-Boot 编译可以参考 github 上的一篇说明自行实践
1 2
| dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=8k seek=1
|
开机体验
引导程序写完后将 SD 安回开发板中,插上网线电源开机,观察路由器设备列表新出现的设备,使用 SSH 连接, 默认的帐号信息如下
- 普通账户 alarm, 密码 alarm
- 特权账户 root ,密码 root
1 2 3 4 5 6 7 8 9
| pacman-key --init pacman-key --populate archlinuxarm
vi /etc/pacman.d/mirrorlist
Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo 保存退出
timedatectl set-timezone Asia/Shanghai
|
自此完成相关安装操作
写在最后
其实折腾这个也有一段时间了,之前尝试了 alpine 系统,无法启动一直也没找到原因,后面索性就直接换系统,Arch Linux 优点就是滚动更新,还是比较好用的,希望本次的内容可以帮助到你。