当前位置: 首页 > news >正文

S5P6818_系统篇(2)源码编译及烧录

源码获取

源码获取和操作流程

1.下载liunux下的系统制作脚本,可以烧录系统和构建镜像

git clone https://github.com/friendlyarm/sd-fuse_s5p6818.git

如果出现git错误可使用如下方法:

git config --global http.sslverify false

2.阅读该工具readme

sd-fuse_s5p6818

简介

sd-fuse 提供一些工具和脚本, 用于制作SD卡固件, 具体用途如下:

  • 制作分区镜像文件, 例如将rootfs目录打包成rootfs.img
  • 将多个分区镜像文件打包成可直接写SD卡的单一镜像文件
  • 简化内核和uboot的编译, 一键编译内核、第三方驱动, 并更新rootfs.img中的内核模块

其他语言版本: English

运行环境

  • 在电脑主机端使用
  • 推荐的操作系统: Ubuntu 18.04及以上64位操作系统
  • 推荐运行此脚本初始化开发环境: https://github.com/friendlyarm/build-env-on-ubuntu-bionic

支持的内核版本

sd-fuse 使用不同的git分支来支持不同的内核版本, 当前支持的内核版本为:

  • 4.4.y

其他内核版本, 请切换到相应的git分支

支持的目标板OS

  • lubuntu
  • friendlycore
  • friendlycore-arm64
  • friendlycore-lite-focal
  • friendlycore-lite-focal-arm64
  • android
  • android7
  • friendlywrt

这些OS名称是分区镜像文件存放的目录名, 在脚本内亦有严格定义, 所以不能改动, 例如要制作friendlycore-arm64的SD固件, 可使用如下命令:

./mk-sd-image.sh friendlycore-arm64

获得打包固件所需要的素材

制作固件所需要的素材有:

  • 内核源代码: 在网盘的 “07_源代码” 目录中, 或者从此github链接下载, 分支为nanopi2-v4.4.y
  • uboot源代码: 在网盘的 “07_源代码” 目录中, 或者从此github链接下载, 分支为nanopi2-v2016.01
  • 分区镜像文件: 在网盘的 “03_分区镜像文件” 目录中, 或者从此http链接下载
  • 文件系统压缩包: 在网盘的 “06_文件系统” 目录中, 或者从此http链接下载

如果没有提前准备好文件, 脚本亦会使用wget命令从http server去下载, 不过因为http服务器带宽不足的关系, 速度可能会比较慢。

脚本功能

  • fusing.sh: 将镜像烧写至SD卡
  • mk-sd-image.sh: 制作SD卡镜像
  • mk-emmc-image.sh: 制作eMMC卡刷固件(SD-to-eMMC)
  • build-boot-img.sh: 将指定目录打包成boot镜像(boot.img)
  • build-rootfs-img.sh: 将指定目录打包成文件系统镜像(rootfs.img)
  • build-kernel.sh: 编译内核,或内核头文件
  • build-uboot.sh: 编译uboot

如何使用

重新打包SD卡运行固件

注: 这里以friendlycore-arm64系统为例进行说明
下载本仓库到本地, 然后下载并解压friendlycore-arm64系统的分区镜像文件压缩包, 由于http服务器带宽的关系, wget命令可能会比较慢, 推荐从网盘上下载同名的文件:

git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master sd-fuse_s5p6818
cd sd-fuse_s5p6818
wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz
tar xvzf friendlycore-arm64-images.tgz

解压后, 会得到一个名为friendlycore-arm64的目录, 可以根据项目需要, 对目录里的文件进行修改, 例如把rootfs.img替换成自已修改过的文件系统镜像, 或者自已编译的内核和uboot等, 准备就绪后, 输入如下命令将系统映像写入到SD卡 (其中/dev/sdX是你的SD卡设备名):

sudo ./fusing.sh /dev/sdX friendlycore-arm64

或者, 打包成可用于SD卡烧写的单一镜像文件:

./mk-sd-image.sh friendlycore-arm64

命令执行成功后, 将生成以下文件, 此文件可烧写到SD卡运行:

out/s5p6818-sd-friendly-core-xenial-4.4-arm64-YYYYMMDD.img

重新打包 SD-to-eMMC 卡刷固件

