从零开始为香橙派orangepi zero 3移植主线linux——2.kernel + rootfs

从零开始为香橙派orangepi zero 3移植主线linux——2.kernel + rootfs

  • 参考文章:
  • 一、linux kernel移植
  • 二、根文件系统
    • 2.1 buildroot构建
      • 1.修改toolchain下的交叉编译链
      • 2.修改系统配置
      • 3.去除内置kernel和uboot编译
      • 4.添加rootfs.tar格式的输出
    • 2.2 ubuntu-base移植
  • 三、烧录
    • 3.1 TF卡分区
    • 3.2 烧录uboot
    • 3.3 烧录kernel和rootfs
    • 3.4 运行


参考文章:

1.MQ-Quad 全志H616 主线内核编译调试记录(u-boot、kernel、buildroot)
2.荔枝派Zero(全志V3S)烧录Uboot、Kernel及rootfs到SD卡并运行在板子上
3.Rockchip RK3399 - 移植uboot 2023.04 & linux 6.3
4.Rockchip RK3399 - 移植ubuntu 20.04.4根文件系统
5.ARM64-Linux:内核裁剪过程(全志H616平台)

一、linux kernel移植

  由于arm64架构比较新,主线linux中只有一个默认的defconfig文件,所以需要自行对内核进行裁剪,这里笔者主要参考了上面的文章3和文章6,唯一不同的是笔者保留了Platform selection-->ARMv8 software model (Versatile Express)选项。尽管如此,编译出来的内核还是很大,而且还包含不少模块文件,这些模块文件需要根据文章1中所述的办法,添加到根文件系统中,否则可能会出现找不到设备的情况。
  使用以下命令加载defconfig后,按照上述方式裁剪完即可编译:

export PATH=$PATH:<path_to_toolchain>/aarch64-none-linux-gnu/bin
export CROSS_COMPILE=aarch64-none-linux-gnu-
make defconfig

编译完成后,会在arch/arm64/boot目录下生成ImageImage.gz文件,其中Image.gz文件即为旧版本kernel中的zImage,在arch/arm64/boot/dts/allwinner目录下生成sun50i-h618-orangepi-zero3.dtb,Image和设备树文件即可用来启动内核。

二、根文件系统

2.1 buildroot构建

  buildroot的配置文件已经包含了香橙派zero3的配置,保存在configs目录下的orangepi_zero3_defconfig即为相关文件,笔者就在此基础上进行修改。

make orangepi_zero3_defconfig
make menuconfig

在菜单中主要进行以下修改:

1.修改toolchain下的交叉编译链

在这里插入图片描述

2.修改系统配置

  这里主要是关系一些系统默认的配置,可以根据需求自行修改,但有两个地方需要注意。
  首先Run a getty after boot这个参数,需要修改为ttyS0,并设置好波特率。这个是用来控制linux内核控制台打印信息输出的地方,如果不修改,可能进入到内核之后串口就无法交互。
在这里插入图片描述
在这里插入图片描述
  其次是最下面和生成镜像有关的设置,这个是制作整包镜像时,将内核、uboot、rootfs一起打包成可以直接烧录的sdcard.img文件需要的,但目前只是根文件系统验证,所以可以去掉。实际测试即使不去掉,编译时只会报错,不影响结果输出。
在这里插入图片描述

3.去除内置kernel和uboot编译

将buildroot内置的kernel和uboot编译流程去除,只需要简单的rootfs以供验证。
在这里插入图片描述
在这里插入图片描述

4.添加rootfs.tar格式的输出

默认的输出格式只有rootfs.exts,使用.tar格式的更方便烧写到tf卡
在这里插入图片描述
之后就可以进行编译,编译结果存放在output\images目录下:
在这里插入图片描述

2.2 ubuntu-base移植

  这部分笔者主要参考了文章4,按照该文章中的做法基本不会有问题,这里主要记录几个遇到的错误:
1.解压压缩包时一定要保留文件的原有属性!!!
2.一定要使用root权限操作!!!
3.如果在更新软件包时遇到报错Certificate verification failed: The certificate is NOT trusted.通常是因为在source.list中使用的是https://开头的地址,将其修改成http://即可,如果担心这种方式不安全,可以修改成http://之后,使用sudo apt install ca-certificates安装证书,然后修改回去即可。
4.如果安装软件包时提示各种软件包都找不到,通常是因为DNS解析设置有问题,对照参考文章仔细修改即可。

三、烧录

