STM32MP1:U-Boot,Buildroot,Arch Linux和一些Debian

哈Ha!

不久前,意法半导体推出了有趣的STM32MP1系列处理器。当我最终接触到基于该处理器的调试板时,我惊讶地发现它缺少基于流行发行版(Debian,Arch Linux等)的任何构建。剩下的就是尝试自己为该板调整一些分发套件。基于此结果,这篇文章出现了。



有什么特点?


如果没有对STM32MP1系列处理器的特性进行至少简短的概述,本文将是不完整的。STM32MP1系列共有三个处理器系列:STM32MP151,STM32MP153和STM32MP157。表中列出了它们的主要特征。



从表中可以看到,这两个系列之间的区别是STM32MP151具有一个Cortex-A7内核,而STM32MP153和STM32MP157具有两个这样的内核,而STM32MP157也具有3D GPU支持。但是总的来说,这些处理器在2020年的特性不会给人留下任何印象,它们的价值并不高。为什么我仍然关注他们?

为什么选择STM32MP1?


确实,可能会出现一个完全合乎逻辑的问题:是否有Raspberry Pi,有香蕉Pi,有Orange Pi,最后-为什么我们还需要其他STM32MP1?而且,所有这些板通常都比我们的研究对象具有明显更高的性能。答案很简单-当您在家做任何手工艺品时,就是要拿树莓,这是正确的。但是,如果我们谈论的是工业应用的量产产品,那么其他事情就开始发挥决定性的作用,这要归功于STM32MP1:

  • 工作温度范围。对于STM32MP1,它的起始温度为负40度,而对于其他单板计算机的许多处理器,其起始温度为负20是一个好方法。
  • . STMicroelectronics , .
  • . DigiKey Mouser STM32MP1, .

当然,ST32MP1不是市场上用于工业应用的唯一处理器。既有恩智浦,也有TI。对于TI,我有一个基于该模块的相当复杂的模块项目,并且有大量硬件功能造成了沉淀,这些功能并未在文档中进行介绍,但如果不加以考虑,处理器可能会完全失败,而且不是立即失败,而是随着时间的流逝,在最不合时宜的时刻。此外,它是单核处理器,并且随着分配给它的任务数量的增加,性能问题也越来越频繁地出现。同时,我正在与意法半导体(STMicroelectronics)的微控制器打交道,事实证明它们非常出色,因此我决定尝试选择这种新的小控制器。

调试板


为了进行实验,我购买了STM32MP157A-DK1调试板。该板在设备方面相当适中:它没有像STM32MP157C-DK2这样的LCD显示器,也没有像STM32MP157A-EV1这样丰富的外设。但是,有一个microSD卡插槽,一个USB-UART控制台,几个USB端口和以太网。对于第一个开始,绰绰有余。为了用图片淡化故事,我附上此调试板的照片。



现成的软件是什么?


在意法半导体,通常在硬件方面一切都还不错,但在软件方面却很糟糕。 Atollic True Studio,CubeMX,CubeIDE的所有这些修改(在每个新发行版中越来越多地出现错误)引起了人们的极大关注。 STM32MP1支持的情况要好一些。 STMicroelectronics仅提供特定的OpenSTLinux组件。该程序集是使用Yocto项目构建的发行版。当然,所有这些都可以这种形式存在,但是对我而言,主要缺点是无法访问知名发行版的存储库。这意味着仅通过运行apt-get install之类的命令,您将无法从流行发行版的存储库中放置任何实用程序。嵌入式解决方案通常不需要这样做,但是有可能出现这种情况,这样的机会绝对不会是多余的。

我们做什么?


因此,任务很明确-我们需要在调试板上运行一些流行的发行版。我的选择落在Arch Linux上。这不是最简单的发行版,但是非常适合ARM设备:这里有现成的程序集和一个专用于此的官方站点

我试图快速解决问题的第一件事-我只是从Armv7下组装的Arch Linux发行版中滑出了准备好引导装载程序的内核。有时这在其他板上也可以使用,但是仍然有惨败在等着我:尽管事实上内核是为正确的体系结构组装的,但它并没有启动。好吧,那么您需要组装您的内核并同时安装您的加载器。我的行动计划是这样的:

  1. 生成U-Boot引导程序。
  2. 构建Linux内核。
  3. 我们标记了microSD卡。
  4. 我们将引导程序,内核和根文件系统写入microSD卡。
  5. 利润

组装准备


要实施此计划,我们需要一台装有Linux的计算机和一个读卡器,以便在microSD卡上进行记录。我在Debian 10上使用了笔记本电脑,但是总的来说这并不重要,实用程序的名称可能仅稍有不同。因此,我们放置了必需的实用程序。我立即注意到,所有命令现在都必须以root用户或通过sudo执行。