注: 这里以friendlycore-arm64系统为例进行说明
下载本仓库到本地, 然后下载并解压分区镜像文件压缩包, 这里需要下载friendlycore-arm64和eflasher系统的文件:

git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master sd-fuse_s5p6818
cd sd-fuse_s5p6818
wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz
tar xvzf friendlycore-arm64-images.tgz
wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/emmc-flasher-images.tgz
tar xvzf emmc-flasher-images.tgz

再使用以下命令, 打包卡刷固件, autostart=yes参数表示使用此固件开机时,会自动进入烧写流程:

./mk-emmc-image.sh friendlycore-arm64 autostart=yes

命令执行成功后, 将生成以下文件, 此文件可烧写到SD卡运行:

out/s5p6818-eflasher-friendly-core-xenial-4.4-arm64-YYYYMMDD.img

定制文件系统

注: 这里以friendlycore-arm64系统为例进行说明
下载本仓库到本地, 然后下载并解压分区镜像压缩包:

git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master sd-fuse_s5p6818
cd sd-fuse_s5p6818
wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz
tar xvzf friendlycore-arm64-images.tgz

下载文件系统压缩包并解压, 需要使用root权限, 因此解压命令需要加上sudo:

wget http://112.124.9.243/dvdfiles/s5p6818/rootfs/rootfs-friendlycore.tgz
sudo tar xzf rootfs-friendlycore.tgz

可以根据需要, 对文件系统目录进行更改, 例如:

sudo sh -c 'echo hello > friendlycore-arm64/rootfs/root/welcome.txt'

用以下命令将文件系统目录打包成 rootfs.img:

sudo ./build-rootfs-img.sh friendlycore-arm64/rootfs friendlycore-arm64

最后打包成SD卡镜像文件:

./mk-sd-image.sh friendlycore-arm64

或生成SD-to-eMMC卡刷固件:

./mk-emmc-image.sh friendlycore-arm64

文件系统Tips:

  • 可利用debootstrap工具对文件系统进行定制, 预装软件包等

编译内核

注: 这里以friendlycore-arm64系统为例进行说明
下载本仓库到本地, 然后下载并解压分区镜像压缩包:

git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master sd-fuse_s5p6818
cd sd-fuse_s5p6818
wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz
tar xvzf friendlycore-arm64-images.tgz

从github克隆内核源代码到本地, 用环境变量KERNEL_SRC来指定本地源代码目录:

export KERNEL_SRC=$PWD/kernel
git clone https://github.com/friendlyarm/linux -b nanopi2-v4.4.y --depth 1 ${KERNEL_SRC}

根据需要配置内核:

cd $KERNEL_SRC
touch .scmversion
make ARCH=arm nanopi3_linux_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig     # 根据需要改动配置
make ARCH=arm CROSS_COMPILE=arm-linux- savedefconfig
cp defconfig ./arch/arm/configs/my_defconfig                  # 保存配置 my_defconfig
git add ./arch/arm/configs/my_defconfig
cd -

使用KCFG环境变量指定内核的配置 (KERNEL_SRC指定源代码目录), 使用你的配置编译内核:

export KERNEL_SRC=$PWD/kernel
export KCFG=my_defconfig
./build-kernel.sh friendlycore-arm64

编译 u-boot

注: 这里以friendlycore-arm64系统为例进行说明
下载本仓库到本地, 然后下载并解压分区镜像压缩包:

git clone https://github.com/friendlyarm/sd-fuse_s5p6818 -b master sd-fuse_s5p6818
cd sd-fuse_s5p6818
wget http://112.124.9.243/dvdfiles/s5p6818/images-for-eflasher/friendlycore-arm64-images.tgz
tar xvzf friendlycore-arm64-images.tgz

从github克隆与OS版本相匹配的u-boot源代码到本地, 环境变量UBOOT_SRC用于指定本地源代码目录:

export UBOOT_SRC=$PWD/uboot
git clone https://github.com/friendlyarm/u-boot -b nanopi2-v2016.01 --depth 1 ${UBOOT_SRC}
./build-uboot.sh friendlycore-arm64

Tips: 如何查询SD卡的设备文件名

在未插入SD卡的情况下输入:

ls -1 /dev > ~/before.txt

