教程[3] Orange Pi win plus 刷入 Arch Linux ARM

我在2018年买了个 OrangePi win plus 前几天在打扫的时候从床底翻到了,捡起来折腾了下,决定刷 Arch Linux ARM 继续吃灰

查看支持状态

我们先从 orangepi 官网 看看 cpu 参数

全志A64 Cortex-A53四核64位

可以知道是个全志珠海小厂的 cpu,基于 ARMv8

接着我们查看 Arch Linux ARM 官网
官网
由图可知 archlinuxarm 没有官方支持 orangepi win (win plus)

什么? 这就放弃了? 如果认真观察上面的图的话 会发现 ARMv8 的菜单还有个 Generic(通用)的链接,并且经过简单搜索,发现 唯一一台全志的设备 Pine64 用的 CPU 就是 Allwinner A64 那么上 ArchLinux 的希望还是很大的(所以才有了这个教程)

准备

相关文件:(不用急着下,下面都有直接输入的命令)

  1. http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
  2. boot_orange_pi_win.scr
  3. http://os.archlinuxarm.org/os/allwinner/boot/pine64/u-boot-sunxi-with-spl.bin

以及还需要一个 Linux 系统 用来挂载 ext4 dd 之类的操作

正式教程

大部分可以参考Arch Linux ARM 官方的这个 Pine64的教程 boot.scr 要自己修改过
所以这边只是个翻译了

1. 初始化 sd 卡 使用 dd 命令来搞 (sdX 的 X 自己 fdisk -l 找,下文不再重复)

dd if=/dev/zero of=/dev/sdX bs=1M count=8

2. fdisk 分区

fdisk /dev/sdX

按 o 回车 代表新建个分区表 按 n 新建分区 回车 接着按 p 回车 新建 primary 分区 接着按 1 回车 再输入 4096 在 first sector这边输 回车 回车 接下来按 w // 自己看官方教程啊

3. 格式化 sd 卡

mkfs.ext4 /dev/sdX1

4. 挂载系统盘

mkdir arch
mount /dev/sdX1 arch

5. 下载 Arch Linux ARM 并且解压到 u 盘

wget http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C arch

6. 在 /boot 生成 boot.scr 文件

# nano boot.cmd 然后扔下面的内容
# 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-orangepi-win.dtb # 这里和下面都要改成 orangepi-win 的 dtb 我改了可以直接用啦
if load ${devtype} ${devnum}:${bootpart} ${fdt_addr_r} /boot/dtbs/allwinner/sun50i-a64-orangepi-win.dtb; 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

然后编译一下

mkimage -C none -A arm -T script -d boot.cmd boot.scr

或者可以使用我提供的 boot_orange_pi_win.scr 文件 在文章开头有下载
这时候,系统就 ok 了,引导也成功了一半

写入 uboot 到扇区

wget http://os.archlinuxarm.org/os/allwinner/boot/pine64/u-boot-sunxi-with-spl.bin
dd if=u-boot-sunxi-with-spl.bin of=/dev/sda bs=8k seek=1

享受每天滚滚的快感

neofetch

后记

