从零开始为香橙派orangepi zero 3移植主线linux——1.uboot

从零开始为香橙派orangepi zero 3移植主线linux——1.uboot

  • 0.前言
  • 一、准备
  • 二、制作引导文件
    • 1.BL31
    • 2.SCP firmware (Crust)
    • 3.uboot
  • 三、烧录
  • 四、运行


0.前言

  之前买了块香橙派zero3,CPU是全志H618,四核cortex-A53,烧录了官方的ubuntu系统后就一直没有再玩过。最近一些其他的学习告一段落,就把这块板子拿出来倒腾倒腾,尝试移植主线linux,最好是能够在linux中把GPU也驱动起来。
注:在本篇及之后的几篇移植文章中,暂时不对主线中的配置文件和设备树进行修改,先尝试跑起来再说。

一、准备

需要准备的设备如下:

  • PC:windows + ubuntu22.04(可用虚拟机)
  • 香橙派zero3 + TF卡、读卡器

需要准备的软件环境:

  • ubuntu中,编译uboot、kernel等需要的系统依赖库这里就不多赘述,编译过程如有报错可根据提示自行查找安装。
  • 交叉编译链:
    1.gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu,用于编译tf-a、uboot、kernel等
    下载地址:https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads/11-2-2022-02
    2.or1k-linux-musl-cross,用于编译crust
    下载地址:https://github.com/stffrdhrn/gcc/releases

软件源码:

  • TF-A,arm可信固件
    下载地址:https://github.com/ARM-software/arm-trusted-firmware
  • crust,全志电源管理固件
    下载地址:https://github.com/crust-firmware/crust
  • uboot
    下载地址:https://github.com/u-boot/u-boot
  • linux kernel
    下载地址:https://github.com/torvalds/linux
  • buildroot
    下载地址:https://github.com/buildroot/buildroot

在ubuntu中创建两个目录,一个用于存放编译工具链,另一个用于存放相关源码。nfs目录为虚拟网络文件系统,后续可以使用tftp更加方便的验证一些系统功能。
在这里插入图片描述

在这里插入图片描述

二、制作引导文件

参考文章:uboot源码中的 README.sunxi64

1.BL31

  BL31为Arm可信固件的编译产物,用于对uboot、 kernel进行校验和鉴权,相关原理部分可以参考一些开源教程中的描述。
  在arm-trusted-firmware源码的plat\allwinner目录中,存放了全志相关soc的可信固件校验源码,有兴趣的可以深入研究。
在这里插入图片描述

在源码目录下,使用以下命令:

export PATH=$PATH:<path_to_toolchain>/aarch64-none-linux-gnu/bin
export CROSS_COMPILE=aarch64-none-linux-gnu-
make PLAT=sun50i_h616 DEBUG=1 bl31

这里的PLAT即为plat目录下所声明的那些类型,选择与自己的板型相近的配置即可,如果没有就使用common类型。全志H618可以理解为H616的超频版,或者使用H6也没有问题。
编译完成后,生成的BL31.bin存放在源码目录的build\<plat>\debug\目录下。

2.SCP firmware (Crust)

  crust固件为全志系列SoC的电源管理,如果没有板载PMIC电源管理芯片,则用来控制系统的poweroff和reboot命令。此固件通常运行在AR100微控制器上,所以需要的交叉编译链与其他不同。
在configs目录下存放了相关板卡所需的配置文件:
在这里插入图片描述
在crust源码下,使用以下命令进行编译:

export PATH=$PATH:<path_to_toolchain>/or1k-linux-musl/bin
export CROSS_COMPILE=or1k-linux-musl-
make orangepi_3_defconfig && make -j5 scp

如果没有自己的板卡所对应的配置文件,就选择与相近的即可。例如orangepi 3和orangepi zero 3都是H6系列的芯片。编译结果存放在build\scp\scp.bin

3.uboot

由于暂时不对uboot下的相关配置文件进行修改,所以这里直接尝试编译。
使用的配置文件为configs\orangepi_zero3_defconfig,对应的设备树文件为arch\arm\dts\sun50i-h618-orangepi-zero3.dts。使用一下命令进行编译:

# 声明BL31文件路径
export BL31=<path_to_tfa>/arm-trusted-firmware/build/sun50i_h616/debug/bl31.bin
# 声明SCP文件路径
export SCP=<path_to_crust>/crust/build/scp/scp.bin
export PATH=$PATH:<path_to_toolchain>/aarch64-none-linux-gnu/binmake ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu- orangepi_zero3_defconfig
make ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu- menuconfig
make ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu- -j20

