【ARM-Linux篇】u-boot编译

一、u-boot简介

uboot是一种通用的引导加载程序,它可以用于多种嵌入式系统,支持多种操作系统,如Linux, Android,NetBSD等。uboot的主要作用是将操作系统内核从存储设备(如Flash, SD卡等)加载到内存中,并执行内核代码。

二、XIP设备

XIP设备是指一种可以直接在存储器中执行程序代码的设备,而不需要将代码复制到内存中。XIP的全称是eXecute In Place,即芯片内执行。像片内的SRAM, NOR Flash, BROM等。

三、为什么需要u-boot

因为嵌入式系统的硬件资源有限,CPU上电后只能执行一小段内置的代码(BROM System),这段代码不足以完成内存初始化,文件系统访问,网络通信等复杂的任务。因此,需要一个中间层的程序,来完成这些工作,并引导操作系统启动。

四、u-boot启动流程

执行顺序:
1. 当H616芯片上电或复位后,brom会自动执行,它会根据芯片的引脚电平或寄存器设置,确定启动模式,如从nand flash,spi flash,sd卡,usb等设备中启动。
2. brom会根据启动模式,选择相应的设备驱动,初始化SD卡设备控制器,设置设备参数,如时钟频率,总线宽度,电压等级等
3. brom会从启动设备的特定扇区中,读取第一级引导程序,如spl将其加载到芯片的内部sram中,并跳转到其入口点执行
4. spl会继续初始化一些硬件设备,如ddr,pll,gpio等,然后从启动设备的特定分区中,读取第二级引导程序,如uboot proper,将其加载到ddr中,并跳转到其入口点执行,
5. uboot会继续初始化一些硬件设备,如网卡,lcd,从SD卡中读取内核文件,启动操作系统。 

五、u-boot编译流程 

方法一:

1. 运行 build.sh 脚本, 记得加 sudo 权限

test@test:~/orangepi-build$ sudo ./build.sh

2. 选择 U-boot package, 然后回车

3. 接着选择开发板的型号

4. 重复编译 u-boot 时, 使用下面的命令无需通过图形界面选择, 可以直接开始编译 u-boot 

sudo ./build.sh BOARD=orangepizero2 BRANCH=next BUILD_OPT=u-boot 

5. 查看编译生成的 u-boot deb 包 

test@test:~/orangepi-build$ ls output/debs/u-boot/linux-u-boot-nextorangepizero2_
3.1.0_arm64.deb

6. 然后登录到H616开发板, 卸载已安装的 u-boot 的 deb 包 

dpkg -l | grep linux-u-boot #查看u-boot包名称
sudo apt purge -y linux-u-boot-orangepizero2-current #卸载上面查找到的u-boot包名
称,有可能是linux-u-boot-orangepizero2-next 

7. 再安装刚才上传的新的 u-boot 的 deb 包

sudo dpkg -i linux-u-boot-next-orangepizero2_3.1.0_arm64.deb
sudo nand-sata-install #一路回车
sudo reboot -f 

方法二:

1、清理u-boot:

sudo chown test:test v2021.10-sunxi -R #修改所属用户为当前用户(根据实际用户名修改),保证当前用户下权限没有问题
cd v2021.10-sunxi
make distclean

2、配置u-boot,生成.config配置文件:

make -j6 orangepi_zero2_defconfig CROSS_COMPILE="aarch64-none-linux-gnu-" 

3、编译uboot, 生成u-boot-sunxi-with-spl.bin

make -j6 CROSS_COMPILE="aarch64-none-linux-gnu-" 

4、将生成的u-boot-sunxi-with-spl.bin 拷贝到开发板上,参考官网对BROM的启动及SD卡数据组成的说明 ,然后执行如下命令:

dd if=/dev/zero of=/dev/mmcblk1 bs=1k count=1023 seek=1 status=noxfer #格式化1k到
1M为止的数据
dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk1 bs=1k seek=8 conv=fsync

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

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

相关文章

点云从入门到精通技术详解100篇-基于超体素类型的三维点云区域生长分割(续)

目录 2.6.4 凹凸性约束 3基于超体素类型的三维点云区域生长分割算法 3.1 算法描述

一个令人惊艳的开源技术盛宴,来了!

公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 在 GitHub 上,每天都会诞生各种实用的开源项目,这些项目在不同行业与领域得到充分应用,推动技术发展,让普通人也能够真切感受到科技魅力。 而…

使用 EBS 和构建数据库服务器并使用应用程序与数据库交互

实验 4:使用 EBS 实验概览 本实验着重介绍 Amazon Elastic Block Store (Amazon EBS),这是一种适用于 Amazon EC2 实例的重要底层存储机制。在本实验中,您将学习如何创建 Amazon EBS 卷、将其附加到实例、向卷应用文件系统,然后进…

基于vue3 elment+ 的文件及表单参数上传,响应接受

这里有几个关键是 第一个是 上传用Content-Type: multipart/form-data方式向后台请求数据 application/json不行。这里需要单独设置一下覆盖一下通用的请求api方法 //一般通用application/json 请求api方式的写法 export const getbuttonlist () > { return request.get(…

ES 生命周期管理

一 .概念 ILM定义了四个生命周期阶段:Hot:正在积极地更新和查询索引。Warm:不再更新索引,但仍在查询。cold:不再更新索引,很少查询。信息仍然需要可搜索,但是如果这些查询速度较慢也可以。Dele…