apt-get install git
apt-get install make
apt-get install gcc
apt-get install gcc-arm-linux-gnueabihf
apt-get install bison
apt-get install flex
apt-get install g++
apt-get install rsync
apt-get install libncurses-dev

在准备组装时,我们在工作目录中创建三个目录:u-boot(用于引导程序),buildroot(用于系统构建)和archlinux(用于分发):

mkdir u-boot
mkdir buildroot
mkdir archlinux

我们将进一步需要这些目录。我将在本文的后面引用这些名称。

U型靴组装


关于U-Boot的文章已经很多了,作为其中的一部分,我将不去解释它的含义,用途以及工作原理。我只能说这是一个在ARM设备上提供Linux启动的引导程序。 U-Boot引导加载程序的源代码可在GitHub上获得。

为了构建U-Boot,首先,我们将U-Boot存储库克隆到我们先前创建的u-boot目录中:

git clone https://github.com/u-boot/u-boot

要成功构建U-Boot,我们需要一个设备树文件和一个U-Boot配置文件。

设备树文件是与设备有关的文件。该文件描述了特定板卡的处理器配置。如果您基于任何ARM处理器制造硬件并计划在其上运行Linux,那么您将需要为其开发设备树文件(或改编一些现成的文件)。但是,许多调试板已经有现成的文件:有爱心的U-Boot开发人员将它们包含在其存储库中。因此,请查看u-boot / arch / arm / dts目录。它应包含stm32mp157a-dk1.dtb文件 -这是调试板的设备树文件。

在U-Boot配置文件中,写入了基本的引导程序设置。

从头开始配置U-Boot是一个相当耗时且费力的过程,因为设置太多了。为此,有控制台配置程序和图形配置程序。但是,在这里我们很幸运:在u-boot / configs目录中有一个stm32mp15_basic_defconfig文件这是STM32MP15调试板的U-Boot基本配置文件。我们打开该文件,发现对于我们来说,快速启动它只需要更改一行即可:

CONFIG_DEFAULT_DEVICE_TREE=”stm32mp157c-ev1”



CONFIG_DEFAULT_DEVICE_TREE=”stm32mp157a-dk1”

通过这一行,我们告诉引导加载程序,我们需要为开发板使用设备树文件。

现在您可以构建U-Boot。我们使用我们的配置:

make CROSS_COMPILE=arm-linux-gnueabihf- stm32mp15_basic_defconfig

并运行程序集:

make CROSS_COMPILE=arm-linux-gnueabihf-

如果一切顺利,那么在u-boot目录中,我们应该有一堆文件。其中,我们感兴趣的是两个:u-boot-spl.stm32u-boot.img

第一个文件是所谓的第一阶段引导加载程序(FSBL)。它位于U-Boot的前面,首先启动并初始化DDR3内存,这对于启动U-Boot是必不可少的。在其他板中,FSBL通常与U-Boot组合成一个映像,但是在这里您必须将每个映像分别写入USB闪存驱动器。

现在,U-Boot就是这样,保存指定的文件,然后直接进入Linux内核程序集。

Linux内核汇编


我将使用Buildroot来构建Linux内核。当然,出于这些目的,您可以使用同样流行的Yocto,甚至尝试从kernel.org的源代码构建内核。但是,我有一些使用Buildroot的经验,因此我决定了。此外,Buildroot还可以构建根文件系统(rootfs)甚至U-Boot加载器。

现在,通过任何可用的方法,从官方网站上的 Buildroot下载档案,将其解压缩到buildroot目录中并进入。

与U-Boot一样,您需要注意的第一件事是我们硬件的配置文件。

我们转到buildroot / configs目录,看看开发人员已经为我们的主板添加了一个配置文件:有一个文件stm32mp157a_dk1_defconfig(对于Buildroot-2020.05内部版本为true,在此文件的早期版本中尚未提供)。

我尝试使用此配置文件构建5.4.26内核,并且通常在我的板上成功启动。但是,由于某种原因,该程序集中的Linux设备树文件被截断了:默认情况下,甚至不支持USB端口。希望随着时间的流逝,此错误将得到修复,但是现在该怎么办?

我用谷歌搜索这个问题,发现了意法半导体的存储库,在那里我发现了Linux 4.19源码及其产品补丁。包括正确的DTB文件在内。剩下的只是告诉Buildroot在构建内核时使用此存储库。为此,请复制stm32mp157a_dk1_defconfig文件并将其重命名为stm32mp157a_dk1_new_defconfig打开它,并做如下修改:

