debootstrap构建基于Debian的嵌入式系统的rootfs

嵌入式芯片:iMX6ULL

准备环境

  • 确保您的开发机器已安装debootstrapqemu-user-static(如果您在非ARM机器上构建ARM rootfs)。

    复制代码
      sudo apt-get update
      sudo apt-get install debootstrap qemu-user-static

使用debootstrap创建rootfs

  • 确定您希望在iMX6ULL开发板上运行的Debian版本(如buster, bullseye)和架构(iMX6ULL通常是armhf)。

  • 使用debootstrap创建rootfs:

    复制代码
      sudo debootstrap --foreign --arch=armhf bullseye /path/to/rootfs http://deb.debian.org/debian/
  • 如果您的开发机器不是使用ARM架构的,则需要在此步骤之后安装qemu-user-static

    复制代码
      sudo cp /usr/bin/qemu-arm-static /path/to/rootfs/usr/bin/
      sudo chroot /path/to/rootfs
      /debootstrap/debootstrap --second-stage

配置新的rootfs

  • 您需要配置网络、安装必要的软件包、设置时区等。
  • 设置root密码,passwd
  • 添加新用户,adduser newusername

拷贝rootfs到开发板

  • 打包rootfs下所有的文件,tar -vcjf rootfs.tar.bz2 *
  • 使用烧入工具,烧入rootfs

嵌入式系统中配置网络:

  • 产看网卡信息:ip link

  • 查看网卡eth0信息:ip addr show eth0

  • 配置网卡eth0自动获取ip:dhclient eth0

  • 开启/关闭 eth0网卡:sudo ip link set eth0 up/down

  • 网络服务重启:

    • 使用 systemd-networkd 的系统:systemctl restart systemd-networkd
    • 设备使用 NetworkManager:systemctl restart NetworkManager
    • systemctl restart networking
  • 配置静态ip

    • sudo ip addr add 192.168.1.2/24 dev eth0
    • /etc/network/interfaces.d/ 路径下新建eth0文件
    bash 复制代码
    sudo nano /etc/network/interfaces.d/eth0
    
    
    
    auto eth0
    iface eth0 inet static
        address 192.168.1.100
        netmask 255.255.255.0
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

    使用ifconfig:apt-get install net-tools

注:

**debootstrap**是一个为Debian及其衍生系统如Ubuntu提供的工具,它能够创建一个基础的Debian系统。这个工具通常用于初始化一个新的Debian系统环境,用于安装,在chroot环境中创建一个干净的开发或打包环境,或者构建可引导的镜像。

debootstrap 很方便,因为它可以在不同架构的计算机上使用,只需要有足够的权限来安装并执行即可,不一定要在Debian系统上运行。

以下是使用 debootstrap 的一些基本步骤:

安装debootstrap

如果 debootstrap 还没有安装,可以通过运行以下命令来安装:

bash 复制代码
   sudo apt install debootstrap

使用debootstrap构建基础系统

你可以通过指定目标架构,Debian版本和目标文件夹来创建一个基本的系统。例如,创建一个bullseye(Debian 11)的基础系统:

bash 复制代码
   sudo debootstrap --arch amd64 bullseye /path/to/new/root/ http://deb.debian.org/debian/
  • --arch 指定了目标架构,例如 amd64armhfarm64 等。
  • bullseye 是目标发行版的代号,可以替换为 stabletestingsid,或其它历史发行版代号如 stretchbuster 等。
  • /path/to/new/root/ 是系统文件将要被安装到的目录路径。
  • http://deb.debian.org/debian/ 是Debian的官方软件仓库;你也可以根据地理位置或其他需求选择不同的镜像。

进入新创建的系统环境

如果需要为新的根文件系统进行更多配置,可以使用 chroot 进入新创建的环境:

bash 复制代码
   sudo chroot /path/to/new/root/

此时,你将在一个新的Debian环境中,可以进行安装软件包、用户设置或其他配置。

请注意,你需要有root访问权限来使用 debootstrap,因为它涉及到系统级的文件操作。在运行过程中,debootstrap 会下载需要的所有软件包并解压到指定目录中,创建一个可以使用的基础系统。

qemu-user-static 是一个使用 QEMU(Quick Emulator)技术的工具套件,使你能够在不同的CPU架构上执行非本机架构的二进制文件。它通过在用户空间(User space)模拟不同的处理器来实现这一功能,从而允许跨架构软件开发和测试。

例如,你可以在基于x86的机器上运行编译为ARM或PowerPC等架构的应用程序。这对于开发者来说非常有用,尤其是在开发面向多种硬件平台的软件时,或者构建和测试嵌入式系统镜像。

qemu-user-static常用于结合chroot或者容器技术(如Docker)在主机上设置一个交叉编译环境或了解其他架构的操作系统。

安装 qemu-user-static

在Debian、Ubuntu等基于Debian的系统上,你可以使用下列命令安装qemu-user-static

复制代码
sudo apt update
sudo apt install qemu-user-static

其他Linux发行版也可能包含qemu-user-static,但安装方法可能会有所不同。

使用 qemu-user-static 的一个实例

  1. **安装 qemu-user-staticdebootstrap**。

2. 使用 debootstrap 创建一个基于ARM架构的Debian根文件系统

复制代码
   sudo debootstrap --arch=armhf --foreign bullseye /path/to/arm-chroot http://deb.debian.org/debian/

3. 将 qemu-arm-static 二进制文件复制到新创建的根文件系统内,这样CHROOT环境就能用模拟的方式运行ARM的二进制文件了。

复制代码
   sudo cp /usr/bin/qemu-arm-static /path/to/arm-chroot/usr/bin

4. 使用 chroot 进入新的根文件系统

复制代码
   sudo chroot /path/to/arm-chroot

现在,你就能在这个CHROOT环境下运行ARM架构的命令和应用程序了。

使用qemu-user-static可以在主机架构上暂时"模拟"目标架构,从而极大地方便了跨平台开发和测试的过程。它尤其对于开发针对特定硬件或嵌入式设备的应用程序非常有用。

相关推荐
荣--9 小时前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森9 小时前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜1 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
大树887 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质7 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工7 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信