diff --git a/documents/rockchip/openEuler镜像的构建.md b/documents/rockchip/openEuler镜像的构建.md index 47c3c54..727f256 100644 --- a/documents/rockchip/openEuler镜像的构建.md +++ b/documents/rockchip/openEuler镜像的构建.md @@ -1,8 +1,10 @@ - [描述](#描述) - [准备编译环境](#准备编译环境) -- [编译 u-boot 启动文件](#编译-u-boot-启动文件) - - [编译 RK3399 u-boot](#编译-rk3399-u-boot) - - [编译 RK356x/RK3588 u-boot](#编译-rk356xrk3588-u-boot) +- [编译 U-Boot 启动文件](#编译-u-boot-启动文件) + - [编译 RK3399 U-Boot](#编译-rk3399-u-boot) + - [编译 RK356x/RK3588 U-Boot](#编译-rk356xrk3588-u-boot) + - [编译 H616/H618 U-Boot](#编译-h616h618-u-boot) + - [关于 PhytiumPi U-Boot](#关于-phytiumpi-u-boot) - [基于 openEuler 内核编译内核镜像](#基于-openeuler-内核编译内核镜像) - [编译内核代码](#编译内核代码) - [构建 boot 镜像](#构建-boot-镜像) @@ -23,7 +25,7 @@ - [设置 boot 分区为可启动](#设置-boot-分区为可启动) - [使用 losetup 将磁盘镜像文件虚拟成块设备](#使用-losetup-将磁盘镜像文件虚拟成块设备) - [使用 kpartx 创建分区表 /dev/loop0 的设备映射](#使用-kpartx-创建分区表-devloop0-的设备映射) - - [写入 u-boot](#写入-u-boot) + - [写入 U-Boot](#写入-u-boot) - [格式化分区](#格式化分区) - [创建要挂载的根目录和 boot 分区路径](#创建要挂载的根目录和-boot-分区路径) - [挂载根目录和 boot 分区](#挂载根目录和-boot-分区) @@ -38,11 +40,11 @@ # 描述 -本文档介绍如何构建适用于 Rockchip 开发板的 openEuler 镜像。 +本文档介绍如何构建适用于 Rockchip、Allwinner 以及 Phytium 开发板的 openEuler 镜像。 # 准备编译环境 -1. 系统要求。 +1. 系统要求 - 操作系统:openEuler - 架构:AArch64 @@ -60,9 +62,9 @@ cd $WORKDIR ``` -# 编译 u-boot 启动文件 +# 编译 U-Boot 启动文件 -## 编译 RK3399 u-boot +## 编译 RK3399 U-Boot 1. 下载源码 @@ -78,7 +80,7 @@ wget -O bl31.elf https://github.com/rockchip-linux/rkbin/raw/master/bin/rk33/rk3399_bl31_v1.35.elf ``` -3. 编译 u-boot +3. 编译 U-Boot ``` make ARCH=arm firefly-rk3399_defconfig @@ -96,23 +98,23 @@ cd $WORKDIR ``` -## 编译 RK356x/RK3588 u-boot +## 编译 RK356x/RK3588 U-Boot 1. 下载源码 - - 如果是 RK3566/RK3568 开发板,执行以下命令来下载 u-boot 源码,以 `Firefly ROC-RK3566-PC` 和 `Firefly ROC-RK3568-PC-SE` 为例,使用 Firefly 的 u-boot 源码: + - RK3566/RK3568 开发板:以 `Firefly ROC-RK3566-PC` 和 `Firefly ROC-RK3568-PC-SE` 为例,下载其官方提供的 U-Boot 源码: - ``` - cd $WORKDIR - git clone --branch rk356x/firefly-5.10 --depth=1 https://gitlab.com/firefly-linux/u-boot.git - ``` + ``` + cd $WORKDIR + git clone --branch rk356x/firefly-5.10 --depth=1 https://gitlab.com/firefly-linux/u-boot.git + ``` - - 如果是 RK3588 开发板,执行以下命令来下载 u-boot 源码,以 `Firefly ROC-RK3588S-PC` 为例,使用 Firefly 的 u-boot 源码: + - RK3588 开发板:以 `Firefly ROC-RK3588S-PC` 为例,下载其官方提供的 U-Boot 源码: - ``` - cd $WORKDIR - git clone --branch rk3588/firefly --depth=1 https://gitlab.com/firefly-linux/u-boot.git - ``` + ``` + cd $WORKDIR + git clone --branch rk3588/firefly --depth=1 https://gitlab.com/firefly-linux/u-boot.git + ``` 2. 下载 rkbin @@ -121,49 +123,49 @@ git clone --depth=1 https://github.com/rockchip-linux/u-boot.git -o 7c35e21a8529b3758d1f051d1a5dc62aae934b2b --recursive --depth=1 ``` -3. 编译 u-boot +3. 编译 U-Boot - - 如果是 RK3566/RK3568 开发板,执行以下命令来编译 u-boot 源码,以 `Firefly ROC-RK3566-PC` 和 `Firefly ROC-RK3568-PC-SE` 为例,使用 Firefly 的 u-boot 源码: + - RK3566/RK3568 开发板:以 `Firefly ROC-RK3566-PC` 和 `Firefly ROC-RK3568-PC-SE` 为例,使用其官方的 U-Boot 源码进行编译: - ``` - make ARCH=arm rk3568_defconfig - make ARCH=arm -j$(nproc) - ``` + ``` + make ARCH=arm rk3568_defconfig + make ARCH=arm -j$(nproc) + ``` - 注意:这里 Firefly 的 u-boot 源码中的 `rk3568_defconfig` u-boot 配置文件中指定的 `rk3568-evb.dts` 仅保证可用于 Firefly 的 RK3566/RK3568 设备: + 注意:这里 Firefly 的 U-Boot 源码中的 `rk3568_defconfig` U-Boot 配置文件中指定的 `rk3568-evb.dts` 仅保证可用于 Firefly 的 RK3566/RK3568 设备: - https://gitlab.com/firefly-linux/u-boot/-/blob/rk356x/firefly-5.10/configs/rk3568_defconfig?ref_type=heads#L21 + https://gitlab.com/firefly-linux/u-boot/-/blob/rk356x/firefly-5.10/configs/rk3568_defconfig?ref_type=heads#L21 - - 如果是 RK3588 开发板,执行以下命令来编译 u-boot 源码,以 `Firefly ROC-RK3588S-PC` 为例,使用 Firefly 的 u-boot 源码: + - RK3588 开发板:以 `Firefly ROC-RK3588S-PC` 为例,使用其官方的 U-Boot 源码进行编译: - ``` - make ARCH=arm rk3588_defconfig - make ARCH=arm -j$(nproc) - ``` + ``` + make ARCH=arm rk3588_defconfig + make ARCH=arm -j$(nproc) + ``` - 注意:这里 Firefly 的 u-boot 源码中的 `rk3588_defconfig` u-boot 配置文件中指定的 `rk3588-evb.dts` 仅保证可用于 Firefly 的 RK3588 设备: + 注意:这里 Firefly 的 U-Boot 源码中的 `rk3588_defconfig` U-Boot 配置文件中指定的 `rk3588-evb.dts` 仅保证可用于 Firefly 的 RK3588 设备: - https://gitlab.com/firefly-linux/u-boot/-/blob/rk3588/firefly/configs/rk3588_defconfig?ref_type=heads#L23 + https://gitlab.com/firefly-linux/u-boot/-/blob/rk3588/firefly/configs/rk3588_defconfig?ref_type=heads#L23 4. 生成 idbloader.img - RK3566 - ``` - tools/mkimage -n rk356x -T rksd -d ../rkbin/bin/rk35/rk3566_ddr_1056MHz_v1.23.bin:spl/u-boot-spl.bin idbloader.img - ``` + ``` + tools/mkimage -n rk356x -T rksd -d ../rkbin/bin/rk35/rk3566_ddr_1056MHz_v1.23.bin:spl/u-boot-spl.bin idbloader.img + ``` - RK3568 - ``` - tools/mkimage -n rk356x -T rksd -d ../rkbin/bin/rk35/rk3568_ddr_1560MHz_v1.23.bin:spl/u-boot-spl.bin idbloader.img - ``` + ``` + tools/mkimage -n rk356x -T rksd -d ../rkbin/bin/rk35/rk3568_ddr_1560MHz_v1.23.bin:spl/u-boot-spl.bin idbloader.img + ``` - RK3588 - ``` - tools/mkimage -n rk3588 -T rksd -d ../rkbin/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2400MHz_v1.18.bin:spl/u-boot-spl.bin idbloader.img - ``` + ``` + tools/mkimage -n rk3588 -T rksd -d ../rkbin/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2400MHz_v1.18.bin:spl/u-boot-spl.bin idbloader.img + ``` 输出如下: @@ -177,100 +179,100 @@ - RK3566/RK3568 - ``` - cp ../rkbin/bin/rk35/rk3568_bl31_v1.44.elf bl31.elf - arch/arm/mach-rockchip/make_fit_atf.sh u-boot.dtb > uboot.its + ``` + cp ../rkbin/bin/rk35/rk3568_bl31_v1.44.elf bl31.elf + arch/arm/mach-rockchip/make_fit_atf.sh u-boot.dtb > uboot.its - cp ../rkbin/bin/rk35/rk3568_bl32_v2.14.bin tee.bin - tools/mkimage -f uboot.its -E u-boot.itb - ``` + cp ../rkbin/bin/rk35/rk3568_bl32_v2.14.bin tee.bin + tools/mkimage -f uboot.its -E u-boot.itb + ``` - RK3588 - ``` - cp ../rkbin/bin/rk35/rk3588_bl31_v1.47.elf bl31.elf - arch/arm/mach-rockchip/make_fit_atf.sh u-boot.dtb > uboot.its + ``` + cp ../rkbin/bin/rk35/rk3588_bl31_v1.47.elf bl31.elf + arch/arm/mach-rockchip/make_fit_atf.sh u-boot.dtb > uboot.its - cp ../rkbin/bin/rk35/rk3588_bl32_v1.17.bin tee.bin - tools/mkimage -f uboot.its -E u-boot.itb - ``` + cp ../rkbin/bin/rk35/rk3588_bl32_v1.17.bin tee.bin + tools/mkimage -f uboot.its -E u-boot.itb + ``` - 输出如下: + 输出如下: - ``` - FIT description: FIT Image with ATF/OP-TEE/U-Boot/MCU - Created: Fri Nov 8 09:14:41 2024 - Image 0 (uboot) - Description: U-Boot - Created: Fri Nov 8 09:14:41 2024 - Type: Standalone Program - Compression: uncompressed - Data Size: 1357176 Bytes = 1325.37 KiB = 1.29 MiB - Architecture: AArch64 - Load Address: 0x00200000 - Entry Point: unavailable - Hash algo: sha256 - Hash value: 67813f7c0d6c6f429254565954b83d91fd00fdd36735c18833b2f892a74d7a2f - Image 1 (atf-1) - Description: ARM Trusted Firmware - Created: Fri Nov 8 09:14:41 2024 - Type: Firmware - Compression: uncompressed - Data Size: 204860 Bytes = 200.06 KiB = 0.20 MiB - Architecture: AArch64 - Load Address: 0x00040000 - Hash algo: sha256 - Hash value: 6a4a192c104cc98c4b7e63ad0c6728b27b1af0a95fb9555b19faf55f8cf5871c - Image 2 (atf-2) - Description: ARM Trusted Firmware - Created: Fri Nov 8 09:14:41 2024 - Type: Firmware - Compression: uncompressed - Data Size: 36864 Bytes = 36.00 KiB = 0.04 MiB - Architecture: AArch64 - Load Address: 0xff100000 - Hash algo: sha256 - Hash value: 70505bb764db81a665c8bba4953d804ed9eab580d5428888a4436121eff11c50 - Image 3 (atf-3) - Description: ARM Trusted Firmware - Created: Fri Nov 8 09:14:41 2024 - Type: Firmware - Compression: uncompressed - Data Size: 24576 Bytes = 24.00 KiB = 0.02 MiB - Architecture: AArch64 - Load Address: 0x000f0000 - Hash algo: sha256 - Hash value: 569ee96047e8ff069a6f89d1f62a530133c3e0afc74da4958519da2b51ec57d6 - Image 4 (optee) - Description: OP-TEE - Created: Fri Nov 8 09:14:41 2024 - Type: Firmware - Compression: uncompressed - Data Size: 465312 Bytes = 454.41 KiB = 0.44 MiB - Architecture: AArch64 - Load Address: 0x08400000 - Hash algo: sha256 - Hash value: 66e4b7a4cd05b86d45085ccc6f676d596c581d7e5c981c916c874abd0ebfad54 - Image 5 (fdt) - Description: U-Boot dtb - Created: Fri Nov 8 09:14:41 2024 - Type: Flat Device Tree - Compression: uncompressed - Data Size: 8867 Bytes = 8.66 KiB = 0.01 MiB - Architecture: AArch64 - Hash algo: sha256 - Hash value: a434b1c4fe1fe989156b3b53572daa76e0342fbcf2503fd4807ad30f8da2ce71 - Default Configuration: 'conf' - Configuration 0 (conf) - Description: rk3588-evb - Kernel: unavailable - Firmware: atf-1 - FDT: fdt - Loadables: uboot - atf-2 - atf-3 - optee - ``` + ``` + FIT description: FIT Image with ATF/OP-TEE/U-Boot/MCU + Created: Fri Nov 8 09:14:41 2024 + Image 0 (uboot) + Description: U-Boot + Created: Fri Nov 8 09:14:41 2024 + Type: Standalone Program + Compression: uncompressed + Data Size: 1357176 Bytes = 1325.37 KiB = 1.29 MiB + Architecture: AArch64 + Load Address: 0x00200000 + Entry Point: unavailable + Hash algo: sha256 + Hash value: 67813f7c0d6c6f429254565954b83d91fd00fdd36735c18833b2f892a74d7a2f + Image 1 (atf-1) + Description: ARM Trusted Firmware + Created: Fri Nov 8 09:14:41 2024 + Type: Firmware + Compression: uncompressed + Data Size: 204860 Bytes = 200.06 KiB = 0.20 MiB + Architecture: AArch64 + Load Address: 0x00040000 + Hash algo: sha256 + Hash value: 6a4a192c104cc98c4b7e63ad0c6728b27b1af0a95fb9555b19faf55f8cf5871c + Image 2 (atf-2) + Description: ARM Trusted Firmware + Created: Fri Nov 8 09:14:41 2024 + Type: Firmware + Compression: uncompressed + Data Size: 36864 Bytes = 36.00 KiB = 0.04 MiB + Architecture: AArch64 + Load Address: 0xff100000 + Hash algo: sha256 + Hash value: 70505bb764db81a665c8bba4953d804ed9eab580d5428888a4436121eff11c50 + Image 3 (atf-3) + Description: ARM Trusted Firmware + Created: Fri Nov 8 09:14:41 2024 + Type: Firmware + Compression: uncompressed + Data Size: 24576 Bytes = 24.00 KiB = 0.02 MiB + Architecture: AArch64 + Load Address: 0x000f0000 + Hash algo: sha256 + Hash value: 569ee96047e8ff069a6f89d1f62a530133c3e0afc74da4958519da2b51ec57d6 + Image 4 (optee) + Description: OP-TEE + Created: Fri Nov 8 09:14:41 2024 + Type: Firmware + Compression: uncompressed + Data Size: 465312 Bytes = 454.41 KiB = 0.44 MiB + Architecture: AArch64 + Load Address: 0x08400000 + Hash algo: sha256 + Hash value: 66e4b7a4cd05b86d45085ccc6f676d596c581d7e5c981c916c874abd0ebfad54 + Image 5 (fdt) + Description: U-Boot dtb + Created: Fri Nov 8 09:14:41 2024 + Type: Flat Device Tree + Compression: uncompressed + Data Size: 8867 Bytes = 8.66 KiB = 0.01 MiB + Architecture: AArch64 + Hash algo: sha256 + Hash value: a434b1c4fe1fe989156b3b53572daa76e0342fbcf2503fd4807ad30f8da2ce71 + Default Configuration: 'conf' + Configuration 0 (conf) + Description: rk3588-evb + Kernel: unavailable + Firmware: atf-1 + FDT: fdt + Loadables: uboot + atf-2 + atf-3 + optee + ``` 6. 收集编译结果 @@ -282,6 +284,91 @@ cd $WORKDIR ``` +## 编译 H616/H618 U-Boot + +1. 下载源码 + + 1. 下载 Arm Trusted Firmware 源码 + + ``` + git clone --depth=1 https://github.com/ARM-software/arm-trusted-firmware.git -b lts-v2.10.26 + ``` + + 2. 下载 U-Boot 源码 + + U-Boot 版本参考 [Sipeed 官方构建仓库使用的版本](https://github.com/sipeed/LonganPi-3H-SDK/blob/main/mkuboot.sh#L26C2-L26C55) + + ``` + git clone https://github.com/u-boot/u-boot.git + git checkout da2e3196e4dc28298b58a018ace07f85eecd1652 + ``` + +2. 下载并应用 U-Boot 补丁 + + 对于 LonganPi 3H,U-Boot 需要打补丁才能正常工作,OrangePi Zero 2 则不需要。 + + 从以下位置下载补丁: + + https://github.com/sipeed/LonganPi-3H-SDK/tree/main/uboot + + 将补丁放在与 `u-boot` 以及 `arm-trusted-firmware` 同一级的文件夹 `u-boot-patch` 文件夹中,使用以下命令来应用补丁: + + ``` + cd u-boot + find ../u-boot-patch/ -name *.patch | sort | while read line + do + git am < $line + done + ``` + +3. 编译 Arm Trusted Firmware + + ``` + cd .. + cd arm-trusted-firmware + + make PLAT=sun50i_h616 bl31 + cp build/sun50i_h616/release/bl31.bin ../ + ``` + + 此处的参数 `PLAT=sun50i_h616` 指定平台为 `H616` 以及 `H618`。 + +4. 编译 U-Boot + + 1. 应用 U-boot 配置 + + - LonganPi 3H + + ``` + make ARCH=arm64 longanpi_3h_defconfig + ``` + + - OrangePi Zero 2 + + ``` + make ARCH=arm64 orangepi_zero2_defconfig + ``` + + 2. 编译 u-boot-sunxi-with-spl.bin + + ``` + export BL31=$(pwd)/../bl31.bin + make ARCH=arm64 -j$(nproc) + ``` + +5. 收集编译结果 + + 将生成的 idbloader.img 和 u-boot.itb 文件复制到工作目录。 + + ``` + cp u-boot-sunxi-with-spl.bin $WORKDIR + cd $WORKDIR + ``` + +## PhytiumPi U-Boot + +PhytiumPi U-Boot 不开源,所使用的预编译二进制文件来自于 `飞腾嵌入式软件部` 开源仓库: + # 基于 openEuler 内核编译内核镜像 ## 编译内核代码 @@ -578,10 +665,10 @@ dnf --installroot=$WORKDIR/rootfs/ install -y alsa-utils wpa_supplicant vim net- ### 创建空镜像 - ``` - cd $WORKDIR - dd if=/dev/zero of=openeuler-rk3399.img bs=1MiB count=3072 status=progress && sync - ``` +``` +cd $WORKDIR +dd if=/dev/zero of=openeuler.img bs=1MiB count=3072 status=progress && sync +``` 注意:这里创建了一个大小为3G的文件,可以根据实际情况适当调整。 @@ -589,52 +676,40 @@ dnf --installroot=$WORKDIR/rootfs/ install -y alsa-utils wpa_supplicant vim net- #### 创建分区表 - `parted openeuler-rk3399.img mktable gpt` +1. Rockchip 或 Phytium 开发板:使用 GPT 分区表 + + `parted openeuler.img mktable gpt` + +2. Allwinner 开发板:使用 MBR(MS-DOS) 分区表 + + `parted openeuler.img mktable msdos` #### 镜像分区 -执行 `fdisk openeuler-rk3399.img` 后,根据提示依次输入: +执行 `fdisk openeuler.img` 后,根据提示依次输入: 1. 输入 p,查看分区信息,可以看到当前无分区。 -2. 输入 n,创建 idbloader 分区。 +2. 输入 n,创建 boot 分区。 3. 输入 p 或直接按 Enter,创建 Primary 类型的分区。 4. 输入 1 或直接按 Enter,创建序号为 1 的分区。 -5. 输入 64,输入第一个分区的起始扇区号。 -6. 输入 16383,输入第一个分区的末尾扇区号。 -7. 输入 p,查看当前分区情况,可以看到当前有一个分区。 -8. 输入 n,创建 u-boot 分区。 +5. 输入 32768,输入第一个分区的起始扇区号。 +6. 输入 262143,输入第一个分区的末尾扇区号。 +7. 输入 p,查看当前分区情况,可以看到当前有 1 个分区。 +8. 输入 n,创建 root 分区。 9. 输入 p 或直接按 Enter,创建 Primary 类型的分区。 10. 输入 2 或直接按 Enter,创建序号为 2 的分区。 -11. 输入 16384,输入第二个分区的起始扇区号。 -12. 输入 24575,输入第二个分区的末尾扇区号。 -13. 输入 p,查看当前分区情况,可以看到当前有两个分区。 -14. 输入 n,创建 trust 分区。 -15. 输入 p 或直接按 Enter,创建 Primary 类型的分区。 -16. 输入 3 或直接按 Enter,创建序号为 3 的分区。 -17. 输入 24576,输入第二个分区的起始扇区号。 -18. 输入 32767,输入第二个分区的末尾扇区号。 -19. 输入 p,查看当前分区情况,可以看到当前有三个分区。 -20. 输入 n,创建 boot 分区。 -21. 输入 p 或直接按 Enter,创建 Primary 类型的分区。 -22. 输入 4 或直接按 Enter,创建序号为 4 的分区。 -23. 输入 32768,输入第二个分区的起始扇区号。 -24. 输入 262143,输入第二个分区的末尾扇区号。 -25. 输入 p,查看当前分区情况,可以看到当前有四个分区。 -26. 输入 n,创建 root 分区。 -27. 输入 p 或直接按 Enter,创建 Primary 类型的分区。 -28. 输入 5 或直接按 Enter,创建序号为 5 的分区。 -29. 输入 262144,输入第三个分区的起始扇区号。 -30. 按 Enter,输入第三个分区的末尾扇区号,使用最后一个扇区号作为第五个分区的末尾扇区号。 -31. 输入 p,查看当前分区情况,可以看到当前有五个分区。 -32. 输入 w,写入并退出。 +11. 输入 262144,输入第二个分区的起始扇区号。 +12. 按 Enter,输入第二个分区的末尾扇区号,使用最后一个扇区号作为第二个分区的末尾扇区号。 +13. 输入 p,查看当前分区情况,可以看到当前有 2 个分区。 +14. 输入 w,写入并退出。 #### 设置 boot 分区为可启动 - `parted openeuler-rk3399.img -s set 4 boot on` +`parted openeuler -s set 1 boot on` ## 使用 losetup 将磁盘镜像文件虚拟成块设备 -`losetup -f --show openeuler-rk3399.img` +`losetup -f --show openeuler.img` 例如,显示结果为 /dev/loop0。 @@ -642,40 +717,59 @@ dnf --installroot=$WORKDIR/rootfs/ install -y alsa-utils wpa_supplicant vim net- `kpartx -va /dev/loop0` -得到结果将 /dev/loop0 五个分区挂载了: +得到结果将 /dev/loop0 两个分区挂载了: ``` add map loop0p1 ... add map loop0p2 ... -add map loop0p3 ... -add map loop0p4 ... -add map loop0p5 ... ``` -运行 `ls /dev/mapper/loop0p*` 可以看到分区分别对应刚才为 openeuler-rk3399.img 做的五个分区: +运行 `ls /dev/mapper/loop0p*` 可以显示 openeuler.img 的两个分区: ``` -/dev/mapper/loop0p1 /dev/mapper/loop0p2 /dev/mapper/loop0p3 /dev/mapper/loop0p4 /dev/mapper/loop0p5 +/dev/mapper/loop0p1 /dev/mapper/loop0p2 ``` -## 写入 u-boot +## 写入 U-Boot -1. 写入 idbloader.img。 +### Rockchip 开发板 - `dd if=idbloader.img of=/dev/mapper/loop0p1` +1. 写入 idbloader.img -2. 写入 u-boot.itb。 + `dd if=idbloader.img of=/dev/loop0 seek=64` - `dd if=u-boot.itb of=/dev/mapper/loop0p2` +2. 写入 u-boot.itb + + `dd if=u-boot.itb of=/dev/loop0 seek=16384` + +### Allwinner 开发板 + +写入 u-boot-sunxi-with-spl.bin + +`dd if=u-boot-sunxi-with-spl.bin of=/dev/loop0 seek=8k` + +### Phytium 开发板 + +1. 因为 fip-all-sd-boot.bin 自带分区表,写入会破坏以上步骤创建的分区表,所以需要备份分区表 + + `sfdisk --dump /dev/loop0 > part.txt` + +2. 写入 fip-all-sd-boot.bin + + `dd if=fip-all-sd-boot.bin of=/dev/loop0` + +3. 恢复分区表 + + `sfdisk --no-reread /dev/loop0 < part.txt` ## 格式化分区 1. 格式化 boot 分区 - `mkfs.vfat -n boot /dev/mapper/loop0p4` + `mkfs.vfat -n boot /dev/mapper/loop0p1` 3. 格式化 root 分区 - `mkfs.ext4 /dev/mapper/loop0p5` + `mkfs.ext4 /dev/mapper/loop0p2` ## 创建要挂载的根目录和 boot 分区路径 @@ -683,17 +777,17 @@ add map loop0p5 ... ## 挂载根目录和 boot 分区 -`mount -t vfat -o uid=root,gid=root,umask=0000 /dev/mapper/loop0p4 $WORKDIR/bootp/` +`mount -t vfat -o uid=root,gid=root,umask=0000 /dev/mapper/loop0p1 $WORKDIR/bootp/` -`mount -t ext4 /dev/mapper/loop0p5 $WORKDIR/rootp/` +`mount -t ext4 /dev/mapper/loop0p2 $WORKDIR/rootp/` ## 获取生成的 img 镜像的 blkid -执行命令 blkid 得到三个分区的 UUID,例如: +执行命令 blkid 得到两个分区的 UUID,例如: ``` ... -/dev/mapper/loop0p4: SEC_TYPE="msdos" LABEL="boot" UUID="2785-C7C3" TYPE="vfat" PARTUUID="e0a091bd-04" -/dev/mapper/loop0p5: UUID="67b5fc1c-9cd3-4884-968c-4ca35e5ae154" TYPE="ext4" PARTUUID="e0a091bd-05" +/dev/mapper/loop0p1: SEC_TYPE="msdos" LABEL="boot" UUID="2785-C7C3" TYPE="vfat" PARTUUID="e0a091bd-04" +/dev/mapper/loop0p2: UUID="67b5fc1c-9cd3-4884-968c-4ca35e5ae154" TYPE="ext4" PARTUUID="e0a091bd-05" ``` ## 修改 fstab @@ -732,6 +826,6 @@ UUID=2785-C7C3 /boot vfat defaults,noatime 0 0 `losetup -d /dev/loop0` -这样,最终就生成了需要的 openeuler-rk3399.img 镜像文件。 +这样,最终就生成了需要的 openeuler.img 镜像文件。 -之后就可以使用镜像刷写 SD 卡并使用 Firefly-RK3399 了。 \ No newline at end of file +之后就可以使用生成镜像刷写 SD 卡并使用 openEuler 了。 \ No newline at end of file