斐讯 N1 运行 ArchLinuxARM

2020-05-31 957点热度 3人点赞 5条评论

小山之前教大家斐讯 N1 如何运行 Linux,当时用的发行版是 Armbian,由于它有镜像文件,操作起来也比较简单。

不过 Armbian 只有 Debian 和 Ubuntu 两个版本可以选择,虽然 Ubuntu 可以满足大多数人的需求,不过还是有些人喜欢像 ArchLinux 这样的滚动发行版。

让 N1 运行其他的 Linux 发行版并不是什么难事,支持 ARM 的发行版都能在 N1 运行。这篇文章就以 ArchLinuxARM 为基础,教大家如何让 N1 运行其他 Linux 发行版。

虽然我会使用一些 ArchLinux 独有的东西,比如 ArchLinux 的包管理器,不过只要理解了其中的原理,运行其他发行版并不是什么难事。

phicomm-n1-archlinuxarm.png

准备工作

你的 N1 需要具备可以从 U 盘启动 Linux 的条件,简单的说就是降级启动分区,具体操作可参考:《斐讯N1折腾记:降级及刷入官改》。

你需要在 Linux 系统完成以下操作,虚拟机或物理机都可以,虚拟机需要可以直接访问你的 U 盘,不是共享文件的那种。

系统 CPU 架构需要是 x86_64 或 aarch64,可以使用uname -m命令查看系统 CPU 架构。

如果不是 ArchLinux 则需要有 Docker,因为要用到 ArchLinux(ARM) 辅助操作。

Linux 和 ArchLinux(ARM) 的基础知识 ,我并不会教你 ArchLinux(ARM) 怎么用,以及装好之后要做些什么。

U 盘分区和格式化

执行sudo fdisk -l查看 U 盘的设备路径,如果你的 U 盘是刚插入的,通常是最后一个设备。如下图示例:

fdisk

 

记得替换以下命令的${devPath}为U盘的设备路径。

清空U盘分区表:sudo dd if=/dev/zero of=${devPath} bs=1M count=8 && sudo sync

进入 fdisk 交互界面:sudo LANG=C fdisk ${devPath}

输入o创建 DOS 分区表

输入n创建新分区,提示Partition type按回车,提示Partition number按回车,提示First sector按回车,提示Last sector输入+256M并按回车。

输入t修改第一个分区类型,提示Hex code输入c并按回车。

输入n创建新分区,提示Partition type按回车,提示Partition number按回车,提示First sector按回车,提示Last sector按回车。

输入p查看分区表,如果输出类似下图,输入w保存分区表并退出。分区表

执行sudo mkfs.fat -F 32 ${part1Path}格式化第一个分区为 FAT32,替换${part1Path}为第一个分区路径。示例:sudo mkfs.fat -F 32 /dev/sdd1

执行sudo mkfs.ext4 ${part2Path}格式化第二个分区为 ext4,替换${part2Path}为第二个分区路径。示例:sudo mkfs.ext4 /dev/sdd2

写入系统文件

下载 ArchLinuxARM 系统文件:curl -L -o "$HOME/ArchLinuxARM-aarch64-latest.tar.gz" https://opentuna.cn/archlinuxarm/os/ArchLinuxARM-aarch64-latest.tar.gz

下载 N1 引导文件:curl -L -o "$HOME/n1-boot.tar.gz" "https://cdn.mivm.cn/www.mivm.cn/archives/phicomm-n1-archlinuxarm/boot.tar.gz?ver=4"

创建根分区挂载点:sudo mkdir /tmp/archlinux-arm

创建启动分区挂载点:sudo mkdir /tmp/archlinux-arm/boot

挂载第二个分区:sudo mount ${part2Path} /tmp/archlinux-arm

挂载第一个分区:sudo mount -o umask=0077 ${part1Path} /tmp/archlinux-arm/boot

解压系统文件到根分区:sudo bsdtar -xpf "$HOME/ArchLinuxARM-aarch64-latest.tar.gz" -C /tmp/archlinux-arm

