IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 为开发板定制Debian或Ubuntu系统 -> 正文阅读

[系统运维]为开发板定制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的安装镜像。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:40:15  更:2022-08-19 19:41:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 19:47:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码