QEMU学习之路(8)— ARM32通过u-boot 启动Linux

news2025/5/24 19:46:44

QEMU学习之路(8)— ARM32通过u-boot 启动Linux

一、前言

参考文章:
Linux内核学习——内核的编译和启动
Linux 内核的编译和模拟执行
Linux内核运行——根文件系统
Linux 内核学习——使用 uboot 加载内核

二、构建Linux内核

1、获取Linux源码

git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux.git -b v5.4 linux-5.4

2、配置内核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- vexpress_defconfig

3、编译内核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j $(nproc)

编译出的 kernel image 位于 arch/arm/boot/zImage

三、构建busybox

1、获取busybox 源码

wget https://busybox.net/downloads/busybox-1.32.0.tar.bz2

解压,进入源码目录

tar xvf busybox-1.32.0.tar.bz2
cd busybox-1.32.0

2、配置静态编译
使用如下命令进入配置界面

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

使用以下选项,选择静态方式编译busybox,目的是将程序的所有依赖库直接打包进二进制文件,避免了Linux系统运行时依赖动态库。

Settings  --->
    [*] Build static binary (no shared libs) 

3、编译busybox

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j $(nproc)

4、安装
使用如下命令会将busybox默认安装到_install目录下

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- install

四、构建根文件目录

创建一个sdcard.img镜像,初始化为ext4格式

dd if=/dev/zero of=sdcard.img bs=1M count=16
mkfs.ext4 sdcard.img

把镜像挂载在rootfs目录下

mkdir rootfs
sudo mount -t ext4 sdcard.img rootfs/ -o loop

将busybox文件复制到rootfs目录下