解压引导文件到启动分区:sudo bsdtar -xf "$HOME/n1-boot.tar.gz" -C /tmp/archlinux-arm/boot

编辑/tmp/archlinux-arm/etc/fstab文件,添加以下内容:

UUID=${part2UUID} / ext4 rw,relatime 0 1

UUID=${part1UUID} /boot vfat rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2

分别替换${part1UUID}${part2UUID}为第一个分区和第二个分区的 UUID,可以使用sudo blkid查看所有分区的 UUID。

执行sudo sed -i 's/@{UUID}/${part2UUID}/' /tmp/archlinux-arm/boot/extlinux/extlinux.conf指定内核引导参数的根分区,将${part2UUID}替换为第二个分区的 UUID。

安装内核

ArchLinuxARM 默认附带的内核不适用于 N1,所以要安装新的内核,安装操作可以手动完成,方便起见,推荐使用 ArchLinux(ARM) 辅助安装。

内核软件包下载地址:https://share.weiyun.com/9oPFDBtB,务必下载 linux-amlogic,而不是 linux-amlogic-headers,如果需要无线网络或蓝牙支持,可以下载 firmware 目录下的软件包并安装。

下载完成后将软件包复制到/tmp/archlinux-arm/

内核配置文件来自 AUR 的 linux-phicomm-n1 软件包,已修复 N1 负载异常。编译文件可在我的 Github 找到。

如果你当前的系统 CPU 架构与下面第一个括号内的架构匹配,再执行后面的命令

注册 QEMU 处理程序 (x86_64) :sudo docker run --rm --privileged multiarch/qemu-user-static -p yes --reset

运行 ArchLinux 容器 (x86_64)(如果你当前的系统是 ArchLinux 可省略):sudo docker run -i -t --rm --privileged -v /tmp/archlinux-arm:/tmp/archlinux-arm archlinux

运行 ArchLinuxARM 容器 (aarch64)(如果你当前的系统是 ArchLinux 可省略) :sudo docker run -i -t --rm --privileged -v /tmp/archlinux-arm:/tmp/archlinux-arm -w agners/archlinuxarm

以下命令均在容器内运行(如果你当前的系统是 ArchLinux 可直接执行)

安装 Arch 安装脚本:pacman -Sy --noconfirm arch-install-scripts

切换到U盘的系统:arch-chroot /tmp/archlinux-arm

初始化 pacman 密钥:pacman-key --init && pacman-key --populate archlinuxarm

更新软件包数据库:pacman -Sy

删除默认内核软件包:pacman -Rns linux-aarch64

安装 N1 内核软件包:pacman -U /linux-amlogic-*.pkg.tar.zst

清理软件包:rm -f /linux-amlogic-*.pkg.tar.zst

退出U盘的系统环境:exit

退出容器环境(如果你没有使用 ArchLinux 容器可省略):exit


现在可以卸载分区并移除U盘,插入 N1 开机测试是否可以成功启动。

root 用户的默认密码是root

还有个名为 alarm 的普通用户,默认密码是alarm

SSH 默认启用

默认使用 systemd-netword 管理网络并启用 DHCP


如果你有任何问题或不懂的地方,欢迎加入 QQ 群与我交流。

微信公众号二维码

微信扫描二维码关注我们

如果觉得文章有帮助到你,可以点击下方的打赏按钮赞助下服务器费用。

小山

一个什么都不会但要装作很厉害的人

文章评论

  • LOGI

    部署了几个服务,不想折腾了

    2020-08-19
  • Damenly

    Thanks!
    不过楼主忘记打包u-boot了?

    2020-06-05
    • 小山

      @Damenly 不需要 U-BOOT,N1 引导 Linux 是用自带的 U-BOOT,然后执行 U 盘的 s905_autoscript。

      2020-06-05
      • Damenly

        @小山 哦哦,请问楼主是怎么解决蓝牙的?pi-bluetooth aur 看起来不行

        2020-06-14
        • 小山

          @Damenly 蓝牙不能用是内核的问题,5.7-rc 的时候还能用的,不过好像因为什么错误,正式版去掉了。

          2020-06-14
  • 此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据