firefly自带的文件系统,由于缺少一些基本功能模块,因此,我们可以自己手动制作一个ubuntu20.04的文件系统。

下载Ubuntu根文件系统

http://cdimage.ubuntu.com/ubuntu-base/releases/

安装虚拟机

apt-get install qemu-user-static

解压

mkdir ubuntu-rootfs
tar -xpf ubuntu-base-20.04.5-base-arm64.tar.gz -C ubuntu-rootfs

复制一下虚拟机的运行环境

cp -b /etc/resolv.conf ubuntu-rootfs/etc/resolv.conf
cp /usr/bin/qemu-aarch64-static ubuntu-rootfs/usr/bin/

复制官方外设驱动文件

将开发板挂载到虚拟机上,将开发板的/vendor,/system,/lib/firmware,这三个文件夹复制到我们自己的文件系统中。

挂载根文件系统

创建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
echo "CHROOT..."
sudo chroot ${2}
echo "Success!"
}
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

把下载好的脚本置于ubuntu-rootfs目录的上一级目录,并修改权限:

chmod a+x ch-mount.sh
./ch-mount.sh -m ubuntu-rootfs/

执行mount动作,注意退出后一定再执行 ./ch-mount.sh -u ubuntu-rootfs/,否则你的本机ubuntu系统会出问题,需要重启才能恢复正常。

拷贝bash依赖库

执行挂载脚本时遇到以下错误,可以拷贝bash动态库。

➜  tools sudo chroot ubuntu-rootfs
chroot: failed to run command ‘/bin/zsh’: No such file or directory

查看/bin/bash文件所依赖的动态链接库,然后依次拷贝到相应目录。由于我安装了zsh,所以除了拷贝bash动态库外,还需要拷贝zsh动态库。没有安装zsh的可以不用拷贝zsh动态库。

zhongyi@ubuntu:~$ ldd /bin/zsh
linux-vdso.so.1 (0x00007ffd5c1dc000)
libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007f4b4d9d7000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4b4d7d3000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f4b4d5a9000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4b4d20b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4b4ce1a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4b4debc000)
zhongyi@ubuntu:~$ ldd /bin/bash
linux-vdso.so.1 (0x00007ffd8335a000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f50a4d2a000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f50a4b26000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f50a4735000)
/lib64/ld-linux-x86-64.so.2 (0x00007f50a526e000)
$ mkdir lib64
$ cp /lib64/ld-linux-x86-64.so.2 ./lib64/
$ mkdir ./lib/x86_64-linux-gnu
$ cp /lib/x86_64-linux-gnu/libtinfo.so.5 ./lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libdl.so.2 ./lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libc.so.6 ./lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libcap.so.2 ./lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libm.so.6 ./lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libc.so.6 ./lib/x86_64-linux-gnu/
$cp /bin/bash ubuntu-rootfs/bin
$cp /bin/zsh ubuntu-rootfs/bin

执行挂载

成功挂载后,会看到自动切换为root用户。

