天天看點

如何建構一個arm64 AArch64的Ubuntu rootfs

如何建構一個arm64 AArch64的Ubuntu rootfs

文章目錄

    • 1 下載下傳檔案建立rootfs檔案夾
    • 2 安裝qemu-user-static搭建arm64模拟環境
    • 3 chroot 到 模拟arm64的檔案系統下
    • 4 安裝基礎的軟體包
    • 5 系統基礎的修改
      • 添加使用者、設定合适的組并設定密碼
      • 設定主機名
      • 設定自動更新DNS
      • 配置登入的序列槽
    • 6 退出并制作可燒錄的固件
      • 退出arm64模拟檔案系統
      • 使用dd指令制作空的固件容器
      • 将arm64檔案系統内容制作到ubuntu-rootfs.img
      • Finished

本文參考自

gun-linux.org

的文章 ,本文将實作如何通過Ubuntu-core在Aarch64上建構最小的Ubuntu檔案系統。

ubuntu-base-arm64的下載下傳位址

1 下載下傳檔案建立rootfs檔案夾

mkdir ~/rootfs && cd ~/rootfs
wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.1/release/ubuntu-base-16.04.2-base-arm64.tar.gz
mkdir ubuntu-rootfs
tar -xvf ubuntu-base-16.04.2-base-arm64.tar.gz -C ubuntu-rootfs
cd ubuntu-rootfs
ls
           

檢視目前路徑下的檔案結構已經OK

bin   dev  home  media  opt   root  sbin  srv  system  usr
boot  etc  lib   mnt    proc  run   snap  sys  tmp     var
           

2 安裝qemu-user-static搭建arm64模拟環境

此時位于 ~/rootfs/ubuntu-rootfs/ 路徑下,需要安裝qemu-user-static并拷貝qemu-aarch64-static到目前路徑的 usr/bin/下。

apt-get install qemu-user-static
cp /usr/bin/qemu-aarch64-static  usr/bin
cp -b /etc/resolv.conf etc/
           

3 chroot 到 模拟arm64的檔案系統下

#建立ch-mount.sh 腳本
cd ../
vi ch-mount.sh
           

将以下的内容複制到ch-mount.sh中即可。

#!/bin/bash
# 
function mnt() {
    echo "MOUNTING"
    sudo mount -t proc /proc ${2}proc
    sudo mount -t sysfs /sys ${2}sys
    sudo mount -o bind /dev ${2}dev
    sudo mount -o bind /dev/pts ${2}dev/pts		
    sudo chroot ${2}
}
function umnt() {
    echo "UNMOUNTING"
    sudo umount ${2}proc
    sudo umount ${2}sys
    sudo umount ${2}dev/pts
    sudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
    mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
    umnt $1 $2
else
    echo ""
    echo "Either 1'st, 2'nd or both parameters were missing"
    echo ""
    echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
    echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
    echo ""
    echo "For example: ch-mount -m /media/sdcard/"
    echo ""
    echo 1st parameter : ${1}
    echo 2nd parameter : ${2}
fi
           

通過ch-mount.sh腳本chroot到arm64的檔案系統下

./ch-mount.sh -m ubuntu-rootfs
           

4 安裝基礎的軟體包

apt-get install \
  language-pack-en-base \
  sudo \
  ssh \
  net-tools \
  network-manager \
  iputils-ping \
  rsyslog \
  bash-completion \
  htop \
           

5 系統基礎的修改

添加使用者、設定合适的組并設定密碼

useradd -s '/bin/bash' -m -G adm,sudo yourusername
echo "Set password for yourusername:"
passwd yourusername
echo "Set password for root:"
passwd root
           

設定主機名

echo 'ubuntu.yourusername' > /etc/hostname
           

設定自動更新DNS

dpkg-reconfigure resolvconf
           

配置登入的序列槽

因為暫時未安裝桌面,是以這裡的配置要具體和核心中登入的序列槽的裝置對應起來,不然對導緻無法通過序列槽登入的問題。

在 /etc/init/ 下添加或修改ttyS0.conf

start on stopped rc or RUNLEVEL=[12345]
stop on RUNLEVEL [!12345]
respawn
exec /sbin/getty -L 115200 ttyFIQ0 vt102
           

本文環境的登入序列槽為ttyFIQ0,具體可能會因為目标闆差異而不同,具體要參考所使用的平台進行修改。

6 退出并制作可燒錄的固件

退出arm64模拟檔案系統

exit
./ch-mount -u ubuntu-rootfs
           

使用dd指令制作空的固件容器

dd if=/dev/zero of=ubuntu-rootfs.img bs=1M count=2048
sudo  mkfs.ext4  ubuntu-rootfs.img
           

将arm64檔案系統内容制作到ubuntu-rootfs.img

mkdir  ubuntu-mount
sudo mount ubuntu-rootfs.img ubuntu-mount/
sudo cp -rfp ubuntu-rootfs/*  ubuntu-mount/
sudo umount ubuntu-mount/
e2fsck -p -f ubuntu-rootfs.img
resize2fs -M ubuntu-rootfs.img
           

Finished