为开发板定制Debian或Ubuntu系统

为开发板定制Debian或Ubuntu系统

前言

当前开发板的内存和存储介质(板载NandFlash/EMMC等)容量一般都很大,可用来运行相对复杂的系统和程序,为了保证开发板的可玩性(可以直接从deb源安装开源软件包,不需要重复造轮子),可以定制安装Debian或Ubuntu系统(实质是定制根文件系统)。本文尝试定制Debian和Ubuntu系统,记录定制过程,以便后续必要时回顾和查看。

本次实验的开发板,CPU为 imx6ull(ARM Cortex-A7,arch:armhf),更换为 Rock PI4 时,将qemu工具替换为qemu-aarch64-static,相应的arch替换为aarch64(arm64)。

经过初步验证,根文件系统大小(未压缩):Ubuntu18.04-base(>400M) > Debian-Bullseye-base(>300M) ,比用于嵌入式系统的BusyBox-1.33.2(<30M,制作过程见另一篇博客 使用BusyBox制作Linux根文件系统 )大了一个数量级(无意义的对比 ^_^)。

Debian

介绍

Debian – 选择 Debian 的理由

Debootstrap - Debian Wiki,补充阅读:Multistrap - Debian Wiki

可以基于第三方制作好的基础镜像进行定制,如:Linaro Releases - Debian

本文记录了基于debootstrap工具进行Debian基础系统的定制和验证过程。

定制过程

提取基础包:

#!/bin/bash

