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-arm64Tips: 如何查询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七层模型? 我们需要了解互联网的本质…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
Linux系统:进程间通信-匿名与命名管道
本节重点 匿名管道的概念与原理匿名管道的创建命名管道的概念与原理命名管道的创建两者的差异与联系命名管道实现EchoServer 一、管道 管道(Pipe)是一种进程间通信(IPC, Inter-Process Communication)机制,用于在不…...
视觉slam--框架
视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图? 建图并没有一个固定的形式和算法…...
GitHub 常见高频问题与解决方案(实用手册)
1.Push 提示权限错误(Permission denied) 问题: Bash Permission denied (publickey) fatal: Could not read from remote repository. 原因: 没有配置 SSH key 或使用了 HTTPS 而没有权限…...
