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

相关推荐
Eternal-Student3 分钟前
【docker 保存】将Docker镜像保存为一个离线的tar归档文件
运维·docker·容器
DC_BLOG10 分钟前
Linux-Apache静态资源
linux·运维·apache
码农小丘12 分钟前
一篇保姆式centos/ubuntu安装docker
运维·docker·容器
耗同学一米八38 分钟前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题二
运维·网络·mariadb
skywalk81631 小时前
树莓派2 安装raspberry os 并修改成固定ip
linux·服务器·网络·debian·树莓派·raspberry
淡水猫.1 小时前
Fakelocation Server服务器/专业版 ubuntu
运维·服务器·ubuntu
wenyue11211 小时前
Ease Monitor 会把基础层,中间件层的监控数据和服务的监控数据打通,从总体的视角提供监控分析
运维·中间件·监控
量子网络1 小时前
debian 如何进入root
linux·服务器·debian
时光の尘2 小时前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
我们的五年2 小时前
【Linux课程学习】:进程描述---PCB(Process Control Block)
linux·运维·c++