制作启动U盘并在飞腾开发板上运行

背景介绍:我需要在飞腾E2000Q核心的汉为开发板上运行linux操作系统,且操作系统通过U盘启动。本文章解决的问题是如何制作U盘。使用的工具包括:1、一台x86架构的Linux台式机。2、一个128G的U盘。

构建内核、设备树、根目录

方法来源:Phytium嵌入式软件/Phytium-Linux-buildroot

系统要求

Buildroot被设计为在x86 Linux系统上运行,我们只支持在ubuntu20.04、ubuntu22.04、debian11这三种x86主机上运行phytium-linux-buildroot,不支持其他系统。 Buildroot需要主机系统上安装以下依赖包:

1
2
3
4
$$ sudo apt update
$$ sudo apt install debianutils sed make binutils build-essential gcc
\g++ bash patch gzip bzip2 perl tar cpio unzip rsync file bc wget git
\debootstrap qemu-user-static binfmt-support debian-archive-keyring

对于debian11系统,需要设置PATH环境变量:PATH=$PATH:/usr/sbin

下载phytium-linux-buildroot

1
$ git clone https://gitee.com/phytium_embedded/phytium-linux-buildroot.git

默认配置文件和扩展配置文件

为飞腾CPU平台构建的文件系统的配置文件位于configs目录。
其中,以defconfig结尾的为默认配置文件,以config结尾的为扩展配置文件。
defconfig可以和config文件进行组合,用以扩展特定的功能,但要注意不能随意组合。
defconfig
在phytium-linux-buildroot根目录下执行$ make list-defconfigs,返回configs目录中的defconfig配置文件。

1
2
$$ cd xxx/phytium-linux-buildroot
$$ make list-defconfigs

其中以phytium开头的为飞腾相关的defconfig配置文件,包含:

  • phytium_debian_defconfig
  • Build for debian systemphytium_defconfig
  • Build for busybox minimal systemphytium_initrd_defconfig
  • Build for initrdphytium_ubuntu_defconfig
  • Build for ubuntu system

编译默认配置的文件系统

(1)加载defconfig

1
$ make phytium_xxx_defconfig

其中phytium_xxx_defconfig为以下文件系统之一:
phytium_ubuntu_defconfig
phytium_debian_defconfig
phytium_defconfig
(2)编译
$ make
(3)镜像的输出位置
生成的根文件系统、内核、img 镜像位于output/images目录。
img 镜像
目前buildroot支持编译img 镜像(disk.img),生成的img 镜像位于output/images目录。img 镜像包含了根文件系统、内核、设备树和GRUB。 使用img 镜像安装系统,不需要像之前那样将存储设备手动分区再拷贝文件,只需要将disk.img文件写入存储设备即可。

制作启动U盘

以下是详细的步骤,教你如何格式化U盘并重新构建两个分区。假设U盘设备名为 /dev/sdb。

步骤1:识别U盘

首先,使用 lsblk 或 fdisk -l 命令识别U盘的设备名:

lsblk
或者
sudo fdisk -l

假设你的U盘设备名是 /dev/sdb。

步骤2:使用 fdisk 分区

  1. 启动 fdisk
    sudo fdisk /dev/sdb

  2. 删除现有分区:
    在 fdisk 命令行中,输入以下命令删除所有现有分区:

  • 输入 d 并回车,选择要删除的分区号,重复此步骤直到所有分区都删除。
  • 输入 p 查看当前分区表,确保所有分区都删除。
  1. 创建新的GPT分区表:
    g

  2. 创建第一个分区(EFI系统分区):

  • 输入 n 创建新分区,选择分区号 1,设置起始扇区和大小(例如 +512M)。
  • 输入 t 修改分区类型,选择分区号 1,输入 1 设置为 EFI System。
  1. 创建第二个分区(根文件系统分区):
  • 输入 n 创建新分区,选择分区号 2,使用默认起始扇区和默认结束扇区。
  1. 查看分区表:
    p

  2. 写入分区表并退出:
    w

步骤3:格式化新分区

  1. 格式化EFI系统分区为 vfat** 文件系统**:
    1
    sudo mkfs.vfat /dev/sdb1
  2. 格式化根文件系统分区为 ext4** 文件系统**:
    1
    sudo mkfs.ext4 /dev/sdb2

步骤4:拷贝文件到分区

  1. 挂载分区:
    1
    sudo mount /dev/sdb1 /mnt
  2. 拷贝内核、设备树和GRUB到EFI分区:
    1
    2
    3
    4
    5
    sudo cp /path/to/Image /mnt
    sudo cp /path/to/e2000q-come-board.dtb /mnt
    sudo cp -r /path/to/EFI/ /mnt
    sync
    sudo umount /dev/sdb1
  3. 挂载根分区:
    1
    sudo mount /dev/sdb2 /mnt
  4. 拷贝并解压根文件系统到根分区:
    1
    2
    3
    4
    5
    6
    sudo cp /path/to/rootfs.tar /mnt
    cd /mnt
    sudo tar xvf rootfs.tar
    sync
    cd ~
    sudo umount /dev/sdb2

步骤5:设置U-Boot环境变量

确保U-Boot配置正确以引导新的根文件系统:

1
2
3
4
setenv bootargs 'console=ttyAMA1,115200 audit=0 earlycon=pl011,0x2800d000 root=/dev/sdb2 rootdelay=5 rw;'
setenv boot_usb 'usb stop; usb start; fatload usb 0:1 0x90000000 e2000q-hanwei-board.dtb; fatload usb 0:1 0x90100000 Image; booti 0x90100000 - 0x90000000;'
setenv bootcmd 'run boot_usb'
saveenv
-------------本文结束感谢您的阅读-------------