TOPIAM数字身份管控平台前端技术实践

一、引言 随着企业信息化程度的不断加深,内部办公系统、业务系统及三方SaaS系统的集成与整合成为企业面临的重要挑战之一。特别是如何有效管理员工账号、权限、身份认证以及应用访问,成为保障企业信息安全、提升用户体验的关键。TOPIAM数字身份管控平台…

VSCode Prettier - Code formatter 代码格式化

格式化代码是一个挑战,但现代开发工具可以自动保持团队代码库的一致性。 在本文中,您将设置 Prettier 以自动格式化 Visual Studio Code(也称为 VS Code)中的代码。 1. 安装插件 2. 定义代码风格 在项目根目录下创建一个pretti…

JAVA:异步任务处理类CompletableFuture让性能提升一倍

一、前言 CompletableFuture 是 Java 8 引入的一个功能强大的类,用于异步编程。它表示一个可能尚未完成的计算的结果,你可以对其添加回调函数来在计算完成时执行某些操作。在 Spring Boot 应用中,CompletableFuture 可以用于提高应用的响应性…

【NPS】微软NPS配置802.1x,验证域账号,动态分配VLAN(有线网络篇)

上两篇中介绍了如何配置NPS和在WLC上如何配置802.1X来实现验证域账号和动态分配VLAN,802.1x协议作为一种成熟的身份验证框架,不仅适用于无线网络,同样也适用于有线网络环境。这里我们将介绍如何在有线网络中部署802.1x认证,以验证…

Android Coil的简单介绍及使用

前言: 本文是借鉴网上大佬的Coil相关技术文章及结合自己项目中的实际使用情况,对Coil作一个简单介绍。 简介: Coil是一个Android的图片加载框架库,是通过Kotlin协程的方式加载图片的,相对于Glide、Picasso、Fresco等…

SpringBoot启动时使用外置yml文件

第一步&#xff1a;打包时排除yml文件 <build><resources><resource><!-- 排除的文件的路径 --><directory>src/main/resources</directory><excludes><!-- 排除的文件的名称 --><exclude>application-dev.yml</e…

返回值

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 到目前为止&#xff0c;我们创建的函数都只是为我们做一些事&#xff0c;做完了就结束。但实际上&#xff0c;有时还需要对事情的结果进行获取。这类…

使用Redis常遇到的问题

文章目录 概述缓存雪崩、穿透、击穿大key问题热Key问题缓存和数据库双写一致性问题缓存并发竞争Redis线上阻塞要如何排查Redis 常见的性能问题都有哪些Redis 如何做内存优化Redis数据倾斜 概述 在使用Redis时&#xff0c;有几个常见的问题可能会出现&#xff0c;包括但不限于以…

调用上传文件接口出现格式错误

一、造成这种错误的可能有很多 1.检查一下传递格式 2.检查一下接口要求的格式 二、举个例子 这两个有什么区别&#xff1f; 那就是json、和form-data&#xff0c;一定要看仔细接口 如果还是按照json的方式去传就会报错 三、更改header里Content-Type的类型 json等的heade…

AWS CLI 命令行详解

官网 ## aws cli https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-configure-files.html## ec2 api https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-status.html 支持的格式 https://docs.aws.amazon.com/zh_cn/cli/v1/userguide/cli…

优雅地设计一个Restful响应体类(结构体)——R

highlight: xcode theme: vuepress 简介 今天给大家介绍一下如何设计一个业务数据响应体类&#xff0c;就是前端每次请求后端返回的数据我们要统一数据结构&#xff0c; 不能想怎么写就怎么写。规定一个通用的后端数据响应体类十分必要。 响应体类R 其实也很简单&#xff0c;只…

strcpy、strncpy、strcat、strncat、strcmp、strstr字符串函数的使用和模拟

strcpy的使用和模拟&#xff08;作用&#xff09; 将一个字符串的内容复制到另外一个字符串中代替掉。 strcpy的使用效果 #include <stdio.h> #include <string.h>int main () {char str1[]"Sample string";char str2[40];char str3[40];strcpy (str2…

Python 学习笔记【1】

此笔记仅适用于有任一编程语言基础&#xff0c;且对面向对象有一定了解者观看 文章目录 数据类型字面量数字类型数据容器字符串列表元组 type()方法数据类型强转 注释单行注释多行注释 输出基本输出连续输出&#xff0c;中间用“,”分隔更复杂的输出格式 变量定义del方法 标识符…

网页实现输入固定前缀,以及打开数量打开固定数量的网页

网页实现输入固定前缀&#xff0c;以及打开数量打开固定数量的网页 废话不多说直接上代码 今天客户说要写一个小需求&#xff1a; 我这边需求是帮我编写一个小程序或者是批处理文件&#xff0c;实现尾数连续的链接打开 例如http://abc1.com,后续依次自动打http://abc2.com,http…

nginx搭建简单负载均衡demo(springboot)

目录 1 安装nignx 1.1 执行 brew install nginx 命令&#xff08;如果没安装brew可百度搜索如何安装brew下载工具。类似linux的yum命令工具&#xff09;。 1.2 安装完成会有如下提示&#xff1a;可以查看nginx的配置文件目录。 1.3 执行 brew services start nginx 命令启动…