相反

BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4=y

我们写

BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y

代替

BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.4.26"

我们写

BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,STMicroelectronics,linux,v4.19-stm32mp-r1.2)/linux-v4.19-stm32mp-r1.2.tar.gz"

保存并关闭文件。配置文件已经准备好,让我们应用它(您需要从buildroot目录执行它):

make CROSS_COMPILE=arm-linux-gnueabihf- stm32mp157a_dk1_new_defconfig

此命令会将信息从配置文件stm32mp157a_dk1_defconfig传输到位于buildroot目录中的.config文件。将来,程序集将基于.config文件构建。

因此,现在一切都准备就绪,可以开始构建过程了,但是在此之前,您需要配置我们的内核。

值得一提的是,默认情况下内核中将包含最少的功能。如果要扩展它,则需要为自己配置内核。至少,您需要将对Control Group的支持添加到内核:如果没有此支持,我们的Arch Linux将无法启动。另外,作为示例,我将演示如何向内核添加对USB闪存驱动器的支持:因此,我们的调试板将能够使用闪存驱动器。
要从buildroot目录启动内核配置器,请执行以下命令

make linux-menuconfig

去喝茶 此过程并不很快,并且取决于计算机的功能可能需要15分钟到几小时。重要提示:在buildroot工作期间,您需要稳定的Internet连接,将下载许多不同的软件包。
如果在此过程中弹出错误

configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
See `config.log' for more details

将需要执行命令

export FORCE_UNSAFE_CONFIGURE=1

并重新启动内核配置器。

结果,配置器窗口将出现:



添加控制组支持:常规设置->控制组支持,并使用空格设置星号:



以及如何添加闪存驱动器支持?
SCSI . 80- , , , USB FLASH . Device Drivers -> SCSI support :



USB FLASH . Device Drivers -> USB support USB Mass Storage support:



, FLASH : File systems -> Native language support -> Codepage 437 File systems -> Native language support -> NLS ISO 8859-1:





, USB FLASH .

在内核配置器中完成所有设置之后,请使用“ 保存”按钮将其保存,然后使用“ 退出”按钮退出配置器

现在仅需使用以下命令即可开始构建过程:

make CROSS_COMPILE=arm-linux-gnueabihf-

而且您可以第二次去喝茶,这个过程也需要很多时间。

如果一切顺利,那么以下文件集应出现在buildroot / output / images目录中:

  • rootfs.ext2是带有ext2的已编译根文件系统。它对我们没有兴趣;
  • rootfs.ext4是带有ext4的已编译根文件系统。稍后对我们有用。
  • sdcard.img -microSD卡的映像,包括FSBL + U-Boot + zImage + rootfs。懒惰的文件,它使您不必麻烦标记microSD卡并立即将整个系统上传到其中。当然,这不是我们的方式:)。
  • stm32mp157a-dk1.dtb-设备树文件。确保方便启动系统;
  • u-boot.imgu-boot-spl.stm32-文件FSBL和U-Boot。因为我们在最后一步收集了它们,所以我们不需要它们了。
    我们为什么要分别收集它们?
    , Buildroot U-Boot. , . U-Boot, – Linux.
  • zImage-整个系统的核心-压缩的Linux内核文件。

至此,组装过程完成,现在我们开始标记microSD内存卡并在其上创建分区。

microSD卡的分区和分区


标记microSD卡并创建分区是一个非常重要的阶段,与特定的硬件平台密切相关。不幸的是,在特定处理器上有关此问题的信息并不总是很容易找到,即使您收集了功能完备的U-Boot和Linux内核,也无法在microSD卡的布局中产生任何丝毫错误。

立即,我注意到在STM32MP1上与系统一起启动的microSD卡必须具有GPT标记。gdisk实用程序将帮助我们解决此问题,但稍后会进一步介绍。

microSD卡部分应如下所示:



从图中可以看到,该卡必须至少包含5个分区:fsbl1,fsbl2,ssbl,内核,rootfs。此外,您还可以创建一个或多个数据节以在其上存储任何信息。

fsbl1fsbl2部分完全相同且主引导程序被写入到他们(你还记得,这是的u-boot-spl.stm32文件,我们的U-Boot的装配过程中收到)。尽管事实一切正常,并且只有一个这样的部分,但有关STM2MP1的文档建议进行其中的两个操作。其他要求适用于这些部分:

  • 每个分区的大小必须为256 KB。
  • , fsbl (fsbl1 fsbl2). : , .

ssbl 部分用于编写U-Boot引导加载程序(我们在U-Boot组装过程中收到u-boot.img文件)。推荐的ssbl分区大小为2 MB。内核
部分旨在向其写入Linux内核(zImage文件),设备树(stm32mp157a-dk1.dtb文件)以及用于启动系统的U-Boot 脚本。建议的内核分区大小为64 MB。rootfs 部分用于编写根文件系统。我们将尝试向其写入Buildroot编译的根文件系统以及Arch Linux的根文件系统。推荐的rootfs分区大小为1 GB或更大。


数据部分用于存储用户数据。您可以制作一个或多个这样的部分。而您完全可以不用它。在本文中,我不会创建此部分。

因此,我们开始加价。我们将microSD卡插入装有Linux的计算机的读卡器中,并使用任何可用的方式(例如,使用dmesg)确定显示的设备的名称。就我而言,这是/ dev / sdb。在您的情况下,它可能是另一个名称。

运行gdisk实用程序并完全删除microSD卡上的标记:

root@debian:/home/myuser# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): x
Expert command (? for help): z
About to wipe out GPT on /dev/sdb. Proceed? (Y/N): y
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
Blank out MBR? (Y/N): y

以防万一,我们将microSD卡的开头打零。

dd if=/dev/zero of=/dev/sdb bs=1M count=64

现在再次运行gdisk,添加标记并根据我上面给出的表在microSD卡上创建5个分区:

root@debian:/home/myuser# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-30873566, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-30873566, default = 30873566) or {+-}size{KMGTP}: +256K
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (2-128, default 2): 2
First sector (34-30873566, default = 4096) or {+-}size{KMGTP}: 
Last sector (4096-30873566, default = 30873566) or {+-}size{KMGTP}: +256K
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (3-128, default 3): 3
First sector (34-30873566, default = 6144) or {+-}size{KMGTP}: 
Last sector (6144-30873566, default = 30873566) or {+-}size{KMGTP}: +2M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (4-128, default 4): 4
First sector (34-30873566, default = 10240) or {+-}size{KMGTP}: 
Last sector (10240-30873566, default = 30873566) or {+-}size{KMGTP}: +64M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (5-128, default 5): 5
First sector (34-30873566, default = 141312) or {+-}size{KMGTP}: 
Last sector (141312-30873566, default = 30873566) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

接下来,将名称添加到microSD卡上的各个部分。您还记得,这对于将要写入FSBL的前几节尤为重要:如果不为它们分配所需的名称,系统将无法启动:

root@debian:/home/myuser# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): c
Partition number (1-5): 1
Enter name: fsbl1

Command (? for help): c
Partition number (1-5): 2
Enter name: fsbl2

Command (? for help): c
Partition number (1-5): 3
Enter name: ssbl

Command (? for help): c
Partition number (1-5): 4
Enter name: kernel

Command (? for help): c
Partition number (1-5): 5
Enter name: roootfs

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

在使用microSD卡结束时,我们需要在将要编写Linux内核的部分中添加旧的BIOS可启动属性没有此属性,内核将拒绝启动:

root@debian:/home/myuser# gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): x

Expert command (? for help): a
Partition number (1-5): 4
Known attributes are:
0: system partition
1: hide from EFI
2: legacy BIOS bootable
60: read-only
62: hidden
63: do not automount

Attribute value is 0000000000000000. Set fields are:
  No fields set

Toggle which attribute field (0-63, 64 or <Enter> to exit): 2
Have enabled the 'legacy BIOS bootable' attribute.
Attribute value is 0000000000000004. Set fields are:
2 (legacy BIOS bootable)

Toggle which attribute field (0-63, 64 or <Enter> to exit): 

Expert command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

到此为止,存储卡的布局已准备就绪。以防万一,请检查是否已正确记录所有内容。为此,请再次运行gdisk并运行p命令结果应显示如下图:



现在在/ dev / sdb4和/ dev / sdb5上创建ext4文件系统:

mkfs.ext4 /dev/sdb4
mkfs.ext4 /dev/sdb5

我们规定了卷标,以便以后可以更轻松地访问它们:

e2label /dev/sdb4 kernel
e2label /dev/sdb5 rootfs

这样就完成了存储卡各部分的创建,您可以继续向其中写入文件。

MicroSD卡记录


因此,在当前阶段,所有内容都可以在microSD卡上记录了。我们将其插入Linux计算机的读卡器中,并在mocroSD卡的第一部分和第二部分中写入主引导程序(FSBL):

dd if=u-boot/u-boot-spl.stm32 of=/dev/sdb1
dd if=u-boot/u-boot-spl.stm32 of=/dev/sdb2

现在,将U-Boot写入microSD卡的第三部分:

dd if=u-boot/u-boot.img of=/dev/sdb3

接下来,您需要将内核,设备树文件和启动脚本复制到microSD卡上的第四部分。

在开始复制文件之前,您需要对下载脚本进行一些说明。实际上,在此脚本中,指示了有关U-Boot的各种信息,借助这些信息,它可以引导系统并将控制权转移到内核。编写这些脚本的方法有多种,但是最简单的方法(在我看来)在STM32MP1的文档中进行了描述:您需要在内核部分的根目录中创建/ extlinux目录,并创建一个名称为extlinux.conf的文本文件,其内容如下:

LABEL stm32mp157a-dk1
KERNEL /zImage
FDT /stm32mp157a-dk1.dtb
APPEND root=/dev/mmcblk0p5 rootwait rw console=ttySTM0,115200

这里的一切都非常简单:我们告诉加载器在哪里获取内核,设备树,根文件系统,并说我们将使用ttySTM0端口作为工作控制台。

现在复制内核:

cp -a buildroot/output/images/zImage /media/myuser/kernel/

注意:在/ media / myuser /目录中,当安装在读卡器中时,我会安装microSD卡。就您而言,它可能是一个不同的目录。

复制设备树文件:

cp -a buildroot/output/images/stm32mp157a-dk1.dtb /media/myuser/kernel/

创建目录:

mkdir /media/myuser/kernel/extlinux

创建一个文件:

nano /media/myuser/kernel/extlinux/extlinux.conf

并用以下内容填充:

LABEL stm32mp157a-dk1
KERNEL /zImage
FDT /stm32mp157a-dk1.dtb
APPEND root=/dev/mmcblk0p5 rootwait rw console=ttySTM0,115200

保存文件并关闭编辑器。

至此,microSD卡的第四部分已准备就绪:linux内核及其所有辅助文件已被写入。在这个阶段,如果您已经将microSD卡插入调试板,则应该加载Linux内核,但是最后,由于无法挂载根文件系统,它将崩溃到内核崩溃。这不足为奇,因为到目前为止我们已经记录了它。

在最后阶段,我们将把根文件系统写入microSD卡。这里有多种选择:

  1. 编写由Buildroot生成的根文件系统
  2. 重写Arch Linux根文件系统

首先,记下Buildroot为我们生成的根文件系统,并尝试从中开始。这不是本文的目的,但在我看来,通常它对于任何应用程序都可能有用,尤其是因为此操作不需要花费很多时间。只需一个命令,即可将根文件系统写入我们的microSD卡的第五部分:

dd if=buildroot/output/images/rootfs.ext4 of=/dev/sdb5

现在,将存储卡插入调试板并启动系统。我们将通过USB-UART控制台观察调试信息的输出:可通过STM32MP157A-DK1板上的microUSB端口访问调试信息。在任何终端程序(例如Putty或Minicom)中都可以显示显示的信息。出于本文的目的,我通过在Debian中打开另一个终端窗口来使用后者。

现在,我们将microSD卡插入调试板,为该板供电并查看端子。如果一切都正确完成,则应在其中倒入FSBL,U-Boot,内核日志,并最终-出现输入登录名的邀请。我们输入root,然后-瞧-我们进入刚收集的系统的控制台:



是的,它甚至没有软件包管理器,并且总体来说功能很差,但是在Buildroot的帮助下,您可以将其构建得非常酷,并创建一个真正有效的复杂系统。同时,它的大小只有7兆字节!



确保自制的根文件系统成功启动后,该启动Arch Linux了。再次将microSD卡插入我们计算机的读卡器,然后再次格式化存储卡的第五部分:

mkfs.ext4 /dev/sdb5

从官方站点下载使用Armv7汇编的Arch Linux存档。使用以下命令将归档文件解压缩到archlinux目录中:

cp -a archlinux/* /media/myuser/rootfs 

将其复制到microSD卡的rootfs部分。

我们清理目录/ media / myuser / rootfs / boot:我们不需要目录,因为内核和设备树位于microSD卡的单独部分:

rm –rf /media/myuser/rootfs/boot/*

稍后,您可以将/ dev / sdb4分区挂载在我们具有内核映像的引导目录中。

然后,将microSD卡插入调试板,打开电源并享受ArchLinux的工作:



在Arch Linux成功启动之后,我决定也尝试在调试板上运行Debian。在根文件系统上使用绝对相似的操作,它成功地工作了:



结论


在本文中,我们充分利用了STM32MP157A-DK1调试板:将U-Boot,Linux内核,我们自己的根文件系统置于其下,并启动了Arch Linux和Debian。我希望这些资料对使用STM32MP1系列处理器或ARM上任何其他单板的人都有用。


All Articles