Jestson Nano自定义根文件系统创建(支持NVIDIA图形库的最小根文件系统)

前面两篇,我们通过裁剪内核,构造了一个自定义内核,但是官方的根文件系统太大,有13G之多,而nano的emmc版本带的flash只有16gb,所以,根文件系统的裁剪势在必行。基于此,我们根据ubuntu基本的根文件创建自己的自定义文件系统。
整个过程我参考官网论坛的一些资料,做成了两个脚本,直接放在一个目录里面运行

sudo ./make_rootfs

即可在当前目录下的build目录下生成根文件系统,将build目录下的所有文件复制到/Linux_for_Tegra/rootfs目录下,运行以下指令:

cd ..
sudo ./apply_binaries.sh

这一步是用来安装NVIDIA的图形加速库,如果不运行,就失去了用这个板子的意义。

后面直接运行flash.sh脚本烧录即可!(烧录方法参见前两篇)

一、make_rootfs.sh

该脚本主要用来打包根文件,以及后续的一些清理工作。就是我们通常在主机上使用的qemu虚拟机。
其中的URL_ROOTFS_TGZ_BASE即ubuntu官方的基本根文件包,如果使用其他版本,请自行查找对应的版本。
另外,我是在ubuntu 18.04版本的主机上制作的,其他版本未做测试,请知悉。

#!/bin/bash

URL_ROOTFS_TGZ_BASE=http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/ubuntu-base-18.04.5-base-arm64.tar.gz

if [ "$EUID" -ne 0 ]
  then echo "Please run as root"
  exit
fi

SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
BUILD_DIR=$SOURCE_DIR/build

rm -r $BUILD_DIR
mkdir -p $BUILD_DIR
cd $BUILD_DIR

# download and extract rootfs
wget -O rootfs.tar.gz $URL_ROOTFS_TGZ_BASE
tar -xpf rootfs.tar.gz
rm rootfs.tar.gz

# chroot to rootfs
QEMU_PATH=/usr/bin/qemu-aarch64-static
if [ ! -f "$FILE" ]; then
    apt-get install qemu-user-static
fi
cp $QEMU_PATH $BUILD_DIR/usr/bin/ 

mount /sys $BUILD_DIR/sys -o bind
mount /proc $BUILD_DIR/proc -o bind
mount /dev $BUILD_DIR/dev -o bind

mv $BUILD_DIR/etc/resolv.conf $BUILD_DIR/etc/resolv.conf.saved
cp /etc/resolv.conf $BUILD_DIR/etc

cp $SOURCE_DIR/install.sh $BUILD_DIR/
LC_ALL=C chroot $BUILD_DIR /bin/bash -c ./install.sh
rm $BUILD_DIR/install.sh
echo "<================We are unmounting==============>"
umount $BUILD_DIR/sys
umount $BUILD_DIR/proc
umount $BUILD_DIR/dev

mv $BUILD_DIR/etc/resolv.conf.saved $BUILD_DIR/etc/resolv.conf