插入SD卡,输入以下命令查询:

ls -1 /dev > ~/after.txt
diff ~/before.txt ~/after.txt

安装交叉编译器

安装库:

apt install liblz4-tool android-tools-fsutils

下载交叉编译器:

git clone https://github.com/friendlyarm/prebuilts.git -b master --depth 1

在/opt目录下存放编译器:

sudo mkdir -p /opt/FriendlyARM/toolchain

将交叉编译器解压到/opt目录下:

Sudo tar xf prebuilts/gcc-x64/aarch64-cortexa53-linux-gnu-6.4.tar.xz -C /opt/FriendlyARM/toolchain/

编译

编译准备

编译前需要安装如下软件包:

#解决menuconfig报错问题
sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
#解决编译设备树报错问题
sudo apt-get install device-tree-compiler
#解决内核报错openssl头文件找不到
sudo apt-get install libssl-dev

编译uboot

#参数根据自己要编译的系统而定,build-uboot脚本可能存在一些问题,比如指定的uboot源码路径在out目录下,根据情况自行修改。
./build-uboot.sh friendlycore-arm64

如图,编译完成后生成u-boot.bin,脚本使用该文件生成了fip-nonsecure.img,然后将该镜像更新到系统镜像目录用于烧录。

编译kernel

#系统类型根据情况自行修改
./build-kernel.sh friendlycore-arm64

内核编译完成生成boot.img,同时还会打包内核模块,重新生成文件系统,并且修改分区表,使用脚本编译使内核编译工作变得简单。

烧录

烧录命令:

sudo ./fusing.sh /dev/sdX friendlycore-arm64

指定烧录的SD卡设备名,后面跟系统名,即可一键烧录系统

本系列文章硬件使用友善 nanopi fire3

相关文章:

S5P6818_系统篇(2)源码编译及烧录

源码获取 源码获取和操作流程 1.下载liunux下的系统制作脚本,可以烧录系统和构建镜像 git clone https://github.com/friendlyarm/sd-fuse_s5p6818.git 如果出现git错误可使用如下方法: git config --global http.sslverify false 2.阅读该工具rea…...

LDPC码的编译码原理简述

关于fpga调用ldpc IP core的相关参数问题可以看我的另一篇文章 LDPC码由Gallager在1962年提出,全称为 Low Density Parity-check Codes 低密度奇偶校验码 它的译码性能可以逼近Shannon信道容量限,广富盛名的Turbo码也被证明是LDPC码的一个特例。并且LDPC…...

网络安全——数链路层据安全协议

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.数据链路层安全协议简介 1.数据链路安全性 二.局域网数据链路层协议 1.…...

spring的启动过程(一) :IOC容器的启动过程