zhongyi@ubuntu:~/tools$ ./ch-mount.sh -m ubuntu-rootfs/
MOUNTING...
CHROOT...
zsh: failed to load module `zsh/zle': /usr/lib/x86_64-linux-gnu/zsh/5.4.2/zsh/zle.so: cannot open shared object file: No such file or directory
#已经成功挂载
ubuntu#

安装必要的软件

apt-get update
apt-get -y install vim nfs-common sudo ssh net-tools ethtool wireless-tools xfce4-power-manager xinit network-manager iputils-ping rsyslog bash-completion lxtask htop synaptic --no-install-recommends

更换源

vim /etc/apt/source.list
#添加中科大源
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe #添加阿里源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse #添加清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

设置账户名和密码

useradd -s '/bin/bash' -m -G adm,sudo firefly
passwd firefly
passwd root

设置主机名

echo 'ubuntu.firefly' > /etc/hostname

添加主机入口到/etc/hosts

127.0.0.1 localhost
127.0.0.1 ubuntu.firefly
127.0.1.1 firefly

添加nameserver

vim /etc/resolvconf/resolv.conf.d/head
#添加nameserver
nameserver 114.114.114.114
nameserver 8.8.8.8

取消挂载

exit
./ch-mount.sh -u ubuntu-rootfs/

创建 mkrootfs.sh文件,写入以下脚本,其中2048取决于你的根文件系统实际大小,比如安装了桌面环境后若大小超过2048M,就改大一点

#!/bin/bash
#
dd if=/dev/zero of=ubuntu-rootfs.img bs=1M count=2048
sudo mkfs.ext4 ubuntu-rootfs.img
rm -r rootfs
mkdir rootfs
sudo mount ubuntu-rootfs.img rootfs/
sudo cp -rfp ubuntu-rootfs/* rootfs/
sudo umount rootfs/
e2fsck -p -f ubuntu-rootfs.img
resize2fs -M ubuntu-rootfs.img

执行制作

➜  tools ./mkrootfs.sh
➜ tools ls -al |grep *.img
-rw-rw-r-- 1 zhongyi zhongyi 1497706496 Sep 30 21:32 ubuntu-rootfs.img

烧写镜像

sudo upgrade_tool di -rootfs ubuntu-rootfs.img

本文参考

https://blog.csdn.net/Alex_Vinci/article/details/122818828

https://dev.t-firefly.com/thread-12739-1-1.html

https://blog.csdn.net/vcsuanfadaima/article/details/112280308

https://www.csdn.net/tags/OtTaIg1sNTAwNTQtYmxvZwO0O0OO0O0O.html

【RK3399】2.制作ubuntu20.04 roomfs的更多相关文章

  1. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作win2008r2-19

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作win2008r2-19 欢迎加QQ群:1026880196 进行交流学习 制作OpenSta ...

  2. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作fedora27-18

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作fedora27-18 欢迎加QQ群:1026880196 进行交流学习   制作OpenSt ...

  3. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作debian9.6.0-17

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作debian9.6.0-17 欢迎加QQ群:1026880196 进行交流学习   制作Ope ...

  4. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16 欢迎加QQ群:1026880196 进行交流学习   制作Ope ...

  5. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作centos7.8-15

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作centos7.8-15 欢迎加QQ群:1026880196 进行交流学习   制作OpenS ...

  6. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作centos6.5-14

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作centos6.5-14 欢迎加QQ群:1026880196 进行交流学习 制作OpenSta ...

  7. Ubuntu20.04 Focal Cloudimage扩容以及KVM安装的问题记录

    运行Ubuntu20.04的KVM虚机遇到一些问题, 单独总结一下 镜像扩容 不能用virt-resize --expand /dev/sda1 old.qcow2 new.qcow2这样的命令, 这 ...

  8. Mac Mini 安装Ubuntu20.04 KVM

    在一台 Mac Mini mid 2011上安装Ubuntu20.04并配置KVM环境, 过程也适用于其他版本的Mac Mini. 硬件配置 I5 2415, 内存8G*2, 硬盘 SSD 500G ...

  9. 从零开始安装搭建win10与ubuntu20.04双系统开发环境——集安装、配置、软件、美化、常见问题等于一体的——超详细教程

    目录 **前言 ** 关于系统安装配置与软件安装 一.Win10安装ubuntu20.04双系统 1.按照自己的需求分区 2.配置软件镜像源 软件包管理工具介绍 更换APT源--使用国内镜像 3.解决 ...

  10. Ubuntu20.04 Docker搭建远程xfce桌面以及ssh教程

    简介:本文主要介绍ubuntu20.04容器中搭建xfce远程桌面.C++.Go环境.容器内docker操作配置. 一.创建容器1.创建容器 docker pull ubuntu:20.04docke ...

随机推荐

  1. HoG / SIFT 学习指北

    本文 OI / ACM 无关. Explain HoG 原文出处: N. Dalal, and B. Triggs, Histograms of oriented gradients for huma ...

  2. Nim 枚举类型 对性能的影响

    Nim 枚举类型 对性能的影响 继上一篇文章<Nim 概念 Concept 对性能的影响>后,我在想,既然 method 虚方法造成性能的影响很大,那么有没有更快的方法实现,当然是有的,那 ...

  3. 2023年的PHP项目部署笔记。什么?还有人用PHP?

    前言 这是我第一次用 PHP 的包管理工具 composer 一开始用 docker 进行部署,但一直出问题,最后还是选择直接在服务器上安装 php-fpm 搭配 nginx 的方案了. PS:doc ...

  4. 算法那么多,AI量化交易策略如何选择最佳算法?

    常见算法优劣比较 算法没有最好,只有更好. 这个问题的答案取决于许多因素,例如股票市场的条件,数据集的质量和特征工程的有效等.接下来,我们来看看这些算法的优势和劣势: 神经网络:适用于复杂的非线性问题 ...

  5. 华企盾DSC控制台+系统运维模块连接不上问题

    解决方法:把rundll32.exe进程结束之后再点系统运维模块

  6. 手写滑动同步滚动进度条jq插件

    因需要一种滑动显示内容,并且带可拖动的进度条,即下面这种效果 找了很多插件,总有地方不能满足需求.于是决定自己手写,下面为完整源码: swiper.js 1 $.swiperCalculator = ...

  7. 【C#】【DateTime】获取当前时间的前一天或者后一天方法学习

    假期懈怠了一阵子,因为工作环境没有网络,随即记录下当时的问题: 1.关于DateTime.Now(2023/10/07)的前一天的时间(2023/10/06),想要通过ToString转换成字符串后除 ...

  8. 【OpenCV】在MacOS上源码编译OpenCV

    前言 在做视觉任务时,我们经常会用到开源视觉库OpenCV,OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,它具有C++,Python,Java和MATLA ...

  9. Python——第二章:替换和切割

    strip() 用法: .strip() 是字符串方法之一,在 Python 中用于移除字符串开头和结尾的空白字符(包括空格.制表符 \t.换行符\n等).这个方法返回一个新的字符串,原始字符串本身不 ...

  10. 屎山代码风格指南(避免被优化&&避免被接盘)

    欢迎补充!!! 序言 良好的代码结构:Bad 使用有意义的变量和函数名,遵循命名规范,使代码易于理解. 组织代码,使用适当的文件和文件夹结构,保持模块化. 避免全局变量的滥用,尽量使用局部作用域. 单 ...