注:官方文档中有说明,如果不想使用crust的电源管理功能,可以使用export SCP=/dev/null命令进行代替。
编译结果为存放在uboot源码根目录下的u-boot-sunxi-with-spl.bin文件。

三、烧录

首先使用读卡器将TF卡接到PC设备上,并进行格式化。然后接入ubuntu设备,进行分区。
刚介入ubuntu中,应该是下面这种情况:
在这里插入图片描述
会默认存在一个分区,这应该是windows格式化出来的。使用fdisk工具进行分区:

sudo fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.31.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。命令(输入 m 获取帮助): d			//删除windows中创建的一个分区
已选择分区 1
分区 1 已删除。命令(输入 m 获取帮助): n			//创建新分区
分区类型p   主分区 (0个主分区,0个扩展分区,4空闲)e   扩展分区 (逻辑分区容器)
选择 (默认 p): 将使用默认回应 p。
分区号 (1-4, 默认  1):  						//使用默认
第一个扇区 (2048-7761886, 默认 2048): 		//使用默认
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-7761886, 默认 7761886): +200M  //第一个分区为200M大小创建了一个新分区 1,类型为“Linux”,大小为 200 MiB。命令(输入 m 获取帮助): n
分区类型p   主分区 (1个主分区,0个扩展分区,3空闲)e   扩展分区 (逻辑分区容器)
选择 (默认 p): 将使用默认回应 p。
分区号 (2-4, 默认  2): 						//使用默认
第一个扇区 (411648-7761886, 默认 411648): 	//使用默认
Last sector, +/-sectors or +/-size{K,M,G,T,P} (411648-7761886, 默认 7761886):   //直接回车创建了一个新分区 2,类型为“Linux”,大小为 3.5 GiB。命令(输入 m 获取帮助): w			//保存
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。

然后对创建的分区进行格式化:

sudo mkfs.vfat /dev/sdb1
sudo mkfs.ext4 /dev/sdb2

格式化完成后应该是以下结果:
在这里插入图片描述
之后就可以按照uboot源码中的README文档所述指令进行烧录:

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
sync

四、运行

将TF卡插入开发板,并连接串口和电源,串口提示如下:
在这里插入图片描述
从uboot和BL31的编译时间来看,应该是成功加载了,不过比较奇怪的是为什么uboot会加载两遍,而且从打印信息来看,貌似有一些功能没有正常启动,CPU的识别也有点问题,还有待继续研究。

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

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

相关文章

vscode上编辑vba

安装xvba插件更换vscode的工作目录启动扩展服务器在config.json中添加目标工作簿的名称加载excel文件&#xff08;必须带宏的xlsm&#xff09;这个扩展就会自动提取出Excel文件中的代码Export VBA&#xff08;编辑完成的VBA代码保存到 Excel文件 &#xff09;再打开excel文件可…

了解XSS和CSRF攻击与防御

什么是XSS攻击 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;是一种常见的网络安全漏洞&#xff0c;它允许攻击者在受害者的浏览器上执行恶意脚本。这种攻击通常发生在 web 应用程序中&#xff0c;攻击者通过注入恶意脚本来利用用户对网站的信任&…

centos2anolis

我的centos7原地升级到anolis7记录 注意&#xff1a;如果是桌面版请先卸载firefox&#xff0c;否则so文件冲突。 参考&#xff1a; CentOS 7和8Linux系统迁移到国产Linux龙蜥Anolis OS 8手册_disable pam_pkcs11 module in pam configuration-CSDN博客 关于 CentOS 迁移龙蜥…

QT中的服务器与客户端

一、前言 本文主要讲讲QT中服务器与客户端的使用方法&#xff0c;QT已经封装好了&#xff0c;调用相应类直接访问即可。本文以QT中的QT中的TCP为例子&#xff0c;讲下使用方法以及线程中使用。 二、正文 2.1 Sever的使用方法 2.1.1 思路 QT中Sever使用的时候大致步骤为&…

网络链路层之(2)PPP协议

网络链路层之(2)PPP协议 Author: Once Day Date: 2024年3月27日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSDN…

STM32学习笔记(6_8)- TIM定时器的编码器接口代码

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 现在开…

【搜索引擎2】实现API方式调用ElasticSearch8接口

1、理解ElasticSearch各名词含义 ElasticSearch对比Mysql Mysql数据库Elastic SearchDatabase7.X版本前有Type&#xff0c;对比数据库中的表&#xff0c;新版取消了TableIndexRowDocumentColumnmapping Elasticsearch是使用Java开发的&#xff0c;8.1版本的ES需要JDK17及以上…