mkdir -p rootfs
rm -rf rootfs/*

# 如果已经抽取过 Debian 基础包, 则复用产物
if [ -f debian-bullseye-base-armhf.tar.gz ]; then
    tar xzf debian-bullseye-base-armhf.tar.gz -C rootfs/
    exit
fi

# 安装依赖工具
apt install -y binfmt-support debootstrap

# 系统自带的 qemu-user-static 版本过低, chroot 时会报系统调用错误
if [ ! -f qemu-arm-static ]; then
    if [ ! -f qemu-arm-static.tar.gz ]; then
        wget https://github.com/multiarch/qemu-user-static/releases/download/v7.0.0-7/qemu-arm-static.tar.gz
        tar xzf qemu-arm-static.tar.gz
    fi
fi

# 抽取 Debian 基础包
debootstrap --arch=armhf --foreign bullseye rootfs https://mirrors.tuna.tsinghua.edu.cn/debian/
cp -f qemu-arm-static rootfs/usr/bin
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true chroot rootfs debootstrap/debootstrap --second-stage

# 备份
cd rootfs
rm -f usr/bin/qemu-arm-static
tar czf ../debian-bullseye-base-armhf.tar.gz *

定制(需要先chroot,见 验证 - 在PC上验证 ):

#!/bin/bash

export LC_ALL=C

if [ ! -f /etc/apt/sources.list.backup ]; then
    # 替换为清华大学源
    cp -af /etc/apt/sources.list /etc/apt/sources.list.backup
    cat > /etc/apt/sources.list << EOF
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free

deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
EOF
fi

# 安装必要的工具, 为减小镜像大小, 安装完成后删除deb缓存
apt update
apt install -y sudo htop net-tools ethtool ssh
apt clean

echo "proc /proc proc defaults 0 0" >> /etc/fstab

sed -i '/  PATH=/c  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"' /etc/profile

# A stop job is running for ... 解决网络引起的启动, 关机/重启慢的问题
sed -i '/Before=/s/shutdown.target //' /etc/systemd/system/network-online.target.wants/networking.service
sed -i '/TimeoutStartSec=/cTimeoutStartSec=5sec' /etc/systemd/system/network-online.target.wants/networking.service

echo "imx6ull" > /etc/hostname

cat > /etc/hosts << EOF
127.0.0.1 localhost
127.0.1.1 imx6ull
EOF

# 添加用户和密码: 用户名admin, 密码imxull, 授予sudo权限
echo -e "imx6ull\nimx6ull" | adduser --gecos "" admin
usermod -aG sudo admin

Ubuntu

介绍

详见:Base - Ubuntu Wiki

Ubuntu Base是一个最小的rootfs,用于创建满足特定需求的自定义映像。它致力于创建一个合适的,用于板级支持包,受限或集成环境,作为应用程序演示映像或Linux容器(如LXCDocker)的基础的最小环境,适用于 i386、amd64、armhf、arm64等架构。

Ubuntu Base提供了一个功能强大的用户空间环境,通过使用apt-get命令,完全支持从Ubuntu存储库安装其他软件。

下载路径:http://cdimage.ubuntu.com/ubuntu-base/releases/,可以在此处选择合适的基础镜像,本文基于ubuntu-base-18.04.5进行验证。

定制过程

下载和解压基础包:

#!/bin/bash

mkdir -p rootfs
rm -rf rootfs/*

if [ ! -f ubuntu-base-18.04.5-base-armhf.tar.gz ]; then
    wget http://cdimage.ubuntu.com/ubuntu-base/releases/18.04.5/release/ubuntu-base-18.04.5-base-armhf.tar.gz
fi
tar -xzf ubuntu-base-18.04.5-base-armhf.tar.gz -C rootfs

定制(需要先chroot,见 验证 - 在PC上验证 ):

#!/bin/bash

if [ ! -f /etc/apt/sources.list.backup ]; then
    # 替换为清华大学源
    cp -af /etc/apt/sources.list /etc/apt/sources.list.backup
    sed -i 's/http:\/\/ports.ubuntu.com/https:\/\/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
fi

# 安装必要的工具, 为减小镜像大小, 安装完成后删除deb缓存
apt update
apt install -y sudo vim kmod rsyslog htop net-tools ethtool ifupdown iputils-ping language-pack-en-base ssh
apt clean

# A start job is running for dev-ttymxc0.device
ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttymxc0.service

echo "imx6ull" > /etc/hostname

cat > /etc/hosts << EOF
127.0.0.1 localhost
127.0.1.1 imx6ull
EOF

# 添加用户和密码: 用户名admin, 密码imxull, 授予sudo权限
echo -e "imx6ull\nimx6ull" | adduser --gecos "" admin
usermod -aG sudo admin

验证

在PC上验证

在PC上可以安装必要的软件包,修改配置文件等。

运行时基于qemu-user-staticGitHub - multiarch/qemu-user-static: /usr/bin/qemu-*-static),它是一个用于利用当前系统来运行其它指令集架构程序的仿真器,通过x86主机运行其它架构的用户态应用程序,减小了程序验证工作的复杂度。

chroot之前:

#!/bin/bash

if [ ! -d $1 ]; then
    echo "invalid rootfs: $1"
    exit
fi

echo "pre-chroot($1), mount ..."

sudo cp -af /run/systemd/resolve/resolv.conf $1/etc/resolv.conf

# 系统自带的 qemu-user-static 版本过低, chroot 时会报系统调用错误
if [ ! -f qemu-arm-static ]; then
    if [ ! -f qemu-arm-static.tar.gz ]; then
        wget https://github.com/multiarch/qemu-user-static/releases/download/v7.0.0-7/qemu-arm-static.tar.gz
        tar xzf qemu-arm-static.tar.gz
    fi
fi

# chroot 时需要用到 qemu-arm-static
sudo cp -f qemu-arm-static $1/usr/bin/

# 挂载必要的文件系统
sudo mount -t proc /proc $1/proc
sudo mount -t sysfs /sys $1/sys
sudo mount -o bind /dev $1/dev
sudo mount -o bind /dev/pts $1/dev/pts

sudo chmod 777 $1/tmp
sudo chroot $1

推出之后(exit退回到当前系统):

#!/bin/bash

if [ ! -d $1 ]; then
    echo "invalid rootfs: $1"
    exit
fi

echo "post-chroot($1), umount ..."

# 文件系统卸载
sudo umount $1/dev/pts
sudo umount $1/dev
sudo umount $1/sys
sudo umount $1/proc

# 制作安装镜像之前删除 qemu 程序
sudo rm -f $1/usr/bin/qemu-arm-static

在开发板上验证

在PC上基本能验证大部分问题,但一些验证工作必须要到开发板上才能进行验证,第二阶段的验证工作,可参考另一篇博客 通过NFS调试Linux系统 进行。

验证完成后再制作SD/MMC或Flash的安装镜像。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值