从零开始为香橙派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/bin

make 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的识别也有点问题,还有待继续研究。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nodejs中使用WebScoket的简单示例

前言 WebScoket可以用来实现即时通信,一般用于通信聊天工具或者是需要实时接受数据等功能 在浏览器环境中,WebScoket是一个构造函数,需要new创建连接的实例; 在nodejs环境中,则需要使用ws模块来完成服务的创建。 示例 下面是可以直接使用的代码,不需要修改 node创建服务端…

Avalonia笔记4-Rider如何添加xaml支持

在Linux Rider中&#xff0c;File Type中是有XAML文件的&#xff0c;但是新增xaml文件并不能正确的添加到项目中&#xff0c;而且就算是新增文件&#xff0c;直接命名为“XXX.xaml”&#xff0c;也是没有智能提示的。 在引用Style文件的时候&#xff0c;需要新建一个axaml的文…

STM32H743驱动SSD1309(2)

接前一篇文章&#xff1a;STM32H743驱动SSD1309&#xff08;1&#xff09; 二、芯片详解 1. 概览 上一回已提到&#xff0c;SSD1309是一个单片CMOS OLED/PLED驱动芯片可以驱动有机/聚合发光二极管点阵图形显示系统。由128个segments和64个commons组成。该芯片专为共阴极OLED…

机器学习——聚类算法-KMeans聚类

机器学习——聚类算法-KMeans聚类 在机器学习中&#xff0c;聚类是一种无监督学习方法&#xff0c;用于将数据集中的样本划分为若干个簇&#xff0c;使得同一簇内的样本相似度高&#xff0c;不同簇之间的样本相似度低。KMeans聚类是一种常用的聚类算法之一&#xff0c;本文将介…

【设计经验】0Ω电阻在电路中有什么作用

电路设计与调试过程中,我们很多时候要用到0Ω电阻(如下图),那么0Ω电阻到底在这过程中充当了什么样的角色呢? 0R电阻在电路中有什么作用? #创作灵感#:脑海存留的如下几点疑惑需要解开。 1、电路初次设计使用串接电阻为什么是0R电阻; 2、单板调试时为什么有时候会用到0R…

VMware Live Recovery 9.0 发布 - 多云实时恢复

VMware Live Recovery 9.0 - 多云实时恢复 VMware Live Cyber Recovery VMware Live Site Recovery 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-live-recovery/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.or…

Unity学习笔记 9.2D射线

下载源码 UnityPackage 1.Ray2D 让小球向右发射射线&#xff1a; Ray2D ray;void Start() {// Ray2D(起点&#xff0c;终点)ray new Ray2D(this.transform.position, Vector2.right);// Debug.DrawLine(起点&#xff0c;终点&#xff0c;颜色&#xff0c;显示时间)Debug.DrawL…

[实战]Springboot与GB28181摄像头对接。摄像头注册上线(一)

与支持国标摄像头对接 前言&#xff1a;不想看教程&#xff1f;1、准备阶段1.1、我们会学到什么&#xff1f;1.2、创建项目1.3、pom中用到的依赖1.4 打开摄像头的网址(了解配置方式) 2、代码编写2.1、增加项目配置2.2、在config目录下创建SipConfig2.3、在service目录下创建Sip…

如何在Windows 10中打开屏幕键盘?这里有详细步骤

本文解释了在Windows 10中打开或关闭屏幕键盘的不同方法,还解释了如何将屏幕键盘固定到开始菜单。 使用屏幕键盘的快捷键 如果你喜欢快捷方式,你会喜欢这个:按物理键盘上的Win+CTRL+O。这将立即显示屏幕键盘,而无需通过轻松使用。 ​提示:使用运行窗口也可以打开键盘。…

Tuxera for Mac2024软件产品密钥及下载安装教程

Tuxera for Mac在安全性和稳定性方面表现出色&#xff0c;为用户提供了可靠的数据保障和无忧的使用体验。 首先&#xff0c;从安全性角度来看&#xff0c;Tuxera for Mac采用了先进的技术来保护用户的数据。它支持快速全面的数据保护&#xff0c;通过智能缓存技术确保文件传输…