3.1 TF卡分区

  将这些文件烧录到TF卡时,可以借助ubuntu主机下的gparted工具,使用sudo apt install gparted命令安装gparted工具,然后清除TF卡中的所有分区和数据。
  由于uboot文件一般较小,通常为几百K,所以正常留出1M左右大小即可,如果不放心可以稍微留大一些到10M左右,Image+dtb文件可以留出30 ~ 50M左右,剩下就全部作为根文件系统。
如果想将uboot空间改大,只用将第一分区之前的可用空间改大即可。
在这里插入图片描述
在这里插入图片描述

3.2 烧录uboot

按照上述方法分区后,通常会存在/dev/sdX、/dev/sdX1、/dev/sdX2三个设备,将uboot使用dd命令写入/dev/sdX设备即可:

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

注:如果烧写完uboot另外的两个分区丢失,一般是因为TF卡不太好,可以尝试更换

3.3 烧录kernel和rootfs

Image文件和dtb设备树文件可以直接用ubuntu的图形化界面拷贝到刚才创建的分区1中,rootfs如果是.tar格式的,则解压到对应的分区2中,如果是未打包的ubuntu文件系统,直接全部拷贝过去即可。
注:拷贝过去之后一定要使用sync命令进行同步
如果使用命令行,则需要使用mount命令将/dev/sdX1和/dev/sdX2挂载到系统的某一路径下,再进行上述操作。

3.4 运行

在uboot中添加以下指令:

setenv bootcmd 'fatload mmc 0:1 0x40200000 Image;fatload mmc 0:1 0x4fa00000 sun50i-h618-orangepi-zero3.dtb;booti 0x40200000 - 0x4fa00000'
setenv bootargs 'console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw  init=/sbin/init debug panic=30'
saveenv

即可自动启动到系统中,如果使用buildroot文件系统,则修改init=/linuxrc
在这里插入图片描述

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

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

相关文章

Linux gcc day4 权限

首先来看比如ls、pwd等究竟是什么呢&#xff1f; 那ls是如何在shell中执行起来的呢&#xff1f;shell命令又是什么呢&#xff1f; shell命令&#xff1a;命令行解释器&#xff1a;表现&#xff1a;你看到的命令行提示符&#xff0c;以及可以输入指令并且可以执行&#xff08;是…

贪心算法简介

目录 一、什么是贪心算法&#xff1f; 二、贪心算法的特点 三、贪心算法解决找零问题、最短路径问题、背包问题 1.找零问题 2.最短路径问题 3.背包问题 一、什么是贪心算法&#xff1f; 贪心算法就是希望通过局部最优来解决全局最优 基本步骤&#xff1a;1.将问题分为若…

【I/O】Unix IO 介绍

IO 模型&#xff08;一&#xff09; Unix IO 一个输入操作共包含两个阶段&#xff1a; 等待数据准备好从内核将数据复制到进程 对于一个套接字上的输入操作&#xff0c;通常第一步是等待数据从网络中到达&#xff0c;当数据到达时&#xff0c;先将数据复制到内核缓冲区中&a…

【UE 委托】如何利用函数指针理解委托的基本原理

目录 0 引言1 函数指针模拟多播委托 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xff1a;【UE 委托】如何利用函数指针理解委托的基本原理❣️ 寄语&#xff1a;书到用时方恨少&#xff0c;事非经过不知难…

js base64 img 转 file