一、web容器的加载 首先我们要先知道一个web项目的启动过程。 将Web项目部署到Tomcat中的方法之一,是部署没有封装到WAR文件中的Web项目。要使用这一方法部署未打包的webapp目录,只要把我们的项目(编译好的发布项目,非开发项目&am…...

这次,我的CentOS又ping不通www.baidu.com了(gateway配置)

当我们保证了宿主机与虚拟机的ip地址在同一网段,并且我们使用虚拟机ping宿主机,与宿主机ping虚拟机都可以互相ping通的情况下虚拟机却ping不通外网了,由于涉及到了跨越网络访问,所以我们应该把问题聚焦在网关的配置上!…...

启智社区“我为开源狂”第六期活动小白教程之基础活跃榜

一、写在前面 春天来啦~启智社区第六期活动也来啦! 有奖金的哦~~ 基础活跃榜奖金根据用户活跃程度进行100-300元的激励。 挑战升级榜需要用户完成相应任务,达标者可获得300-1000元的激励。 邀请助力榜根据用户邀请情况进行积分累加,按实际达…...

华为OD机试 - 区块链文件转储系统(Python)【2023-Q1 新题】

华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 区块链文件转储系…...

【字节面试】Fail-fast知识点相关知识点

字节面试,问到的一个小知识点,这里做一下总结,其实小编之前有一篇文章,已经对此有过涉及,不过这里知识专项针对于问题,把这个知识点拎出来说一下。 1.问题 什么是Fail-fast机制? Hashmap是否拥…...

git应用笔记(三)

在新增虚拟机linux的基础上,做git的下载与提交 1、初始化自己的用户名和邮箱。 git config --global user.name “输入你的用户名” git config --global user.email “输入你的邮箱” 2、将本地公钥及配置如图1复制粘贴到虚拟机当前用户.ssh\目录下 4929a0205f43…...

有序表的应用:设计一个增、删、查数据的时间复杂度均为O(logN)的结构

1、题目描述 设计一个结构包含如下三个方法: void add(int index, int num); //把num加入到index位置 int get(int index); //取出index位置的值(是自然序的index位置,非排序后) void remove(int index); //把index位置上的值删…...

离线环境拷贝迁移 conda envs 环境(蛮力方法,3行命令)

前言 最近要使用 GPU 服务器做实验,可惜的是,有网络连接的服务器显卡旧,算力不够;显卡较新的机器没有联网。于是有需求将旧机器上配置好的 conda 环境迁移至新机器。网上给的默认方法生成 yaml 文件迁移等 需要联网,只…...

【数据结构与算法】字符串1:反转字符串I 反转字符串II 反转字符串里的单词 剑指offer(替换空格、左旋转字符串)

今日任务 344.反转字符串541.反转字符串II剑指Offer 05.替换空格151.反转字符串里的单词剑指Offer58-II.左旋转字符串 1.Leetcode344.反转字符串 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/reverse-string &#…...

深入浅出C++ ——容器适配器

文章目录一、容器适配器二、deque类简介1. deque的原理2. deque迭代器3. deque的优点和缺陷4. 为什么选择deque作为stack和queue的底层默认容器一、容器适配器 适配器的概念 适配器是STL六大核心组件之一,它是一种设计模式,该种模式是将一个类的接口转换…...

电脑常用知识与工作常用工具

什么是电脑快捷键? 所谓快捷键就是使用键盘上某一个或某几个键的组合完成一条功能命令,从而达到提高操作速度的目的。 键盘布局 主键盘区,数字辅助键盘区、F键功能键盘区、控制键区,对于多功能键盘还增添了快捷键区 一、常用快捷…...

JS的事件循环

文章目录写在前面1.浏览器的进程模型1.1 何为进程1.2 何为线程1.3 浏览器有哪些线程和进程2.渲染主线程是如何工作的任务队列的优先级面试题如何理解JS异步JS中的计时器能做到精确计时吗?为什么?写在前面 此处的文字为自己的理解 1.浏览器的进程模型 1.…...

【阿旭机器学习实战】【31】股票价格预测案例--线性回归

【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流。 注:本文模型结果不好,仅做学习参考使用,提供思路。了解数据处理思路,训练模型和预测数值的过程。 目录1. 读取数据K线图绘…...

浅谈毫米波技术与应用

浅谈毫米波之技术篇2020年10月GSMA发布的《5G毫米波技术白皮书》预计,在2022年北京冬奥会上,5G毫米波有望大放异彩,为观众、媒体转播者、赛事组织和参与者等提供优质的观赛体验、完备的服务保障,将可提供全景VR、新型信息交互、智…...

给安全平台编写插件模块的思路分享

一、背景 最近在GitHub看到一个新的开源安全工具,可以把工具都集成到一个平台里,觉得挺有意思,但是平台现有的工具不是太全,我想把自己的工具也集成进去,所以研究了一番 蜻蜓安全工作台是一个安全工具集成平台&#x…...

4123版驱动最新支持《霍格沃茨之遗》,英特尔锐炫显卡带你畅游魔法世界

2023年开年最火的3A大作,那一定是近期上架steam平台的《霍格沃茨之遗》,这款游戏在2020年9月份曝光,游戏根据《哈利波特》系列书籍内容改编,作为一款开放式的3A大作,《霍格沃兹之遗》目前在steam上的实时在线人数已经突…...

OSI模型和网络协议简介

文章目录一、OSI七层模型1.1什么是OSI七层模型?1.2这个网络模型究竟是干什么呢?二、TCP/IP协议三、常见协议四、物联网通信协议以及MQTT4.1 物联网七大通信协议4.2 MQTT特性一、OSI七层模型 1.1什么是OSI七层模型? 我们需要了解互联网的本质…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

深度学习习题2

1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...