本文有 Linux 基本操作,比如输入命令之类的,已经尽可能详细了,如果不懂我也没办法(
本来还想扩展讲讲 uboot 还有 dtb 文件之类的作用,原理的,发现我也一知半解,而且一篇文章讲不完,就没有细讲了
整个操作就是 展开系统文件 让系统用正确的机型(就是dtb文件)来启动这个系统,没有什么难度,不过为了以后为了相同情况能少搜索点,节省点时间,还是写了个教程((( 理论上所有有 dtb 的 arm 设备 都能跑 archlinux 不用自己编译整个系统或者 Linux
不过无线(蓝牙)还是解决不了,用了比较奇妙的设备 AP6212(bcm434380A0),后面闲的蛋疼再来折腾了。

# tree dtbs
|-- allwinner
|   |-- sun50i-a64-amarula-relic.dtb
|   |-- sun50i-a64-bananapi-m64.dtb
|   |-- sun50i-a64-nanopi-a64.dtb
|   |-- sun50i-a64-oceanic-5205-5inmfd.dtb
|   |-- sun50i-a64-olinuxino-emmc.dtb
|   |-- sun50i-a64-olinuxino.dtb
|   |-- sun50i-a64-orangepi-win.dtb
|   |-- sun50i-a64-pine64-lts.dtb
|   |-- sun50i-a64-pine64-plus.dtb
|   |-- sun50i-a64-pine64.dtb
|   |-- sun50i-a64-pinebook.dtb
|   |-- sun50i-a64-pinephone-1.0.dtb
|   |-- sun50i-a64-pinephone-1.1.dtb
|   |-- sun50i-a64-pinetab.dtb
|   |-- sun50i-a64-sopine-baseboard.dtb
|   |-- sun50i-a64-teres-i.dtb
|   |-- sun50i-h5-bananapi-m2-plus-v1.2.dtb
|   |-- sun50i-h5-bananapi-m2-plus.dtb
|   |-- sun50i-h5-emlid-neutis-n5-devboard.dtb
|   |-- sun50i-h5-libretech-all-h3-cc.dtb
|   |-- sun50i-h5-libretech-all-h3-it.dtb
|   |-- sun50i-h5-libretech-all-h5-cc.dtb
|   |-- sun50i-h5-nanopi-neo-plus2.dtb
|   |-- sun50i-h5-nanopi-neo2.dtb
|   |-- sun50i-h5-orangepi-pc2.dtb
|   |-- sun50i-h5-orangepi-prime.dtb
|   |-- sun50i-h5-orangepi-zero-plus.dtb
|   |-- sun50i-h5-orangepi-zero-plus2.dtb
|   |-- sun50i-h6-beelink-gs1.dtb
|   |-- sun50i-h6-orangepi-3.dtb
|   |-- sun50i-h6-orangepi-lite2.dtb
|   |-- sun50i-h6-orangepi-one-plus.dtb
|   |-- sun50i-h6-pine-h64-model-b.dtb
|   |-- sun50i-h6-pine-h64.dtb
|   `-- sun50i-h6-tanix-tx6.dtb
|-- amd
|   |-- amd-overdrive-rev-b0.dtb
|   |-- amd-overdrive-rev-b1.dtb
|   |-- amd-overdrive.dtb
|   `-- husky.dtb
|-- amlogic
|   |-- meson-a1-ad401.dtb
|   |-- meson-axg-s400.dtb
|   |-- meson-g12a-sei510.dtb
|   |-- meson-g12a-u200.dtb
|   |-- meson-g12a-x96-max.dtb
|   |-- meson-g12b-a311d-khadas-vim3.dtb
|   |-- meson-g12b-gtking-pro.dtb
|   |-- meson-g12b-gtking.dtb
|   |-- meson-g12b-odroid-n2.dtb
|   |-- meson-g12b-s922x-khadas-vim3.dtb
|   |-- meson-g12b-ugoos-am6.dtb
|   |-- meson-gxbb-kii-pro.dtb
|   |-- meson-gxbb-nanopi-k2.dtb
|   |-- meson-gxbb-nexbox-a95x.dtb
|   |-- meson-gxbb-odroidc2.dtb
|   |-- meson-gxbb-p200.dtb
|   |-- meson-gxbb-p201.dtb
|   |-- meson-gxbb-vega-s95-meta.dtb
|   |-- meson-gxbb-vega-s95-pro.dtb
|   |-- meson-gxbb-vega-s95-telos.dtb
|   |-- meson-gxbb-wetek-hub.dtb
|   |-- meson-gxbb-wetek-play2.dtb
|   |-- meson-gxl-s805x-libretech-ac.dtb
|   |-- meson-gxl-s805x-p241.dtb
|   |-- meson-gxl-s905d-libretech-pc.dtb
|   |-- meson-gxl-s905d-p230.dtb
|   |-- meson-gxl-s905d-p231.dtb
|   |-- meson-gxl-s905d-phicomm-n1.dtb
|   |-- meson-gxl-s905d-sml5442tw.dtb
|   |-- meson-gxl-s905w-p281.dtb
|   |-- meson-gxl-s905w-tx3-mini.dtb
|   |-- meson-gxl-s905x-hwacom-amazetv.dtb
|   |-- meson-gxl-s905x-khadas-vim.dtb
|   |-- meson-gxl-s905x-libretech-cc.dtb
|   |-- meson-gxl-s905x-nexbox-a95x.dtb
|   |-- meson-gxl-s905x-p212.dtb
|   |-- meson-gxm-khadas-vim2.dtb
|   |-- meson-gxm-nexbox-a1.dtb
|   |-- meson-gxm-q200.dtb
|   |-- meson-gxm-q201.dtb
|   |-- meson-gxm-rbox-pro.dtb
|   |-- meson-gxm-s912-libretech-pc.dtb
|   |-- meson-gxm-vega-s96.dtb
|   |-- meson-sm1-khadas-vim3l.dtb
|   |-- meson-sm1-odroid-c4.dtb
|   `-- meson-sm1-sei610.dtb
|-- apm
|   |-- apm-merlin.dtb
|   `-- apm-mustang.dtb
|-- arm
|   |-- foundation-v8-gicv3-psci.dtb
|   |-- foundation-v8-gicv3.dtb
|   |-- foundation-v8-psci.dtb
|   |-- foundation-v8.dtb
|   |-- fvp-base-revc.dtb
|   |-- juno-r1.dtb
|   |-- juno-r2.dtb
|   |-- juno.dtb
|   |-- rtsm_ve-aemv8a.dtb
|   `-- vexpress-v2f-1xv7-ca53x2.dtb
|-- broadcom
|   |-- bcm2711-rpi-4-b.dtb
|   |-- bcm2837-rpi-3-a-plus.dtb
|   |-- bcm2837-rpi-3-b-plus.dtb
|   |-- bcm2837-rpi-3-b.dtb
|   `-- bcm2837-rpi-cm3-io3.dtb
|-- freescale
|   |-- imx8mm-evk.dtb
|   |-- imx8mn-ddr4-evk.dtb
|   |-- imx8mn-evk.dtb
|   |-- imx8mp-evk.dtb
|   |-- imx8mq-evk.dtb
|   |-- imx8mq-hummingboard-pulse.dtb
|   |-- imx8mq-librem5-devkit.dtb
|   |-- imx8mq-nitrogen.dtb
|   |-- imx8mq-phanbell.dtb
|   |-- imx8mq-pico-pi.dtb
|   |-- imx8mq-thor96.dtb
|   |-- imx8mq-zii-ultra-rmb3.dtb
|   |-- imx8mq-zii-ultra-zest.dtb
|   |-- imx8qxp-ai_ml.dtb
|   |-- imx8qxp-colibri-eval-v3.dtb
|   `-- imx8qxp-mek.dtb
|-- hisilicon
|   |-- hi3660-hikey960.dtb
|   |-- hi3670-hikey970.dtb
|   |-- hi3798cv200-poplar.dtb
|   |-- hi6220-hikey.dtb
|   |-- hip05-d02.dtb
|   |-- hip06-d03.dtb
|   `-- hip07-d05.dtb
|-- marvell
|   |-- armada-3720-db.dtb
|   |-- armada-3720-espressobin-emmc.dtb
|   |-- armada-3720-espressobin-v7-emmc.dtb
|   |-- armada-3720-espressobin-v7.dtb
|   |-- armada-3720-espressobin.dtb
|   |-- armada-3720-turris-mox.dtb
|   |-- armada-3720-uDPU.dtb
|   |-- armada-7040-db.dtb
|   |-- armada-8040-clearfog-gt-8k.dtb
|   |-- armada-8040-db.dtb
|   |-- armada-8040-mcbin-singleshot.dtb
|   |-- armada-8040-mcbin.dtb
|   |-- armada-8080-db.dtb
|   |-- cn9130-db.dtb
|   |-- cn9131-db.dtb
|   `-- cn9132-db.dtb
|-- mediatek
|   |-- mt2712-evb.dtb
|   |-- mt6755-evb.dtb
|   |-- mt6795-evb.dtb
|   |-- mt6797-evb.dtb
|   |-- mt6797-x20-dev.dtb
|   |-- mt7622-bananapi-bpi-r64.dtb
|   |-- mt7622-rfb1.dtb
|   |-- mt8173-elm-hana-rev7.dtb
|   |-- mt8173-elm-hana.dtb
|   |-- mt8173-elm.dtb
|   |-- mt8173-evb.dtb
|   |-- mt8183-evb.dtb
|   `-- mt8516-pumpkin.dtb
|-- nvidia
|   |-- tegra132-norrin.dtb
|   |-- tegra186-p2771-0000.dtb
|   |-- tegra210-p2371-0000.dtb
|   |-- tegra210-p2371-2180.dtb
|   |-- tegra210-p2571.dtb
|   |-- tegra210-p2894-0050-a08.dtb
|   |-- tegra210-p3450-0000.dtb
|   `-- tegra210-smaug.dtb
|-- qcom
|   |-- apq8016-sbc.dtb
|   |-- apq8096-db820c.dtb
|   |-- apq8096-ifc6640.dtb
|   |-- ipq6018-cp01-c1.dtb
|   |-- ipq8074-hk01.dtb
|   |-- msm8916-longcheer-l8150.dtb
|   |-- msm8916-mtp.dtb
|   |-- msm8916-samsung-a3u-eur.dtb
|   |-- msm8916-samsung-a5u-eur.dtb
|   |-- msm8992-bullhead-rev-101.dtb
|   |-- msm8994-angler-rev-101.dtb
|   |-- msm8996-mtp.dtb
|   |-- msm8998-asus-novago-tp370ql.dtb
|   |-- msm8998-hp-envy-x2.dtb
|   |-- msm8998-lenovo-miix-630.dtb
|   |-- msm8998-mtp.dtb
|   |-- qcs404-evb-1000.dtb
|   |-- qcs404-evb-4000.dtb
|   |-- sc7180-idp.dtb
|   |-- sdm660-xiaomi-lavender.dtb
|   |-- sdm845-cheza-r1.dtb
|   |-- sdm845-cheza-r2.dtb
|   |-- sdm845-cheza-r3.dtb
|   |-- sdm845-db845c.dtb
|   |-- sdm845-mtp.dtb
|   |-- sdm850-lenovo-yoga-c630.dtb
|   |-- sm8150-mtp.dtb
|   `-- sm8250-mtp.dtb
`-- rockchip
    |-- px30-evb.dtb
    |-- rk3308-evb.dtb
    |-- rk3308-roc-cc.dtb
    |-- rk3326-odroid-go2.dtb
    |-- rk3328-a1.dtb
    |-- rk3328-evb.dtb
    |-- rk3328-roc-cc.dtb
    |-- rk3328-rock64.dtb
    |-- rk3368-evb-act8846.dtb
    |-- rk3368-geekbox.dtb
    |-- rk3368-lion-haikou.dtb
    |-- rk3368-orion-r68-meta.dtb
    |-- rk3368-px5-evb.dtb
    |-- rk3368-r88.dtb
    |-- rk3399-evb.dtb
    |-- rk3399-ficus.dtb
    |-- rk3399-firefly.dtb
    |-- rk3399-gru-bob.dtb
    |-- rk3399-gru-kevin.dtb
    |-- rk3399-gru-scarlet-inx.dtb
    |-- rk3399-gru-scarlet-kd.dtb
    |-- rk3399-hugsun-x99.dtb
    |-- rk3399-khadas-edge-captain.dtb
    |-- rk3399-khadas-edge-v.dtb
    |-- rk3399-khadas-edge.dtb
    |-- rk3399-leez-p710.dtb
    |-- rk3399-nanopc-t4.dtb
    |-- rk3399-nanopi-m4.dtb
    |-- rk3399-nanopi-neo4.dtb
    |-- rk3399-orangepi.dtb
    |-- rk3399-pinebook-pro.dtb
    |-- rk3399-puma-haikou.dtb
    |-- rk3399-roc-pc-mezzanine.dtb
    |-- rk3399-roc-pc.dtb
    |-- rk3399-rock-pi-4.dtb
    |-- rk3399-rock960.dtb
    |-- rk3399-rockpro64-v2.dtb
    |-- rk3399-rockpro64.dtb
    |-- rk3399-sapphire-excavator.dtb
    |-- rk3399-sapphire.dtb
    `-- rk3399pro-rock-pi-n10.dtb

以上有的都可以尝试下 只需要修改 boot.scr 文件的 dtb 就 ok 了

最后 ArchLinux 赛高!