打印canvas图像的dataurl const imgDataUrl canvas.toDataURL();console.log(imgDataUrl)上传的图像编码 1,把base64编码转为文件对象第一个参数dataUrl是一个base64的字符串。第二个参数是文件名可以随意命名funtion base64toFile(dataurl, filename file) {let arr datau…

Git 安装和配置

下载 Git 网址: https://git-scm.com/download 安装 Git 双击安装包, 开始安装. 修改安装路径, 选择非中文无空格路径: 开始安装: 安装成功: 配置 Git 安装完成后, 在任意文件夹内, 右键, 可以显示两个 Git 选项, 就说明安装成功了.

汇舟问卷:海外问卷调查适合哪些人群去参与?

大家好&#xff0c;我是汇舟问卷。关于海外问卷调查这个项目最近一直备受关注&#xff0c;那么这个项目究竟有哪些人群适合参与进来呢&#xff1f;我们一起来看看。 第一&#xff0c;海外问卷调查适合一些没有找到工作或者拥有充足业余时间的人。只要您拥有一台电脑和网络连接…

IDEA 解决 java: 找不到符号 符号: 类 __ (使用了lombok的注解)

原因IDEA版本太高&#xff0c;在 ProcessingEnvironement 预编译的时候是以代理的方式来执行的&#xff0c;不再是直接 javac方式, lombok依赖的 javac方式的 annotation processors 不再生效了 解决办法&#xff1a;下面这一句&#xff0c;加在下图中 -Djps.track.ap.depen…

关于帆软报表取OA选择框-下拉列表值的解决方案

问题&#xff1a;制度一览表每次在OA端增加或修改制度类别后&#xff0c;都要在帆软报表修改后才能正确显示。 原因分析&#xff1a;以前大家没有找到OA下拉列表的维护表&#xff0c;采用的是在帆软端通过内置数据集来解决&#xff0c;需要人工维护。 解决方案&#xff1a; …

Linux函数学习 epoll

1、Linux epoll函数 1.1、创建epoll实例 int epoll_create1(int flag); 返回值&#xff1a;-1 失败&#xff0c;非负数 成功 flag &#xff1a;默认传入0 1.2、管理epoll对象 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); epfd &#xff1a;e…

rebase和merge的区别

合并分支用rebase还是merge&#xff1f; 实际开发工作的时候&#xff0c;我们都是在自己的分支开发&#xff0c;然后将自己的分合并到主分支&#xff0c;那合并分支用2种操作&#xff0c;这2种操作有什么区别呢&#xff1f; git上新建一个项目&#xff0c;默认是有master分支…

蓝桥杯物联网竞赛_STM32L071KBU6_我的全部省赛及历年模拟赛源码

我写的省赛及历年模拟赛代码 链接&#xff1a;https://pan.baidu.com/s/1A0N_VUl2YfrTX96g3E8TfQ?pwd9k6o 提取码&#xff1a;9k6o

YOLOv8模型剪枝实战:DepGraph(依赖图)方法

课程链接&#xff1a;YOLOv8模型剪枝实战&#xff1a;DepGraph(依赖图)方法_在线视频教程-CSDN程序员研修院 YOLOv8是一个当前非常流行的目标检测器&#xff0c;本课程使用DepGraph&#xff08;依赖图&#xff09;剪枝方法对YOLOv8进行网络剪枝&#xff0c;使其更加轻量和实用…

Android源码笔记-输入事件(二)

这一节主要了解输入事件的获取&#xff0c;InputReaderThread继承自C的Thread类&#xff0c;Thread类封装了pthread线程工具&#xff0c;提供了与Java层Thread类相似的API。C的Thread类提供了一个名为threadLoop()的纯虚函数&#xff0c;当线程开始运行后&#xff0c;将会在内建…

Tubi 十岁啦!

Tubi 今年十岁了&#xff0c;这十年不可思议&#xff0c;充满奇迹&#xff01; 从硅谷一个名不见经传的创业小作坊&#xff0c;转变成为四分之一美国电视家庭提供免费流媒体服务的北美领先的平台&#xff1b; 从费尽心力终于签下第一笔内容合作协议&#xff0c;到现在与 450 …

3岁以下幼儿玩具电脑电子方案

幼儿玩具电脑是一种专为儿童设计的电子教育产品&#xff0c;它通过提供多样化的学习内容和互动方式&#xff0c;旨在促进孩子的早期教育和发展。具体作用如下&#xff1a; 培养学习兴趣&#xff1a;早教机通常设计有丰富的教育资源和有趣的互动游戏&#xff0c;能够激发孩子对…

Mongodb快速入门

一、概述 1.1介绍 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展高性能数据存储解决方案。(并不是单纯的内存数据库)&#xff0c;官方地址 https://www.mongodb.com/ 操作语法与 JavaScript 类似&#xff0c;容易上手&#xff0c;学习成本低…

linux离线安装redis

一、下载linux版本压缩包 地址&#xff1a;Download | Redis 为了安全稳定性&#xff0c;下载 6.2 版本&#xff0c;不下载最新版 二、上传到linux服务器 笔者上传到 /opt/redis下 &#xff0c;使用Xftp和Xshell工具&#xff0c;使用root权限 cd /opt sudo mkdir redis cd r…

【Qt踩坑】ARM 编译Qt5.14.2源码-QtWebEngine

1.下载源码 下载网站&#xff1a;Index of /new_archive/qt/5.14/5.14.2/single 2.QWebEngine相关依赖 sudo apt-get install flex libicu-dev libxslt-dev sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev sudo apt-get …

【刷题篇】回溯算法(二)

文章目录 1、求根节点到叶节点数字之和2、二叉树剪枝3、验证二叉搜索树4、二叉搜索树中第K小的元素5、二叉树的所有路径 1、求根节点到叶节点数字之和 给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表…