文章目录
从0开始使用QEMU模拟ARM开发环境系列一览表
uboot通过sd卡加载uImage
制作SD卡镜像
可以参见 从0开始使用QEMU模拟ARM开发环境之脚本制作分区镜像(rootfs+zImage+dtb)
可以参见 linux 制作分区镜像img文件
在名为 SDCard (可以是其他地方)的文件夹中进行
- 生成一个空的SD卡镜像
dd if=/dev/zero of=uboot.disk bs=1M count=250
# 注意自己控制 count 大小 ,总大小 1*250 = 250 M
- 创建分区
创建两个分区(一个用来存放kernel和设备树,另一个存放根文件系统)
sgdisk -n 0:0:+10M -c 0:kernel uboot.disk
sgdisk -n 0:0:0 -c 0:rootfs uboot.disk
查看分区:
sgdisk -p uboot.disk
- 映射SD卡镜像到空闲loop设备
LOOPDEV=`losetup -f` # 查找空闲的loop设备
echo $LOOPDEV # 我这边时 /dev/loop0
sudo losetup $LOOPDEV uboot.disk
sudo partprobe $LOOPDEV
sudo losetup -l
ls /dev/loop*
# 如果需要解映射 : sudo losetup -d /dev/loop0
会看到/dev/loop0p1 和/dev/loop0p2 两个节点
- 格式化并挂载loop设备
# 格式化
sudo mkfs.ext4 /dev/loop0p1
sudo mkfs.ext4 /dev/loop0p2
# 挂载
mkdir p1 p2
sudo mount -t ext4 /dev/loop0p1 p1 # 存放kernel和设备树
sudo mount -t ext4 /dev/loop0p2 p2 # 存放根文件系统
# 查看挂载情况
df -h
- 拷贝文件
# 将 zImage 和 dtb 拷贝到 p1
# 之前编译内核的内核目录(linux-5.4.95 文件夹中)
sudo cp arch/arm/boot/zImage /home/leacock/QEMU/SDCard/p1
sudo cp arch/arm/boot/dts/vexpress-v2p-ca9.dtb /home/leacock/QEMU/SDCard/p1
# 将 文件系统中的文件拷贝到 p2
# 之前制作rootfs的 busybox-1.32.1 目录中 文件夹 rootfs 下为 文件系统(未打包直接拷贝,如果制作的文件系统在镜像中需挂载)
# busybox 根目录 busybox-1.32.1 中执行
sudo cp rootfs/* /home/leacock/QEMU/SDCard/p2 -arf
# 最后 查看 p1 p2 是否有对应的文件
- 取消挂载
# 在名为 SDCard (可以是其他地方)的文件夹中进行,否则 p1 p2 需要路径
sudo umount p1 p2
sudo losetup -d /dev/loop0
启动uboot 查看sd卡情况
从 之前编译u-boot
的文件夹(u-boot-master
)中拷贝 u-boot
文件到 名为 SDCard 的文件夹中
# 在名为 SDCard (可以是其他地方)的文件夹中进行 ,因为上面制作的 SD卡镜像 在这个文件夹中
qemu-system-arm -M vexpress-a9 -m 1024M -smp 1 -nographic -kernel u-boot -sd ./uboot.disk
在倒计时结束之前打断它,不要让其进入自主模式
U-Boot 2021.04-rc1 (Feb 05 2021 - 09:02:59 +0800)
DRAM: 1 GiB
WARNING: Caches not enabled
Flash: 128 MiB
MMC: MMC: 0
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: smc911x-0
Hit any key to stop autoboot: 0
=>
查看 SD卡的情况,可以用下面的命令查看(默认SD卡就是出于可用状态):
先mmc dev 0
再mmc info
,使用part list mmc 0
查看分区内容。
查看SD卡2个分区:分区1: ls mmc 0:1
或者 ext