据我所知,stm32nucleoF429zi 没有硬件 MMU,但我们可以从 Linux 内核配置选项中禁用 MMU 选项。
如果我们这样做,为什么我们不能在 stm32 F429zi 上运行 Linux?为什么我们只能运行uCLinux?如果我们在Linux内核配置中禁用MMU,为什么uCLinux可以运行但Linux无法运行?
答案1
可以轻松在stm32f429上运行主线linux以及任何其他无 MMU 的 MCU。我在 stm32h743 上运行了主线 Linux 内核(它也像 stm32f4 一样没有 MMU)。
但唯一的问题是你的开发板没有外置内存。
用于运行Linux您至少需要 4MB RAM。
所以我推荐你购买带 STM32F429NI MCU 的评估板。该评估板还有一个 SD 卡插槽。
在主板上运行 linux 的步骤:
- 下载u启动和linux内核和繁忙的盒子。
- 构建 u-boot 和 linux 内核以及 busybox(用于使用 busybox 创建 rootfs)本指南)。
- 将u-boot烧入stm32内部闪存
- 准备好你的SD卡(创建一个20MB的FAT分区并创建一个大的EXT4分区)
- 将启动文件复制到 sdcard(将主板的 dtb 文件和内核的 zImage 复制到 fat 分区,并将 rootfs 复制到 ext4 分区)。
- 使用 u-boot 命令将 DTB 和 zImage 加载到 dram 中并启动内核。
一些有用且必要的 u-boot 命令:
- 使用“fatload”命令加载DTB和zImage,例如(fatload mmc 0:1 ${kernel_addr_r} zImage)。
- 使用“setenv bootargs”命令来设置引导参数例如(setenv bootargs console=ttySTM0,115200n8 root=/dev/mmcblk0p2 rw rootwait loglevel=7 init=/linuxrc)。
- 使用“bootz”命令启动内核,例如(bootz ${kernel_addr_r} - ${fdt_addr_r})。
PS:uClinux又老又没用。当你可以使用最新的主线linux内核时不要使用它。