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

news/2024/3/29 16:26:06/文章来源:https://blog.csdn.net/weixin_41252596/article/details/129165437

源码获取

源码获取和操作流程

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

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

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

相关文章

软件测试5年,一路走来的艰辛路程

前言 不论你是什么时候开始接触测试这个行业的,你首先听说的应该是功能测试。通过一些测试手段来验证开发做出的代码是否符合产品的需求?当然你也有自己对功能测试的理解,但是最近两年感觉功能测试好像不太受欢迎,同时不少同学真的…

Linux 基础知识之文件系统

目录一、文件系统1.文件种类2.Linux和Windows文件后缀的不同3.查看文件类型3.绝对路径与相对路径二、系统分区三、目录结构一、文件系统 1.文件种类 Linux中一切皆文件。目光所及,皆是文件。文件的种类共有七种,每种文件都有自己的独特标识:…

SCADA-1-组态前期需求调研篇

近期有朋友找到我,说scada组态系统开源的很少,不少开发者借此售卖这种软件,我回了句:这有什么难的,不就是拖拖拽拽,再绑定上数据源,实现动态效果嘛。。。(先装了个X)一、…

【C++】类和对象入门必知

面向过程和面向对象的初步认识类的引入类的定义类的访问限定符封装类的作用域类的实例化类对象模型this指针C语言和C实现Stack的对比面向过程和面向对象的初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解…

3717: yuyu学数数

描述yuyu开始学数数了,她要爸爸给他一些火柴棍,她要拼出很多数来。yuyu每次说要拼什么数字,爸爸就得想想要给她几根,好累啊,于是就只好写程序了。输入输入数据有多组,每组占一行,每行一个非负整…

版本控制软件SVN

SVN学习 1 版本控制软件定义及用途 版本控制软件是为适应软件配置管理的需要,控制软件的修改,减少混乱,提高软件生产效率,其是软件质量保证的重要环节软件配置管理是对软件修改进行标识、组织和控制的技术,用来协调和…

数据结构:循环队列的实现(leetcode622.设计循环队列)

目录 一.循环队列简单介绍 二.用静态数组实现循环队列 1.数组循环队列结构设计 2.数组循环队列的堆区内存申请接口 3.数据出队和入队的接口实现 4.其他操作接口 5.数组循环队列的实现代码总览 三.静态单向循环链表实现循环队列 1.链表循环队列的结构设计 2.创建静…

Linux服务:Nginx服务配置及相关模块

目录 一、Nginx配置文件 1、主配置文件解析 2、子配置文件启用 二、子配置文件使用 1、创建虚拟主机实验 2、基于端口虚拟主机实验 三、Nginx模块 1、access模块 2、自定义错误页面 3、状态页开启 一、Nginx配置文件 1、主配置文件解析 ①yum安装主配置文件位置&…

攻击者失手,自己杀死了僵尸网络 KmsdBot

此前,Akamai 的安全研究员披露了 KmsdBot 僵尸网络,该僵尸网络主要通过 SSH 爆破与弱口令进行传播。在对该僵尸网络的持续跟踪中,研究人员发现了一些有趣的事情。 C&C 控制 对恶意活动来说,最致命的就是夺取对 C&C 服务…

Anaconda环境配置

1.进入清华大学镜像网站Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror,下载稳定版Anaconda3-5.2.0,如下图。2.放到整理好的文件夹中,双击安装包进行安装。3.安装过程中需要改变的默认值如下&#xff…

【数据库】redis数据持久化

目录 数据持久化 一, RDB 1, 什么是RDB 2,持久化流程 3, 相关配置 案例演示: 4, 备份和恢复 1、备份 2、恢复 3,优势 4, 劣势 二,AOF 1,什么是A…

说说 React 中 fiber、DOM、ReactElement、实例对象之间的引用关系

原生组件 fiber 原生组件 fiber,指的就是 type 为 “span”、“div” 的 fiber。 1.fiber.stateNode 指向真实 DOM 节点;2.node["__reactFiber$" randomKey] 指向对应 fiber,使用随机数是防止和业务代码的属性名冲突,…

Scala模式匹配详解(第八章:基本语法、模式守卫、模式匹配类型)(尚硅谷笔记)

模式匹配第 8 章 模式匹配8.1 基本语法8.2 模式守卫8.3 模式匹配类型8.3.1 匹配常量8.3.2 匹配类型8.3.3 匹配数组8.3.4 匹配列表8.3.5 匹配元组8.3.6 匹配对象及样例类8.4 变量声明中的模式匹配8.5 for 表达式中的模式匹配8.6 偏函数中的模式匹配(了解)第 8 章 模式匹配 Scal…

论文解读 | [AAAI2020] 你所需要的是边界:走向任意形状的文本定位

目录 1、研究背景 2、研究的目的 3、方法论 3.1 Boundary Point Detection Network(BPDN) 3.2 Recognition Network 3.3 Loss Functions 4、实验及结果 论文连接:https://ojs.aaai.org/index.php/AAAI/article/view/6896 1、研究背景 最近,旨在…

深度解读 | 数据资产管理面临诸多挑战,做好这5个措施是关键

日前,大数据技术标准推进委员会(中国通信标准化协会下(CCSA)的专业技术委员会,简称TC601)发布《数据资产管理实践白皮书》(6.0 版)(以下简称:报告&#xff09…

浏览器跨域问题

跨域问题什么是跨域问题如何解决跨域问题JSONPCORS方式解决跨域使用 Nginx 反向代理使用 WebSocket跨源请求是否能携带Cookie什么是跨域问题 跨域问题指的是不同站点之间,使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制,它的初衷是为…

LQB01位操作说明

一个字节,包括了8位,可以对其中的8位的某一位进行读或者写; 比如char num12,如果用十六进制表示,就是0x0C,如果二进制表示,就是0000 1010 位操作函数,主要这里介绍,位读和位写0&am…

【消费战略方法论】认识消费者的恒常原理(一):消费者稳态平衡原理

“消费战略”是塔望咨询基于大量的战略与营销实践经验结合心理学、经济学、传播学等相关专业学科的知识应用进行提炼与创造形成的战略方法体系。消费战略强调以消费者为导向,进行企业、品牌战略、品牌营销的制订和落地,企业经营的每个环节和输出的每个动…

轻松搭建Redis缓存高可用集群

1. 安装单机Redis 安装步骤: 1.1 下载redis 官网下载3.0.0版本,之前几的版本不支持集群模式 下载地址:http://download.redis.io/releases/redis-3.0.0.tar.gz 1.2 首先需要安装gcc yum install gcc 1.3 创建目录 cd /usr/mkdir soft1.…

GitHub标星30K+的Java面试八股文长啥样?

2023年的互联网行业竞争越来越严峻,面试也是越来越难,一直以来我都想整理一套完美的面试宝典,奈何难抽出时间,这套1000道的Java面试手册我整理了整整1个月,上传到Git上目前star数达到了30K 一、32 道 MySQL 面试题 1&…