《手把手教你》系列技巧篇(五十七)-java+ selenium自动化测试-下载文件-下篇(详细教程)

1.简介 前边几篇文章讲解完如何上传文件&#xff0c;既然有上传&#xff0c;那么就可能会有下载文件。因此宏哥就接着讲解和分享一下&#xff1a;自动化测试下载文件。可能有的小伙伴或者童鞋们会觉得这不是很简单吗&#xff0c;还用你介绍和讲解啊&#xff0c;不说就是访问到…

图神经网络实战(6)——使用PyTorch构建图神经网络

图神经网络实战&#xff08;6&#xff09;——使用PyTorch构建图神经网络 0. 前言1. 传统机器学习与人工智能2. 人工神经网络基础2.1 人工神经网络组成2.2 神经网络的训练 3. 图神经网络4. 使用香草神经网络执行节点分类4.1 数据集构建4.2 模型构建4.3 模型训练 5. 实现香草图神…

聚观早报 | 比亚迪2023年营收;vivo X Fold3系列发布

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 3月28日消息 比亚迪2023年营收 vivo X Fold3系列发布 现代汽车拟投入68万亿韩元 华为P70系列最新渲染图 苹果A1…

Art Gallery Vol.2

Art Gallery Vol.2为您的游戏、VR项目和模拟器提供了一个很好的解决方案,图片库。 一个充满雕塑和框架的现代艺术画廊。它包括11件雕塑、14幅画作。适合收藏展览或画作展示。 所有画作都是独立的纹理,非常适合ArchViz、VR或任何类型的AAA游戏。 下载:​​Unity资源商店链接…

[linux] AttributeError: module ‘transformer_engine‘ has no attribute ‘pytorch‘

[BUG] AttributeError: module transformer_engine has no attribute pytorch Issue #696 NVIDIA/Megatron-LM GitHub 其中这个答案并没有解决我的问题&#xff1a; import flash_attn_2_cuda as flash_attn_cuda Traceback (most recent call last): File "<stdi…

国产数据库中统计信息自动更新机制

数据库中统计信息描述的数据库中表和索引的大小数以及数据分布状况&#xff0c;统计信息的准确性对优化器选择执行计划时具有重要的参考意义。本文简要整理了下传统数据库和国产数据库中统计信息的自动更新机制&#xff0c;以加深了解。 1、数据库统计信息介绍 优化器是数据库…

【系统架构师】-第13章-层次式架构设计

层次式体系结构设计是将系统组成一个层次结构&#xff0c;每一层 为上层服务 &#xff0c;并作为下层客户。 在一些层次系统中&#xff0c;除了一些精心挑选的输出函数外&#xff0c; 内部的层接口只对相邻的层可见 。 连接件通过决定层间如何交互的协议来定义&#xff0c;拓扑…

优化体验课转化流程:提升转化率,实现教育品牌增长

随着在线教育市场的竞争日益激烈&#xff0c;体验课转化流程成为影响教育机构发展的关键环节之一。本文将深入探讨如何优化体验课转化流程&#xff0c;提升转化率&#xff0c;实现教育品牌的可持续增长。 ### 什么是体验课转化流程&#xff1f; 体验课转化流程是指教育机构通…

windows安全中心设置@WindowsDefender@windows安全中心常用开关

文章目录 abstractwindows defender相关服务&#x1f47a; 停用windows Defender临时关闭实时防护使用软件工具关闭defender control(慎用)dismdControl 其他方法使其他杀毒软件注册表修改 保护历史恢复被认为是有病毒的文件添加信任目录,文件,文件类型或进程 abstract window…

Stable Diffusion XL之使用Stable Diffusion XL训练自己的AI绘画模型

文章目录 一 SDXL训练基本步骤二 从0到1上手使用Stable Diffusion XL训练自己的AI绘画模型2.1 配置训练环境与训练文件2.2 SDXL训练数据集制作(1) 数据筛选与清洗(2) 使用BLIP自动标注caption(3) 使用Waifu Diffusion 1.4自动标注tag(4) 补充标注特殊tag(5) 训练数据预处理(标注…