QEMU-从uboot启动(4)

本文详细介绍了如何编译U-Boot引导加载程序、Linux内核以及构建文件系统,并在QEMU中进行模拟测试。涉及git拉取源码、配置选项、交叉编译、制作SD卡镜像以及启动参数设置等步骤。在过程中遇到了内核启动问题,但未解决,最后使用了Buildroot提供的测试镜像成功启动。
摘要由CSDN通过智能技术生成

上面是我的微信和QQ群,欢迎新朋友的加入。

准备好kernel、roofs、uboot的源码,我现在下载的是官网上最新的

编译uboot

从gitlab获取uboot源码

https://source.denx.de/u-boot/u-boot.git

选一个合适的SOC

git reset --hard 61ba1244b548463dbfb3c5285b6b22e7c772c5bd
ls configs/ve*

我还是选vexpress

不过最新版本的uboot把这个删了,需要恢复一下之前的版本

编译

sudo apt-get install gcc-arm-linux-gnueabihf
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- vexpress_ca9x4_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

生成镜像文件

编译LINUX

cross_compile=arm-linux-gnueabihf-
make CROSS_COMPILE=$cross_compile ARCH=arm vexpress_defconfig
make CROSS_COMPILE=$cross_compile ARCH=arm menuconfig
make CROSS_COMPILE=$cross_compile ARCH=arm zImage -j8
make CROSS_COMPILE=$cross_compile ARCH=arm dtbs

编译文件系统

之前用busybox,不够完整,换一下buildroot

需要先下载交叉编译工具:https://snapshots.linaro.org/gnu-toolchain/

我选一个最新的

选择压缩包

解压

sudo apt-get install g++
sudo mv gcc-linaro-10.2.1-2021.04-x86_64_arm-linux-gnueabihf/ /usr/local/
make qemu_arm_vexpress_defconfig
make menuconfig

文件系统配置如上

make -j8

刚刚一个pack下载不了,搞了半天,后面直接跳过

准备启动需要的镜像和文件

创建一个文件夹用于存放文件

制作一个SD镜像

sudo rm -rf uboot.disk
dd if=/dev/zero of=uboot.disk bs=1M count=1024//创建一个SD镜像
sgdisk -n 0:0:+10M -c 0:kernel uboot.disk//放内核文件
sgdisk -n 0:0:0 -c 0:rootfs uboot.disk//放文件系统
sgdisk -p uboot.disk//查看分区
losetup -f     //找一个空的loop文件

把SD卡映射到这个loop设备上

sudo losetup /dev/loop7 uboot.disk
sudo partprobe /dev/loop7
ls /dev/loop7*

格式化

删除之前的文件夹
sudo rm -rf p1
sudo rm -rf p2

格式化
sudo mkfs.ext4 /dev/loop7p1
sudo mkfs.ext4 /dev/loop7p2

挂载
sudo mkdir p1
sudo mkdir p2
sudo mount -t ext4 /dev/loop7p1 p1/
sudo mount -t ext4 /dev/loop7p2 p2/

拷贝文件
sudo cp ../linux-5.12.9/arch/arm/boot/zImage p1/
sudo cp ../linux-5.12.9/arch/arm/boot/dts/vexpress-v2*.dtb p1/
sudo cp -r ../buildroot-2021.02.2/output/target/* ./p2

卸载
sudo umount p1 p2
sudo losetup -d /dev/loop7

启动qemu
uboot_image=../u-boot/u-boot

qemu-system-arm \
-M vexpress-a9 \
-m 512M \
-smp 1 \
-nographic \
-kernel ${uboot_image} \
-sd ./uboot.disk

观察uboot启动成功

上面还没启动kernel,需要配置环境变量

part list mmc 0//查看挂载的磁盘
ls mmc 0:1//查看内容
ls mmc 0:2
load mmc 0:1 0x60008000 zImage
load mmc 0:1 0x61000000 vexpress-v2p-ca9.dtb

设置
setenv bootargs 'root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait earlycon console=tty0 console=ttyAMA0 init=/linuxrc ignore_loglevel'

bootz 0x60008000 - 0x61000000

内核启动完成

现在还有个问题

一直在打印

搞了会,放弃了,有时间再说,从uboot挂载kernenl成功了

 

------------------------------------------------------------分割线------------------------------------------------------------

是kernel配置的有问题

在buildroot下有个测试的镜像,是可以使用的

整理

//准备文件系统
sudo rm -rf uboot.disk
dd if=/dev/zero of=uboot.disk bs=1M count=1024
sgdisk -n 0:0:+10M -c 0:kernel uboot.disk
sgdisk -n 0:0:0 -c 0:rootfs uboot.disk
sgdisk -p uboot.disk
losetup -f
sudo losetup /dev/loop10 uboot.disk
sudo partprobe /dev/loop10
ls /dev/loop10*
sudo rm -rf p1
sudo rm -rf p2
sudo mkfs.ext4 /dev/loop10p1
sudo mkfs.ext4 /dev/loop10p2
sudo mkdir p1
sudo mkdir p2
sudo mount -t ext4 /dev/loop10p1 p1/
sudo mount -t ext4 /dev/loop10p2 p2/
sudo cp ../buildroot-2021.02.2/output/images/zImage p1/
sudo cp ../buildroot-2021.02.2/output/images/vexpress-v2*.dtb p1/
sudo cp -r ../buildroot-2021.02.2/output/target/* ./p2
sudo umount p1 p2
sudo losetup -d /dev/loop10

//启动qemu
uboot_image=../u-boot/u-boot
qemu-system-arm \
-M vexpress-a9 \
-m 512M \
-smp 1 \
-nographic \
-kernel ${uboot_image} \
-sd ./uboot.disk
-net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \

//配置Uboot
load mmc 0:1 0x60008000 zImage
load mmc 0:1 0x61000000 vexpress-v2p-ca9.dtb

setenv bootargs 'root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait earlycon console=ttyAMA0 init=/linuxrc ignore_loglevel'

bootz 0x60008000 - 0x61000000

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值