网站建设管理规范,8小8x人成免费完整板,深圳网站建设招标,微信小程序开发接口从零开始为香橙派orangepi zero 3移植主线linux——1.uboot 0.前言一、准备二、制作引导文件1.BL312.SCP firmware (Crust)3.uboot 三、烧录四、运行 0.前言 之前买了块香橙派zero3#xff0c;CPU是全志H618#xff0c;四核cortex-A53#xff0c;烧录了官方的ubuntu系统后就… 从零开始为香橙派orangepi zero 3移植主线linux——1.uboot 0.前言一、准备二、制作引导文件1.BL312.SCP firmware (Crust)3.uboot 三、烧录四、运行 0.前言 之前买了块香橙派zero3CPU是全志H618四核cortex-A53烧录了官方的ubuntu系统后就一直没有再玩过。最近一些其他的学习告一段落就把这块板子拿出来倒腾倒腾尝试移植主线linux最好是能够在linux中把GPU也驱动起来。 注在本篇及之后的几篇移植文章中暂时不对主线中的配置文件和设备树进行修改先尝试跑起来再说。
一、准备
需要准备的设备如下 PCwindows 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-Aarm可信固件 下载地址https://github.com/ARM-software/arm-trusted-firmwarecrust全志电源管理固件 下载地址https://github.com/crust-firmware/crustuboot 下载地址https://github.com/u-boot/u-bootlinux kernel 下载地址https://github.com/torvalds/linuxbuildroot 下载地址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_COMPILEaarch64-none-linux-gnu-
make PLATsun50i_h616 DEBUG1 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_COMPILEor1k-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 BL31path_to_tfa/arm-trusted-firmware/build/sun50i_h616/debug/bl31.bin
# 声明SCP文件路径
export SCPpath_to_crust/crust/build/scp/scp.bin
export PATH$PATH:path_to_toolchain/aarch64-none-linux-gnu/binmake ARCHarm CROSS_COMPILEaarch64-none-linux-gnu- orangepi_zero3_defconfig
make ARCHarm CROSS_COMPILEaarch64-none-linux-gnu- menuconfig
make ARCHarm CROSS_COMPILEaarch64-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 ifu-boot-sunxi-with-spl.bin of/dev/sdb bs1024 seek8
sync四、运行
将TF卡插入开发板并连接串口和电源串口提示如下 从uboot和BL31的编译时间来看应该是成功加载了不过比较奇怪的是为什么uboot会加载两遍而且从打印信息来看貌似有一些功能没有正常启动CPU的识别也有点问题还有待继续研究。