如何制作ubuntu arm64的rootfs文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/UbuntuTouch/article/details/83585564

在我们做项目的时候,我们会经常遇到一种情况,那就是想制作我们自己的一个ARM的rootfs。在这篇文章中,我们来介绍如何制作的详细过程:

 

下载最新的arm64 ubuntu release image

 

最新的Ubuntu arm64的image可以在这里找到:

http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.5/release/ubuntu-base-16.04.5-base-arm64.tar.gz

我们可以直接下载,或者通过如下的办法来下载:

$ mkdir ~/ubuntu-rootfs && cd ubuntu-rootfs

然后,我们通过如下的方法来下载arm64的release软件:

$ wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04.5/release/ubuntu-base-16.04.5-base-arm64.tar.gz
$ tar -xpf ubuntu-base-16.04.2-base-arm64.tar.gz

等我们解压缩后,就可以直接删除这个下载的ubuntu-base-16.04.2-base-arm64.tar.gz文件了。ls 命令之后的样子是这样的:

user@user:~/ubuntu-rootfs$ ls
bin   dev  home  media  opt   root  sbin  sys  usr
boot  etc  lib   mnt    proc  run   srv   tmp  var

 

安装 qemu-user-static

 

我们可以使用如下的指令来完成对qemu-user-static的安装

$ pwd
/home/user/ubuntu-rootfs
$ apt-get install qemu-user-static
$ cp /usr/bin/qemu-aarch64-static  usr/bin
$ cp -b /etc/resolv.conf etc/

在这里我们要注意的是我们针对arm64的qemu-user-static安装的文件是qemu-aarch64-static。

 

mount proc, sys, dev, dev/pts到新的文件系统

 

利用一个简单的ch-mount.sh脚本来完成这个动作。它可以帮我们mount及unmount。我们把下载好的脚本置于ubuntu-rootfs目录的上一级目录,并做如下的处理:

user@user:~$ ls ch-mount.sh 
ch-mount.sh
user@user:~$ chmod a+x ch-mount.sh 
user@user:~$ sudo bash ch-mount.sh -m ubuntu-rootfs/
[sudo] user 的密码: 
MOUNTING
root@user:/# 

这样我们就进入到chroot的环境中了。

 

更新系统并安装所需要的包

 

运用如下的命令来更新系统,并安装所需要的包。依赖网络环境,安装的时间可能会有差异。

root@user:/# apt-get update
root@user:/# apt-get install language-pack-en-base sudo ssh net-tools ethtool wireless-tools lxde xfce4-power-manager xinit xorg network-manager iputils-ping rsyslog lightdm-gtk-greeter alsa-utils gnome-mplayer lightdm bash-completion lxtask htop python-gobject-2 python-gtk2 synaptic --no-install-recommends

系统基础改造

# 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

# apt-get install resolvconf
# dpkg-reconfigure resolvconf

添加主机入口到/etc/hosts:

127.0.0.1    localhost
127.0.1.1    yourhostname 

设置timezone

# apt-get install tzdata
# dpkg-reconfigure tzdata

在lib目录下创建目录并拷入我们自己硬件相关的模块文件

我们可以从我们的host中拷入我们想要的arm64的模块到系统中,比如:

# cp -r /opt/out/modules/3.4.5 ~/ubuntu-rootfs/lib/modules

在这里,我们把我们想要定制的包拷入到lib之下的modules中。

选项:启动serial console登录

我们可以创建/etc/init/ttyS0.conf文件,并写入如下的内容:

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

在host中可以同如下的命令来登录:

$ sudo start ttyS0

等我们完成上面的工作后,我们就可以开始制作我们的rootfs文件了。在上面我们已经把我们所需要的文件拷入到相应的文件目录之中了。

 

退出并制作可烧录的固件

root@user:/# exit          
exit
user@user:~$ pwd
/home/user
user@user:~$ ./ch-mount.sh -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

这样最终,我们生成了我们所需要的ubuntu-rootfs.img文件:

user@user:~$ ls ubuntu-rootfs.img -hal
-rw-rw-r-- 1 user user 2.0G 10月 31 16:23 ubuntu-rootfs.img
user@user:~$ file ubuntu-rootfs.img
ubuntu-rootfs.img: Linux rev 1.0 ext4 filesystem data, UUID=9ed3cd8b-e81a-4ec9-a8e0-bd185f223936 (needs journal recovery) (extents) (large files) (huge files)

参考文章: 

https://gnu-linux.org/building-ubuntu-rootfs-for-arm.html
https://olimex.wordpress.com/2014/07/21/how-to-create-bare-minimum-debian-wheezy-rootfs-from-scratch/

 

没有更多推荐了,返回首页