sudo cp -r busybox-1.32.0/_install/* rootfs/

进入rootfs目录,新建如下文件夹

cd rootfs
sudo mkdir etc proc sys dev var boot

设置启动有关的配置脚本,将busybox 目录下启动的脚本直接拷贝过来

sudo cp -rf ../busybox-1.32.0/examples/bootfloppy/etc/* ./etc/

修改etc/fstab文件内容如下所示

proc    /proc   proc    defaults    0   0
sysfs   /sys    sysfs   defaults    0   0
tmpfs   /var    tmpfs   defaults    0   0

修改etc/init.d/rcS文件内容如下所示

#! /bin/sh

/bin/mount -a
/sbin/mdev -s

fstab 文件中的内容指定系统启动时需要挂载的文件系统以及挂载的选项,
rcS 文件是启动脚本,其中的 /bin/mount -a 表示挂载 fstab 中指定的文件系统,/sbin/mdev -s 则负责在Linux系统启动时自动检测和管理设备

回到镜像目录,将Imagedtb文件拷贝到rootfs文件夹下

cd ../
sudo cp linux-5.4/arch/arm/boot/zImage rootfs/boot/
sudo cp linux-5.4/arch/arm/boot/dts/vexpress-v2p-ca9.dtb rootfs/boot/

取消镜像挂载

sudo umount rootfs

五、构建U-Boot

1、获取uboot源码

git clone https://gitee.com/mirrors/u-boot.git -b v2020.10 u-boot_2020.10 

2、配置编译选项

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- vexpress_ca9x4_defconfig

3、编译uboot

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j $(nproc)

六、启动测试

使用如下命令启动

qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot_2020.10/u-boot -sd ./sdcard.img -nographic -no-reboot

启动界面如下
在这里插入图片描述
在u-boot命令行输入如下命令,将Image和dtb加载到内存中

load mmc 0:0 0x66000000 boot/zImage
load mmc 0:0 0x66500000 boot/vexpress-v2p-ca9.dtb

设置启动参数如下

setenv bootargs "root=/dev/mmcblk0 rw console=ttyAMA0,115200 init=/linuxrc"

使用如下命令启动

bootz 0x66000000 - 0x66500000

启动界面如下所示
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2336660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AgentOps - 帮助开发者构建、评估和监控 AI Agent

文章目录 一、关于 AgentOps二、关键集成 🔌三、快速开始 ⌨️2行代码中的Session replays 首类开发者体验 四、集成 🦾OpenAI Agents SDK 🖇️CrewAI 🛶AG2 🤖Camel AI 🐪Langchain 🦜&#x1…

leetcode 122. Best Time to Buy and Sell Stock II

题目描述 这道题可以用贪心思想解决。 本文介绍用动态规划解决。本题分析方法与第121题一样,详见leetcode 121. Best Time to Buy and Sell Stock 只有一点区别。第121题全程只能买入1次,因此如果第i天买入股票,买之前的金额肯定是初始金额…

【ROS】代价地图

【ROS】代价地图 前言代价地图(Costmap)概述代价地图的参数costmap_common_params.yaml 参数说明costmap_common_params.yaml 示例说明global_costmap.yaml 参数说明global_costmap.yaml 示例说明local_costmap.yaml 参数说明local_costmap.yaml 示例说明…

《Against The Achilles’ Heel: A Survey on Red Teaming for Generative Models》全文阅读

《Against The Achilles’ Heel: A Survey on Red Teaming for Generative Models》 突破阿基里斯之踵:生成模型红队对抗综述 摘要 生成模型正迅速流行并被整合到日常应用中,随着各种漏洞暴露,其安全使用引发担忧。鉴于此,红队…

datagrip连接mysql问题5.7.26

1.Case sensitivity: plainmixed, delimitedexac Remote host terminated the handshake. 区分大小写:plain混合,分隔exac 远程主机终止了握手。 原因:usessl 参数用于指定是否使用 SSL(Secure Sockets Layer)加密来保护数据传…

探索亮数据Web Unlocker API:让谷歌学术网页科研数据 “触手可及”

本文目录 一、引言二、Web Unlocker API 功能亮点三、Web Unlocker API 实战1.配置网页解锁器2.定位相关数据3.编写代码 四、Web Scraper API技术亮点 五、SERP API技术亮点 六、总结 一、引言 网页数据宛如一座蕴藏着无限价值的宝库,无论是企业洞察市场动态、制定…

【本地MinIO图床远程访问】Cpolar TCP隧道+PicGo插件,让MinIO图床一键触达

写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除! 文章目录 前言MinIO本地安装与配置cpolar 内网穿透PicGo 安装MinIO远程访问总结互动致谢参考目录…

Policy Gradient思想、REINFORCE算法,以及贪吃蛇小游戏(一)

文章目录 Policy Gradient思想论文REINFORCE算法论文Policy Gradient思想和REINFORCE算法的关系用一句人话解释什么是REINFORCE算法策略这个东西实在是太抽象了,它可以是一个什么我们能实际感受到的东西?你说的这个我理解了,但这个东西,我怎么优化?在一堆函数中,找到最优…

Profibus DP主站转modbusTCP网关与dp从站通讯案例

Profibus DP主站转modbusTCP网关与dp从站通讯案例 在当前工业自动化的浪潮中,不同协议之间的通讯转换成为了提升生产效率和实现设备互联的关键。Profibus DP作为一种广泛应用的现场总线技术,与Modbus TCP的结合,为工业自动化系统的集成带来了…

快速部署大模型 Openwebui + Ollama + deepSeek-R1模型

背景 本文主要快速部署一个带有web可交互界面的大模型的应用,主要用于开发测试节点,其中涉及到的三个组件为 open-webui Ollama deepSeek开放平台 首先 Ollama 是一个开源的本地化大模型部署工具,提供与OpenAI兼容的Api接口,可以快速的运…

H.265硬件视频编码器xk265代码阅读 - 帧内预测

源代码地址: https://github.com/openasic-org/xk265 帧内预测具体逻辑包含在代码xk265\rtl\rec\rec_intra\intra_pred.v 文件中。 module intra_pred() 看起来是每次计算某个4x4块的预测像素值。 以下代码用来算每个pred_angle的具体数值,每个mode_i对应…

Arcgis经纬线标注设置(英文、刻度显示)

在arcgis软件中绘制地图边框,添加经纬度度时常常面临经纬度出现中文,如下图所示: 解决方法,设置一下Arcgis的语言 点击高级--确认 这样Arcgis就转为英文版了,此时在来看经纬线刻度的标注,自动变成英文

Windows安装Ollama并指定安装路径(默认C盘)

手打不易,如果转摘,请注明出处! 注明原文:http://blog.csdn.net/q258523454/article/details/147289192 一、下载Ollama 访问Ollama官网 打开浏览器,访问Ollama的官方网站:https://ollama.ai/。 在官网首页…

Python自动化处理奖金分摊:基于连续空值的智能分配算法升级

Python自动化处理奖金分摊:基于连续空值的智能分配算法升级 原创 IT小本本 IT小本本 2025年04月04日 02:00 北京 引言 在企业薪酬管理中,团队奖金分配常涉及复杂的分摊规则。传统手工分摊不仅效率低下,还容易因人为疏漏导致分配不公。 本文…

AI工具箱源码+成品网站源码+springboot+vue

大家好,今天给大家分享一个靠AI广告赚钱的项目:AI工具箱成品网站源码,源码支持二开,但不允许转售!! 本人专门为小型企业和个人提供的解决方案。 不懂技术的也可以直接部署工具箱网站,成为站长&…

如何下载免费地图数据?

按照以下步骤下载免费地图数据。 1、安装GIS地图下载器 从GeoSaaS(.COM)官网下载“GIS地图下载器”软件:,安装完成后桌面上出现”GIS地图下载器“图标。 双击桌面图标打开”GIS地图下载器“ 2、下载地图数据 点击主界面底部的“…

IO 口作为外部中断输入

外部中断 1. NVIC2. EXTI 1. NVIC NVIC即嵌套向量中断控制器,它是内核的器件,M3/M4/M7 内核都是支持 256 个中断,其中包含了 16 个系统中断和 240 个外部中断,并且具有 256 级的可编程中断设置。然而芯片厂商一般不会把内核的这些…

《MySQL基础:了解MySQL周边概念》

1.登录选项的认识 -h:指明登录部署了mysql服务的主机,默认为127.0.0.1-P:指明要访问的端口号,默认为3306-u:指明登录用户-p:指明登录密码 2.什么是数据库 2.1认识数据库 第一点理解。 mysql是数据库的客户…

RCL谐振电压增益曲线

谐振电路如何通过调频实现稳压&#xff1f; 为什么要做谐振&#xff1f; 在谐振状态实现ZVS导通&#xff0c;小电流关断 电压增益GVo/Vin&#xff0c;相当于产出投入比 当ff0时&#xff0c;G1时&#xff0c;输出电压输入电压 当G<1时&#xff0c;输出电压<输入电压 …

JavaScript:表单及正则表达式验证

今天我要介绍的是在JavaScript中关于表单验证内容的知识点介绍&#xff1a; 关于表单验证&#xff0c;我接下来则直接将内容以及效果显示出来并作注解&#xff0c;这样可以清晰看见这个表达验证的妙用&#xff1a; <form id"ff" action"https://www.baidu.…