rootfs制作、x86下定制arm镜像

记录下rootfs制作、x86下定制arm镜像的大体流程

1 rootfs制作

1.1 方式一:ubuntu base

1.1.1 准备工作

下载base镜像
mkdir rootfs
cd rootfs
wget "http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/ubuntu-base-18.04.5-base-arm64.tar.gz"
解压到ubuntu目录
mkdir ubuntu
sudo tar -xpf ubuntu-base-18.04.5-base-arm64.tar.gz -C ubuntu

1.1.2 预置配置

解压后,可以ls看看,这就是最小化的ubuntu根文件系统,可以直接用来生成镜像,但里面基本是要啥没啥。可以在PC里模拟运行这个根文件系统,运行后安装配置一些需要预置的程序,再把此根文件系统打包成固件。
在PC上模拟运行根文件系统,需要安装qemu-user-static

安装qemu
sudo apt-get install qemu-user-static
修改配置
cd ubuntu
sudo cp /usr/bin/qemu-arm-static usr/bin/
使用脚本切换根文件系统(chroot)
cd rootfs
chmod +x ch-mount.sh
./ch-mount.sh -m ubuntu/
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 chroot ${2}
}

function umnt() {
    echo "UNMOUNTING"
    sudo umount ${2}proc
    sudo umount ${2}sys
    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

1.1.3 打包镜像

卸载根文件系统
./ch-mount.sh -u ubuntu/
dd制作空镜像
dd if=/dev/zero of=ubuntu.img  bs=1M count=3000
格式化镜像文件,并加入linuxroot卷标
sudo mkfs.ext4 -F -L linuxroot ubuntu.img
挂载镜像并往里面拷入修改后的文件系统
mkdir ubuntu-mount
sudo mount  ubuntu.img ubuntu-mount
sudo cp -rfp ubuntu/* ubuntu-mount
缷载镜像
sudo umount ubuntu-mount
检查修复ubuntu.img镜像的文件系统
e2fsck -p -f ubuntu.img
减小ubuntu.img镜像文件的大小
resize2fs -M ubuntu.img

1.2 方式二:拷贝已安装ubuntu根文件

1.2.1 创建镜像

创建空镜像
dd if=/dev/zero of=ubuntu.img  bs=1M count=6144
创建分区
parted ubuntu.img --script -- mklabel msdos
parted ubuntu.img --script -- mkpart primary ext4 0% 100%
挂载镜像并格式化
losetup -f 查看可用的loop
losetup /dev/loop1 ubuntu.img
kpartx -av /dev/loop1
mkfs.ext4 /dev/mapper/loop1n1

1.2.2 拷贝内容

mkdir /rootfs
mount /dev/mapper/loop1n1 /rootfs
cd /rootfs
rsync  -r  /* /rootfs --exclude="/rootfs"

1.2.3 卸载瘦身

cd
umount /dev/mapper/loop1n1
kpartx -d ubuntu.img
e2fsck -p -f ubuntu.img
resize2fs -M ubuntu.img

2 x86环境定制arm rootfs

1、准备工作

1.1 安装qemu

在x86环境下安装qemu模拟器

(1)ubuntu x86
apt-get install qemu
(2)centos x86
#获取源码
wget https://download.qemu.org/qemu-4.1.0.tar.xz
tar xvJf qemu-4.1.0.tar.xz
cd qemu-4.1.0
./configure
make
#安装编译工具
yum install gcc
yum install autoconf automake libtoo
#编译源码
cd qemu
./configure --target-list=x86_64-softmmu --enable-debug
make -j4
若编译过程报错,根据错误找到未安装的依赖包,通过yum进行安装
make install
#验证
qemu 进行补全操作,看是否有qemu-system-x86等命令。

1.2 制作无分区的空镜像

qemu模拟启动arm系统,启动的rootfs镜像不可以有分区,img格式如下

file ubuntu.img
ubuntu-test.img: Linux rev 1.0 ext4 filesystem data, UUID=24253956-6034-4972-b52d-1663006e89ce (needs journal recovery) (extents) (64bit) (large files) (huge files)
qemu创建空镜像
qemu-img create -f raw ubuntu.img 6G
挂载镜像
mkdir ubuntu
mount ubuntu.img ubuntu

2、制作rootfs

2.1 拷贝内容

准备一个第一步制作完成的rootfs

losetup /dev/loop1 ubuntu-18.04.img
kpartx -av /dev/loop1
mkdir ubuntu18.04
mount /dev/mapper/loop1n1 ubuntu18.04
cp -rpf ubuntu18.04/* ubuntu/

2.2 修改fstab

cd ubuntu
vim etc/fstab
#fstab内容
/dev/vda     /                   ext4     defaults        0 0

2.3 卸载瘦身

umount /dev/mapper/loop1n1
kpartx -d ubuntu.img
umount ubuntu.img
e2fsck ubuntu.img
resize2fs ubuntu.img

2.4 qemu启动arm系统

需拷贝对应的boot/下的内核文件到当前qemu文件夹下
vim start-qemu-ubuntu.sh
chmod u+x start-qemu-ubuntu.sh
./start-qemu-ubuntu.sh

脚本中指定的内核版本修改为boot/中对应的版本

start-qemu-ubuntu.sh脚本内容
qemu-system-aarch64 \
        -m 1024 \
        -cpu cortex-a57 -M virt \
        -nographic \
        -smp 4 \
        -kernel boot/vmlinuz-5.15.0-46-generic \
        -initrd boot/initrd.img-5.15.0-46-generic \
        -append "root=/dev/vda" \
        -drive if=none,file=ubuntu-test.img,format=raw,id=hd0 \
        -device virtio-blk-device,drive=hd0
关闭qemu模拟器
Crtl+A X
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值