【unity】解决unity编译器安装中文汉化包失败

如果有的同学中文包安装失败&#xff0c;我们找到相应的编译器版本&#xff0c;点击在资源管理器中显示按钮&#xff0c; 我们点击当前目录的上一级&#xff0c;进入编译器目录。 找到modules.json文件双击打开 我们找到简体中文&#xff0c;复制downloadUrl后面的值到浏览…

云电脑安全性怎么样?企业如何选择安全的云电脑

云电脑在保障企业数字资产安全方面&#xff0c;采取了一系列严谨而全面的措施。随着企业对于数字化转型的深入推进&#xff0c;数字资产的安全问题日益凸显&#xff0c;而云电脑作为一种新兴的办公模式&#xff0c;正是为解决这一问题而生。云电脑安全吗&#xff1f;可以放心使…

Java常见限流用法介绍和实现

目录 一、现象 ​编辑 二、工具 ​​​​​​1、AtomicInteger,AtomicLong 原子类操作 ​​​​​​2、RedisLua ​​​​​​3、Google Guava的RateLimiter 1&#xff09; 使用 2&#xff09; Demo 3&#xff09; 优化demo 4、阿里开源的Sentinel 三、算法 1、计数…

『Apisix进阶篇』动态负载均衡:APISIX的实战演练与策略应用

&#x1f680;『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 &#x1f4e3;读完这篇文章里你能收获到 &#x1f3af; 掌握APISIX中多种负载均衡策略的原理及其适用场景。&#x1f4c8; 学习如何通过APISIX的Admin API和Dashboard进行负…

python-pytorch获取FashionMNIST实际图片标签数据集

在查看pytorch官方文档的时候&#xff0c;在这里链接中https://pytorch.org/tutorials/beginner/basics/data_tutorial.html的Creating a Custom Dataset for your files章节&#xff0c;有提到要自定义数据集&#xff0c;需要用到实际的图片和标签。 在网上找了半天没找到&a…

Ceph——部署

Ceph简介 Ceph是一款开源的 SDS 分布式存储&#xff0c;它具备极高的可用性、扩展性和易用性&#xff0c;可用于存 储海量数据 Ceph的存储节点可部署在通用服务器上&#xff0c;这些服务器的 CPU 可以是 x86 架构的&#xff0c;也可以 是 ARM 架构的。 Ceph 存储节点之间相互…

政安晨:【深度学习神经网络基础】(一)—— 逐本溯源

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 与计算机一样的古老历史 神经网络的出现可追溯到20世纪40年…

ubuntu22.04系统安装Opencv4.8.0+Opencv-contrib4.8.0

一、安装下载所需工具 1.打开终端&#xff0c;输入以下命令来更新软件源&#xff1a; sudo apt-get update 2.安装wget&#xff1a; sudo apt-get install wget 3.下载opencv和opencv-contrib包&#xff1a; wget -O opencv-4.8.0.zip https://github.com/opencv/opencv/…

【漏洞复现】网络验证系统getInfo接口处存在SQL注入漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

Remote Desktop Manager for Mac:远程桌面管理软件

Remote Desktop Manager for Mac&#xff0c;是远程桌面管理的理想之选。它集成了多种远程连接技术&#xff0c;无论是SSH、RDP还是VNC&#xff0c;都能轻松应对&#xff0c;让您随时随地安全访问远程服务器和工作站。 软件下载&#xff1a;Remote Desktop Manager for Mac下载…

【性能优化】 【回溯】 【字符串】1307. 口算难题

作者推荐 视频算法专题 本文涉及知识点 数学 回溯 字符串 性能优化 LeetCode1307. 口算难题 给你一个方程&#xff0c;左边用 words 表示&#xff0c;右边用 result 表示。 你需要根据以下规则检查方程是否可解&#xff1a; 每个字符都会被解码成一位数字&#xff08;0 - …

云原生(六)、CICD - Jenkins快速入门

Jenkuns快速入门 一、CICD概述 CICD是持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;的缩写。它是软件开发中的一种流程和方法论&#xff0c;旨在通过自动化的方式频繁地将代码集成到共享存储库中&#xf…

策略路由-IP-Link-路由协议简介

策略路由 策略路由和路由策略的不同 1.策略路由的操作对象是数据包&#xff0c;在路由表已经产生的情况下&#xff0c;不按照路由表进行转发&#xff0c;而是根据需要&#xff0c;依照某种策略改变数据包的转发路径 2.路由策略的操作对象是路由信息。路由策略的主要实现了路…