⚡ WSL2 搭建 s5p6818 Linux 嵌入式开发平台(Part 2):系统构建与系统部署
👁 1. 前期回顾
在本系列的 第一部分(Part 1) 中,我已经介绍了开发平台的整体架构思路、软硬件环境清单,以及 WSL 的安装与配置。本篇(Part 2)将基于此前的准备工作,继续进行嵌入式开发平台的系统构建与系统部署,为后网络调试环境搭建做铺垫。
🌀 传送门:Part 1
🎿 2. U-Boot构建
Bootloader 是单板启动过程中最关键的程序。它通常负责完成基础硬件和内存的初始化,是单板上电后最先执行的代码。如果 Bootloader 与单板硬件不匹配,系统将无法正常启动。
以 s5p6818 单板为例,厂家提供的 Bootloader 是 U-Boot。U-Boot 是一种常见的开源 Bootloader,被广泛应用于嵌入式 ARM 系统的启动引导。
要完成 U-Boot 的构建,需要经过 搭建交叉编译环境、交叉编译 U-Boot 这两步。
☂️ 2.1 搭建交叉编译环境
U-Boot 需要通过 交叉编译 来生成目标文件。
PC 端架构为 x86 Windows,单板架构为 ARM64 嵌入式 Linux,因此交叉编译器必须匹配两端架构。常见可选的交叉编译器有:
- aarch64-linux-gnu-
- aarch64-none-elf-
- aarch64-linux-musl-
本文选择厂家提供的 arm-cortex_a9-linux-gnueabi- 工具链。
💡 提示:从名字来看,arm-cortex_a9-linux-gnueabi- 这个交叉编译器是给 arm32 位的 cortex_a9 处理器用的,虽然我们这 arm64位 的 cortex_A53 处理器能兼容 arm32 的程序,但是会拉低性能。这里有余力的可以试试 aarch64-linux-gnu- 这套交叉编译器,编译出来的程序理论上具有最高的性能(但是有没有坑我就不知道了)
接下来,我们需要在 WSL2 中执行以下命令将该交叉编译器放置到系统中合适的位置,并解压 :
cp arm-cortex_a9-eabi-4.7-eglibc-2,18.tar.gz /opt
cd /opt
tar -xvf arm-cortex_a9-eabi-4.7-eglibc-2.18.tar.gz
mv arm-cortex_a9-eabi-4.7-eglibc-2.18 toolchains
然后我们需要将交叉编译链配置到环境变量中,在 ~/.bashrc 文件末尾添加以下内容,保存并退出。
export PATH=$HOME/.bin:/opt/toolchains/bin:$PATH
如果有特殊需求,需要让交叉编译器对 所有用户生效,可以修改 /etc/environment
文件,在原来的 PATH 前添加 /opt/toolchains/bin
:
# 原 PATH
# PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/games:/usr/local/games:/snap/bin"# 修改后 PATH
PATH="/opt/toolchains/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/games:/usr/local/games:/snap/bin"
⚠️ 注意:如果没有特殊需求,不建议随意修改 /etc/environment,因为该文件格式非常严格。一旦 PATH 配置错误,WSL2 在启动时可能找不到 /bin/sh,导致用户交互终端直接挂起,无法操作。我之前就遇到这个问题,最后是通过 Windows 直接访问 WSL2 的文件系统,手动恢复 /etc/environment 才救回系统。
配置完成后,可以通过以下步骤验证交叉编译器环境变量是否生效:
从图中的结果可以看到,环境变量已生效,交叉编译器的版本能够正常显示,并且通过 file 可以看到这个交叉编译器对 PC 架构的要求是 ELF 64-bit LSB executable, x86-64。也就是只有在64位的 x86 架构的 PC 上,交叉编译器才能正常运行。
🌂 2.2 交叉编译 U-Boot
完成交叉编译器的环境配置后,接下来需要对 U-Boot 进行交叉编译生成可以在单板上执行的二进制文件。
在 WSL2 中执行以下命令完成对厂家提供的 U-Boot 源码的解压
cp uboot.tar.bz2 /opt
cd /opt
tar -xvf uboot.tar.bz2
如果需要定制功能,可以修改以下源码文件:
-
/opt/uboot/include/configs/X6818.h
-
/opt/uboot/board/s5p6818/x6818/board.c
-
/opt/uboot/board/s5p6818/x6818/Makefile
这些文件通常用于添加额外的配置或驱动支持。由于我这里没有特殊需求,就直接采用厂家提供的默认配置。
准备就绪后,依次执行以下命令进行交叉编译:
cd /opt/uboot
make distclean
make x6818_config
make
注意:在这个交叉编译的过程中不需要指定交叉编译器。个人猜测应该是单板厂家在提供源码的时候把指定交叉编译器的代码写在配置文件里面,在 make x6818_config 的时候进行了交叉编译器的指定。
交叉编译完成后通过 find 命令检查目录中是否成功生成了 ubootpak.bin 和 mkimage 的文件
这里的 ubootpak.bin文件是需要拷贝到目标单板上运行的二进制文件,而 mkimage 在后续内核构建过程中会用到,用于生成与U-Boot兼容的内核镜像。
最后执行以下命令将 mkimage 拷贝到 /usr/local/bin
目录下方便后续调用。
cp /opt/uboot/tools/mkimage /usr/local/bin
至此U-Boot构建已经全部完成。
🥝 3. Linux 内核构建
Linux 内核是单板运行的核心程序,由 Bootloader 引导启动,负责在硬件和用户应用程序之间提供驱动支持与系统服务,并在单板运行期间始终处于工作状态。
由于之前已经配置好了交叉编译工具链,所以内核的构建流程就相对简单一点了。
在 WSL2 中执行以下命令,将单板厂家提供的 Linux 内核源码的解压到指定目录:
cp kernel.tar.bz2 /opt
cd /opt
tar -xvf kernel.tar.bz2
虽然内核同样可以像 U-Boot 那样直接修改源码进行定制,但更常见的做法是通过 ncurses 提供的内核配置菜单 来裁剪内核功能。
执行以下命令安装配置菜单所需的依赖
sudo apt-get install libncurses5-dev
然后进入内核源码目录并执行清理与初始化配置:
cd /opt/kernel
make disclean
make x6818_defconfig
make menuconfig
在 menuconfig 菜单中,可以通过 星号选项 来启用或禁用硬件驱动、功能模块及启动方式(例如 U-Boot 传参模式等)。
我这里计划后续使用一块迷你 WiFi 网卡,因此需要在内核中启用相关驱动:
在 menuconfig 主界面进入 Networking support → Wireless,如图所示,勾选:
-
cfg80211 wireless extensions compatibility
-
Wireless extension sysfs files
回到 menuconfig 主界面,进入 Device Drivers → Network device support → Wireless LAN,如图所示,勾选:
-
IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
-
Support downloading firmware images with Host AP driver
-
Support for non-volatile firmware download
其余配置基本保持 make x6818_defconfig
生成的厂家提供的默认设置,如果没有什么特殊需求,基本上不用改。
配置完成后,退出 menuconfig 并执行编译
make uImage
编译完成后,使用 find 命令检查当前目录下是否已经成功生成 uImage 文件
这个 uImage 文件就是需要拷贝到单板上运行的 Linux 内核镜像。
至此Linux内核构建完成。
📁 4. 根文件系统构建
根文件系统(RootFS) 是单板上最核心的部分,包含各种库、驱动和设备文件。由于设备资源有限(存储空间仅 8GB,内存 1GB),我们使用 BusyBox 来构建一个简易的根文件系统——毕竟这类“小霸王机”你指望玩 3A 大作是不现实的 。
RootFS 的构建流程主要可分为4步:交叉编译 BusyBox、添加基本目录和文件、打包 RootFS 镜像
🧲 4.1 交叉编译 BusyBox
在 WSL2 中执行以下命令将 busybox 源码 解压到指定目录
cp busybox-1.21.1.tar.gz /opt
cd /opt
tar -xvf busybox-1.21.1.tar.gz
busybox 在编译之前,也可以像 Linux 内核一样用 ncurses 提供的内核配置菜单 来定制内容。接下来我们需要移动到 busybox 目录中,加载默认配置,并进入 menuconfig 菜单
cd busybox-1.21.1
make defconfig
make menuconfig
在 menuconfig 菜单中,我们需要进入 Linux Module Utilities 选项中,取消 Simplified modutils,并勾选:
- insmod
- rmmod
- lsmod
- modprobe
- Pretty output
- depmod
- Blacklist support
如图所示:
这样编译出来的 BusyBox 根文件系统就自带模块管理命令,方便后续调试内核驱动模块。
配置完成后,保存退出,并执行编译命令和安装命令:
make ARCH=arm CROSS_COMPILE=arm-cortex_a9-linux-gnueabi-
make install ARCH=arm CROSS_COMPILE=arm-cortex_a9-linux-gnueabi-
⚠️ 注意:这里 make install 后面必须要跟 ARCH=arm CROSS_COMPILE=arm-cortex_a9-linux-gnueabi-。这一点 BusyBox 和其他开源项目不一样,BusyBox 在 make install 的时候依然会检查关键的编译参数是否和上次编译一致,如果不一致会重新编译。更多解释详见 6. 问题与解决方案。
⚠️ 注意:这里不建议新手小白通过直接修改 busybox 这类开源项目的 Makefile 的方法来编译,因为有的开源项目 Makefile 结构复杂,直接修改容易引入各种隐藏问题,比如 CC 变量混乱,路径出错等问题。建议通过添加全局环境变量、menuconfig 菜单配置、.configure 配置、make时导入临时环境变量这几种方法来生成编译用的 Makefile 。当然如果你是 Makefile 大神那你想怎么玩都行。
💡 提示:前面虽然不建议直接改 Makefile,但是强烈建议在 make 之前先检查 Makefile,观察其中 ARCH、CROSS_COMPILE 等参数是否正确,确认无误再编译。这样能快速区分问题是出在 Makefile 的配置阶段,还是 make 的编译阶段,大大缩减排错的时间成本。
完成编译安装后 busybox 目录下会生成 _install 目录,该目录包含 bin sbin usr linuxrc 等文件,使用 find 命令在该目录下找到 busybox 文件,然后使用 file 命令确认该文件的运行环境架构是否与目标单板一致(32位arm架构)。这个 busybox 文件 就是根文件系统正常运行所需要的 最关键的核心文件 。
🧬 4.2 添加基本目录和文件
BusyBox 交叉编译只生成了根文件系统的部分文件,我们需要在此基础上自己手动添加其余的目录和文件,来构建完整的根文件系统。
首先将交叉编译生成的所有文件,移动到 WSL2 系统中合适的位置,这个位置作为后续打包 img 镜像用的根文件系统目录。然后在根文件系统目录中创建其他必要的目录
mkdir -p /opt/rootfs
cp -a /opt/busybox-1.21.1/_install/* /opt/rootfs
cd /opt/rootfs
mkdir lib etc proc dev sys home var mnt
然后通过交叉编译器的 readelf 工具检查 busybox 运行时所需要的依赖
接着从交叉编译器目录 /opt/toolchains
中拷贝缺少动态库(libm.so.6、libc.so.6、ld-linux.so.3 及其软连接)到根文件系统目录 /opt/rootfs/lib
下。
然后我们需要创建三个系统启动脚本文件,首先是 inittab 文件
vim /opt/rootfs/etc/inittab
在 inittab 文件中添加以下内容:
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
然后是 rcS 脚本
mkdir -p /opt/rootfs/etc/init.d
vim /opt/rootfs/etc/init.d/rcS
在 rcS 脚本中输入以下代码:
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
接着是驱动配置文件 fstab
vim /opt/rootfs/etc/fstab
在 fstab 中输入以下代码:
proc /proc proc defaluts 0 0
sysfs /sys/ sysfs defaluts 0 0
tmpfs /dev tmpfs defaluts 0 0
最后给 rcS 脚本赋予可执行权限
chmod +x /opt/rootfs/etc/init.d/rcS
📀 4.3 打包 RootFS 镜像
完成根文件系统所有文件和目录的创建后,需要将整个 /opt/rootfs 根文件系统打包成 img 镜像模式。
先修改 WSL2 中 /etc/mke2fs.conf,确保生成的文件系统属性正确。
⚠️ 注意:metadata_csum 和 64bit 这两个参数和我使用的 busybox 版本不兼容,不去掉打包的时候会报错,详见 6. 问题与解决方案
然后在合适的目录下创建并初始化一个 200M 的 ext4 镜像文件:
cd /opt
sudo dd if=/dev/zero of=rootfs_ext4.img bs=1k count=204800
sudo mkfs.ext4 rootfs_ext4.img
下一步,挂载并拷贝根文件系统
sudo mkdir /mnt/initrd
sudo mount -t ext4 -o loop rootfs_ext4.img /mnt/initrd
sudo cp /opt/rootfs/* /mnt/initrd -frd
sudo umount /mnt/initrd
最终生成的 rootfs_ext4.img 就是要烧写到 eMMC 上的根文件系统镜像。
至此,根文件系统已完成构建,
🌌 5. 系统部署
要将之前构建的 U-Boot 、Linux 内核、根文件系统部署到单板上,需要依次完成 SD启动卡制作、串口调试环境搭建 和 USB调试环境搭建。
🏁 5.1 SD启动卡制作
根据之前的整体架构思路,我们需要把系统烧写到 EMMC 上,让系统能够从 EMMC 启动。但是 EMMC 里面一开始是没有东西的,所以我们需要借助 SD 启动卡 来启动一个 U-Boot 小系统,利用这个小系统往 EMMC 里面烧写东西。
先将 SD 卡插入 SD 卡读卡器,然后将 SD 卡读卡器插入 PC 的 USB 口,等待 PC 识别,PC识别到以后对 SD 卡进行格式化,如图所示
初始化成 FAT32 的文件格式,然后在 Windows 系统打开官方提供的烧写程序 IROM_Fusing_Tool.exe,先选择你要烧写的磁盘(就是你的SD卡读卡器),然后点击 Browse 选择之前编译好的 ubootpak.bin 文件,然后再点击 add ,最后再点击 start 开始烧录。
烧录完成后把 SD 卡从读卡器上取下来,至此 SD 启动卡已经制作完成。
接下来只需要完成串口调试环境的搭建,就能通过这张 SD 启动卡往 EMMC 里面烧写东西了。
📇 5.2 串口调试环境搭建
在这里我们使用 kermit 在 WSL2 上对单板进行串口调试。
Kermit 是一款早期广泛使用的 串口通信与文件传输工具,最初由哥伦比亚大学开发。它支持多种协议和设备,尤其在嵌入式开发中常被用于 串口调试。
我们首先需要在 WSL2 上安装 Kermit
sudo apt install kermit
然后使用 USB 转串口线 将单板与 PC 相连。
但需要注意,WSL2 无法直接识别 USB 设备,因为 WSL2 中的硬件几乎全部是虚拟化的,物理设备实际上挂载在 Windows 系统中。
因此,我们需要通过 powershell 的 usbipd 将 Windows 的 USB 转串口映射到 WSL2 中。
用 管理员权限 打开 powershell 终端,并执行以下命令
usbipd list
观察终端上的输出,找到串口设备(一般是USB-SERIAL CH340),记录其 BUSID (这里是1-1)
然后执行命令将串口设备映射到 WSL2 系统中
usbipd bind --busid 1-1
usbipd attach --wsl --busid 1-1
完成后回到 WSL2 中查看映射过来的串口设备
find /dev -name "*USB*"
如果能看到类似 /dev/ttyUSB0
这样的输出说明串口已经成功映射。
进入 home 目录,新建并配置 .kermit 文件
cd ~
vim .kermrc
根据串口参数写入以下配置
set speed 115200
set flow-control none
set line /dev/ttyUSB0
set carrier-watch off
set handshake none
set file type bin
set file name lit
set rec pack 1000
set send pack 1000
set window 5
保存退出后,在终端执行 kermit 命令进入程序,然后再执行 connect 命令链接串口,如果链接成功会看到如下效果:
然后我们将之前制作好的 SD 启动卡 插入单板的 SD0 卡槽,给单板上电,在看到串口输出倒数3秒的打印信息的时候按下回车,进入 U-Boot 系统,如图所示
至此,串口调试环境已经搭建完成。
顺便一提,kermit 的退出方式是先按 Ctrl + \
再按 c
,最后执行 exit 命令,即可回到 WSL2 终端。
🔌 5.3 USB 调试环境搭建
由于串口传输速度较慢,我们使用 USB OTG + fastboot 来完成镜像烧录。
Fastboot 是 Google 提供的一种 Android/嵌入式设备底层刷机与调试工具,最早应用于 Android Bootloader。
我们首先需要在 WSL2 系统中安装 fastboot
sudo apt install fastboot
然后在合适的位置创建 fastboot 目录,并拷贝镜像文件
mkdir /opt/fastboot
cp /opt/rootfs_ext4.img /opt/fastboot/
cp /opt/uboot/ubootpak.bin /opt/fastboot/
cp /opt/kernel/arch/arm/boot/uImage /opt/fastboot/
然后用 USB 转 OTG 线 链接单板和 PC 。和串口一样,OTG 设备在 WSL2 中也不可见,需要通过 usbipd 映射。而且 OTG 设备还有两种模式,供电模式和传输模式。OTG 设备默认是供电模式,在供电模式下的 OTG 依然是无法识别的。所以我们需要先通过串口调试把 OTG 转换成传输模式,然后再通过 usbipd映射
打开一个 WSL2 终端,用 kermit 链接串口,单板上电,在3秒倒数的时候按回车,进入 U-Boot 命令行模式
在 U-Boot 命令行模式执行以下命令先对 EMMC 进行分区
fdisk 2 2 0x100000:0x4000000 0x4100000:0x2f200000
💡 提示:看清楚别少打或多打一个0了,否则系统就起不来咯,就要重新制作 SD 启动卡咯
然后再执行 fastboot 命令,让 OTG 从供电模式转换成传输模式
fastboot
此时这个 WSL2 终端会停留在 fastboot 模式。然后我们以管理员模式打开一个 powershell 终端,并执行以下命令(在这里我的 OTG 设备的 BUSID 是 1-2)
usbipd list
usbipd bind --busid 1-2
usbipd attach --wsl --busid 1-2
然后我们 再开一个 WSL2 终端(不要关掉正在通过 kermit 进行串口调试的那个 WSL2 终端)。在这个终端中我们先检查 fastboot 是否已经切换成传输模式
fastboot devices
如果有如图所示类似输出就说明已经切换成传输模式了
接着再进入 fastboot 目录,使用 fastboot 将准备好的镜像文件通过 USB 传输并烧录到单板的 EMMC 中。
cd /opt/fastboot
fastboot flash ubootpak ubootpak.bin
fastboot flash boot uImage
fastboot flash system rootfs_ext4.img
命令执行完成后,两个 WSL2 终端窗口都会有传输完成的提示
这时,在运行 kermit 的 WSL2 终端窗口中按 Ctrl + c
键退出 fastboot 传输模式,然后在 U-Boot 命令行中设置启动参数
setenv bootcmd mmc read 0x48000000 0x800 0x3000 \; bootm 0x48000000
setenv bootargs root=/dev/mmcblk0p2 init=/linuxrc console=ttySAC0,115200 max cpus=1 lcd=wy070ml tp=gslx680-linux
这里第二行命令的 lcd 和 tp 参数用于匹配单板的触摸屏。
完成设置后执行 boot 命令启动系统
boot
系统成功启动后,进入 / 根目录执行 ls,可以看到之前制作的根文件系统中的所有目录和文件。
然后你可以把 SD 卡从 SD0 卡槽里面拔出来再重新启动,你会发现它也能进入根文件系统。
至此,USB 调试环境已经搭建完成,系统部署也已经完成。
💣 6. 问题和解决方案
👾 6.1 kermit 退出卡住
在退出 kermit 的时候有概率会发生卡住的现象,比如:
(~/) C-Kermit>exit
Closing /dev/ttyUSB0...ttclos() timeout: hangup
如果碰到了,那么恭喜你,这就是传说中的 卡在了不可中断的 I/O 状态 。
这种情况 kermit 的进程状态显示的是 D+,kill 9 是杀不掉的,kill 15 也是杀不掉的,怎么办?
一个字,拔!
然后你就会发现拔了串口线他还卡在哪里,杀不死退不出。
(不能让我一个人当 🤡)
好吧,其实这种情况你只能重启 WSL2 系统,才能解决这个问题。
🔱 6.2 内核编译缺少 mkimage
如果你在编译内核 uImage 的时候出现以下报错:
那么你需要回去重新编译你的 uboot,并把编译出来的 mkimage 这个文件添加到系统环境变量中。
因为这个报错是由于 uImage 编译的时候找不到 mkimage 没法兼容 uboot 导致的。
☣️ 6.3 内核坏块擦除异常
如果单板再启动的时候打印一大堆类似这样的信息:
Bad eraseblock 1229 at 0x0000007200000(first page)
并且迟迟进不了根文件系统,那么大概率是你的人品问题,平时多做好事,就能很好的解决这个问题。
小概率是你动了单板厂家给的内核源码,并且加入了不支持的存储介质驱动(比如你用 Nand Flash 的 EMMC,但却给他强加了 Nor Flash 的驱动)导致的。这时你需要在内核配置菜单中自己检查你 所有的存储介质,特别是装了系统的存储介质的驱动,检查他们是否和你实际用的物理存储介质保持一致,确保一致后再编译烧写内核启动。再不行那就是你人品问题了,多做好事。
❌ 6.4 根文件系统异常重启
如果单板在启动的时候进不了根文件系统,反复打印如下信息并自动重启
reboot in 5 second
那么你需要排查两处地方:
第一处是根文件系统的配置文件 /etc/fstab
中的内容是否有错误(比如把 proc 写成 porc );
第二处是 WSL2 系统中的 /etc/mke2fs.conf
配置文件中的 ext4 选项中是否有 metadata_csum 和 64bit ,如果有的话把他们去掉。这两个参数会导致跟文件系统打包的时候生成单板不兼容的镜像格式,并且最终导致单板无法正常加载根文件系统的镜像。
☢️ 6.5 遇到被分尸的 SD 卡
当你把装有 SD 卡的读卡器插入 PC 的 USB 接口,你可能会发现,一张SD卡出现了3个或更多个盘
这种就是被分尸过的SD卡,然后你还一不小心格式化了其中的一个尸块(你说的就是我)。这时候该怎么办?
这种 SD 卡属于之前装过系统的 SD 卡,要想把这种 SD 卡弄干净需要借助磁盘工具来合并分区。
按下 win + x
然后在弹出的菜单栏中选择 磁盘管理
在磁盘管理窗口中找到你的移动盘,删除所有分区(注意别删电脑的系统盘,删了就得重装了),然后创建一个新分区,这时候三个尸块就会被拼起来了。
然后再对 SD 卡进行格式化,你的 SD 卡就被成功复活了
🚫 6.6 遇到会隐身的 SD 卡
如果你在处理被分尸过的 SD 卡的过程中,删除了所有分区但没有创建新分区就小手一滑把 SD 卡读卡器拔了。然后你再次插入 SD 卡读卡器就会发现,原来的 SD 卡只能在我的电脑中看到,在磁盘管理中识别不出来了,直接对齐进行格式化还会弹出警告
这种情况就是你的 SD 卡学会隐身了。在隐身状态下,这张 SD 卡能过躲过你的所有操作。要让他解除隐身状态,你需要一个带 SD 卡卡槽和 Linux 系统的单板。
将这张隐身卡插入 SD 卡卡槽,然后单板上电进入 Linux 系统,执行以下命令
ls /dev
查看设备中有没有出现 SD 卡,一般 SD 卡的设备名字是根据你卡槽来定的,比如 mmcblk1。
找到以后用 fdisk 对 SD 卡进行分区
fdisk /dev/mmcblk1
在 fdisk 交互界面进行如下操作:
- n -> 新建分区
- p -> 新建主分区的类型为 primary
- 1 -> 新建主分区的编号为1
- enter or type start sector -> 输入起始扇区位置,按回车用默认值
- enter -> 输入结束扇区位置,按回车用默认值
- w ->写入并退出
完成分区以后重新启动单板让分区生效,然后再用 mkfs.vfat 对 SD 卡进行初始化:
mkfs.vfat /dev/mmcblk1
完成格式化以后 SD 卡就会解除隐身状态,这时再把它接回 Windows 系统中磁盘管理就能识别到它。
当然以上的这些操作都得在有 SD 卡卡槽的 Linux 单板上才能执行,如果你没有这些硬件条件,那么只能考虑 50 包邮卖给垃圾佬了。
⁉️ 6.7 SD 卡烧录工具弹红叉
你在 Windows 系统上打开单板厂家提供的 SD 卡烧录工具时,只要你的 Windows 系统不是非常远古的版本,那么它百分十1000会给你弹个红叉
这里我告诉你们怎么去排这类错,首先按照这个警告说的在命令行用 sxstrace.exe开启追踪,如图所示
然后再次打开程序让他再次出现警告,关闭警告后切换回命令提示行,按下回车结束追踪,然后再将日志以txt的形式输出,然后用gvim打开这个txt日志
不要管这个日志什么内容(反正你也看不懂),全部复制下来,喂给 AI,然后 AI 会告诉你是缺少 Visual C++ 2008 MFC 运行时库导致的,需要下载 Visual C++ 2008 SP1 Redistributable Package(x86)。
然后就去微软官网搜索这个包名,找到后下载 vcredist_x86.ext ,以管理员身份运行,并进行安装,安装过程基本上就是一直下一步就行了,完成后重启系统再次运行单板官方的烧录软件,就能正常看到界面了
🎇 7. 后期预告
本篇主要介绍了如何在 WSL2 中构建嵌入式 Linux 系统,以及如何把嵌入式 Linux 系统部署到单板上。在下一篇中我将主要介绍如何在单板上的 LInux 系统中实现 Wifi 驱动的移植、SSH远程调试工具的移植,以及e2fsprogs 磁盘管理工具的移植。
🌀 传送门:part 2