rm $BUILD_DIR/usr/bin/qemu-aarch64-static
rm -rf $BUILD_DIR/var/lib/apt/lists/*
rm -rf $BUILD_DIR/dev/*
rm -rf $BUILD_DIR/var/log/*
rm -rf $BUILD_DIR/var/tmp/*
rm -rf $BUILD_DIR/var/cache/apt/archives/*.deb
rm -rf $BUILD_DIR/tmp/*

二、intstall.sh

该脚本是关键的制作根文件系统的脚本。
主要工作是做了一些基本环境的配置,包含用户名,一些图形库必须的lib库。还有一些jetson nano必须的第三方工具等的下载和安装。脚本里面的一些下载网址可能会随着官方更新而下载失败,请自行更新!
有一点需要指出的是,我们增加用户的时候,一般的在命令行直接输入useradd ,然后输入密码,其实可以通过openssl直接设置密码。

useradd -p 密码

只不过这里的密码必须是密文,也就是,我们先通过openssl passwd -crypt来设置密码,然后将密文传入作为p的参数。即

PASSWORD=$(openssl passwd -crypt)
useradd -m -p $PASSWORD -s /bin/bash careray

上面的命令即会按照输入的明文密码,加密后添加用户careray。

#!/bin/bash

# update apt cache
apt-get update

# create user
apt-get install -y openssl
echo "Please provide the default password for the user:"
PASSWORD=$(openssl passwd -crypt)
useradd -m -p $PASSWORD -s /bin/bash careray
usermod -aG sudo careray

# install openssh
apt-get install -y openssh-server

# remove old docker version
apt-get remove \
    docker \
    docker-engine \
    docker.io \
    containerd \
    runc

# install dependencies
apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    binfmt-support \
    device-tree-compiler \
    libasound2 \
    libcairo2 \
    libdatrie1 \
    libegl1 \
    libegl1-mesa \
    libevdev2 \
    libfontconfig1 \
    libgles2 \
    libgstreamer-plugins-base1.0-0 \
    libgstreamer1.0-0 \
    libgtk-3-0 \
    libharfbuzz0b \
    libinput10 \
    libjpeg-turbo8 \
    libpixman-1-0 \
    libpangocairo-1.0-0 \
    libpangoft2-1.0-0 \
    libpng16-16 \
    libssl-dev \
    libunwind8 \
    libwayland-cursor0 \
    libwayland-egl1 \
    libx11-6 \
    libxext6 \
    libxkbcommon0 \
    libxrender1 \
    locales \
    locate \
    nano \
    network-manager \
    openssh-server \
    openssl \
    python \
    python3 \
    python3-pip \
    sudo \
    v4l-utils \
    software-properties-common

# We are required to provide libffi6
wget http://ftp.de.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-9_arm64.deb
dpkg --install libffi6_3.2.1-9_arm64.deb

# This has no installation candidate
wget http://ports.ubuntu.com/pool/universe/g/gst-plugins-bad1.0/libgstreamer-plugins-bad1.0-0_1.14.0-1ubuntu1_arm64.deb
dpkg --install libgstreamer-plugins-bad1.0-0_1.14.0-1ubuntu1_arm64.deb

# add docker gpg key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
apt-key fingerprint 0EBFCD88

# #Install multimedia packages
# wget  https://repo.download.nvidia.com/jetson/t210/pool/main/n/nvidia-l4t-multimedia/nvidia-l4t-multimedia_32.6.1-20210916211029_arm64.deb
# dpkg --install nvidia-l4t-multimedia/nvidia-l4t-multimedia_32.6.1-20210916211029_arm64.deb

# #Install gstreamer_32
# wget https://repo.download.nvidia.com/jetson/t210/pool/main/n/nvidia-l4t-gstreamer/nvidia-l4t-gstreamer_32.6.1-20210916211029_arm64.deb
# dpkg --install nvidia-l4t-gstreamer_32.6.1-20210916211029_arm64.deb

# add docker repo and install
add-apt-repository \
   "deb [arch=arm64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
apt-get update
apt-get install -y \
    docker-ce \
    docker-ce-cli \
    containerd.io

# add user to docker group
usermod -aG docker careray 
systemctl set-default multi-user.target

另外,在change root的时候可能会出现失败的情况,重启即可。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我会尽力回答你的问题。首先,busybox是一个非常小巧的程序集合,它集成了许多常用的Linux工具,可以用来替代传统的Linux命令行工具,从而使得系统的启动时间更快、占用的空间更小。基于busybox的文件系统可以使得系统更加轻量级,并且可以方便地定制。下面是实现基于busybox的文件系统的步骤: 1. 下载busybox源代码,并编译生成busybox可执行文件。你可以从busybox的官网上下载源代码,然后使用make命令进行编译。 2. 创建一个新的目录作为文件系统的挂载点。你可以使用mkdir命令创建一个空目录。 3. 将busybox可执行文件复制到文件系统目录中。你可以使用cp命令将busybox可执行文件复制到文件系统目录中。 4. 在文件系统目录中创建必要的目录和文件。据你的需求,你可以使用mkdir和touch命令创建必要的目录和文件。 5. 创建一个init脚本来启动系统。init脚本是系统的启动脚本,用来初始化系统并启动其他进程。你可以使用vi或者nano等编辑器创建init脚本。 6. 将文件系统目录打包成一个镜像文件。你可以使用tar命令将文件系统目录打包成一个tar包,然后使用mkfs命令将tar包转换成一个镜像文件。 7. 将镜像文件烧录到SD卡或者其他存储介质中。你可以使用dd命令将镜像文件写入到SD卡或者其他存储介质中。 以上就是基于busybox的文件系统制作的基本步骤,你可以据你的需求进行定制和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒙蒂锅巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值