Firefly-rk3288 开发板Linux系统编译

news2024/11/27 13:51:55

前言

手上的一块Firefly-RK3288开发板,看了下Firefly提供的SDK,压缩包就有15个多G,直接吓退。还好最近看到了韦东山老师提供的教学资料。记下学习步骤及遇到的问题解决办法。

1、开发环境

资料提供的有百问网制作的 ubuntu18.04 虚拟机镜像。但自己已经有搭好的ubuntu18.04.6虚拟机环境,就没用提供的。

2、文件上传到虚拟机环境

可以通过共享文件夹,也可以通过 FileZilla 工具上传。共享文件夹或者FileZilla 实现网上很多教程,不再累述。
将资料光盘中的(07_bsp_sdk/100ask_firefly-rk3288)整个文件夹里的4个压缩文件上传到 ubuntu 系统下/home/owen/workspace/RK3288文件夹下。

3、配置交叉编译工具链

3.1、解压ToolChain

进入/home/owen/workspace/RK3288文件夹下,解压ToolChain.tar.gz

tar -zxvf ToolChain.tar.gz

得到ToolChain文件夹。

3.2、设置交叉编译工具

设置交叉编译工具主要是设置 PATH, ARCH 和 CROSS_COMPILE 三个环境变量。设置这 3 个环境变量有多种方法:

3.2.1、永久生效

修改用户配置文件, 修改如下:

gedit ~/.bashrc

在行尾添加或修改:

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=$PATH:/home/owen/workspace/RK3288/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin

3.2.2、临时生效

直接在当前终端执行,执行完“export”命令后,该设置只对当前终端有效:

export PATH=$PATH:/home/owen/workspace/RK3288/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

3.2.3、手动指定

先设置 PATH 环境变量,然后在 make 编译时指定 ARCH 架构 CROSS_COMPILE 交叉编译工具链:

export PATH=$PATH:/home/owen/workspace/RK3288/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

3.3、测试交叉编译工具链

4、编译 bootloader

使用版本为 uboot2017.09,韦东山老师提供的源码针对板子进行过修改。

4.1、解压u-boot源码

/home/owen/workspace/RK3288文件夹下,终端执行:

tar -zxvf uboot2017.09.tar.gz

得到uboot2017.09文件夹。

4.2、编译uboot镜像

不同的开发板对应不同的配置文件,配置文件位于 uboot2017.09文件夹下的 configs/ 目录,uboot 的编译过程:

cd uboot2017.09
make distclean
make 100ask_firefly-rk3288_defconfig

尴尬的是uboot2017.09文件夹下找不到"100ask_firefly-rk3288_defconfig"文件,只能使用“firefly-rk3288_defconfig”来配置。编译后烧录,此配置的uboot也可以用。

make firefly-rk3288_defconfig
make
./make.sh trust
./make.sh uboot
./make.sh loader

生成的供 firefly-rk3288 启动 uboot 的镜像文件如下:

ls -lh trust.img uboot.img idbloader.img

在这里插入图片描述

4.2、烧写uboot镜像

通过 dd 命令烧写 uboot 镜像文件,把SD卡连接到虚拟机,连接前后,使用lsblk命名来获取SD卡挂载的设备节点,如下:
SD卡连接前,
在这里插入图片描述
SD卡连接后,
在这里插入图片描述
由此可知,SD卡设备节点为/dev/sdc
使用 dd 命令烧写 img 镜像文件,如下:

sudo dd if=idbloader.img of=/dev/sdc seek=64
sudo dd if=uboot.img of=/dev/sdc seek=16384
sudo dd if=trust.img of=/dev/sdc seek=24576

在这里插入图片描述
烧录完成后,插卡到开发板上,从 SD 卡启动。
在这里插入图片描述

5、编译 linux kernel

5.1、解压kernel源码

/home/owen/workspace/RK3288文件夹下,终端执行:

tar -zxvf linux-4.4.tar.gz

5.2、编译内核镜像

不同的开发板对应不同的配置文件,配置文件位内核源码 arch/arm/configs/目录。
kernel 的编译过程:

cd linux-4.4
make mrproper
make 100ask_firefly-rk3288_defconfig
make zImage
make dtbs

编译完成后,在 arch/arm/boot 目录下生成 zImage 文件, 在 arch/arm/boot/dts 目录下生成设备树的二进制 rk3288-firefly.dtb 文件。
在这里插入图片描述
在这里插入图片描述

5.3、编译内核模块并安装

编译内核模块

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules

安装内核模块到 nfs 根文件系统,待用。

sudo make ARCH=arm INSTALL_MOD_PATH=/media/rootfs modules_install

6、构建根文件系统

6.1、解压buildroot源码

/home/owen/workspace/RK3288文件夹下,终端执行:

tar -zxvf buildroot2018.02.tar.gz

6.2、配置文件说明

此源码应该也是韦东山老师针对板子进行过修改。
配置文件为buildroot2018.02/configs/100ask_firefly-rk3288_defconfig

6.3、编译系统

owen@ubuntu:~/workspace/RK3288$ cd buildroot2018.02
owen@ubuntu:~/workspace/RK3288/buildroot2018.02$ make clean
owen@ubuntu:~/workspace/RK3288/buildroot2018.02$ make 100ask_firefly-rk3288_defconfig

在这里插入图片描述
生成的.config文件如下:
在这里插入图片描述
RK3288给的文档是基于ARM® Cortex™-A17架构,此处配置给的是Cortex-A15。查看《firefly_rk3288_defconfig》给的也是Cortex-A15。查了下网上两个架构对比:
在这里插入图片描述
在这里插入图片描述
也都是基于ARMv7-A指令集。不深究了,就这样吧。

继续menuconfig配置

owen@ubuntu:~/workspace/RK3288/buildroot2018.02$ make menuconfig

注意:第一次配置全默认,也会编译Linux 内核和 uboot。但是韦东山老师提供的git链接无法下载uboot和kernel,导致后面的编译报错如下:
在这里插入图片描述

>>> host-uboot-tools 2018.01 Installing to host directory
/usr/bin/install -m 0755 -D /home/owen/workspace/RK3288/buildroot2018.02/output/build/host-uboot-tools-2018.01/tools/mkimage /home/owen/workspace/RK3288/buildroot2018.02/output/host/bin/mkimage
/usr/bin/install -m 0755 -D /home/owen/workspace/RK3288/buildroot2018.02/output/build/host-uboot-tools-2018.01/tools/mkenvimage /home/owen/workspace/RK3288/buildroot2018.02/output/host/bin/mkenvimage
/usr/bin/install -m 0755 -D /home/owen/workspace/RK3288/buildroot2018.02/output/build/host-uboot-tools-2018.01/tools/dumpimage /home/owen/workspace/RK3288/buildroot2018.02/output/host/bin/dumpimage
>>> linux master Downloading
Doing shallow clone
Cloning into 'linux-master'...
fatal: unable to access 'https://git.dev.tencent.com/weidongshan/100ask_firefly-rk3288_kernel.git/': Failed to connect to git.dev.tencent.com port 443: Connection timed out
Shallow clone failed, falling back to doing a full clone
Doing full clone
Cloning into 'linux-master'...
fatal: unable to access 'https://git.dev.tencent.com/weidongshan/100ask_firefly-rk3288_kernel.git/': Failed to connect to git.dev.tencent.com port 443: Connection timed out
--2023-04-12 21:21:34--  http://sources.buildroot.net/linux-master.tar.gz
Resolving sources.buildroot.net (sources.buildroot.net)... 104.26.0.37, 104.26.1.37, 172.67.72.56, ...
Connecting to sources.buildroot.net (sources.buildroot.net)|104.26.0.37|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2023-04-12 21:21:36 ERROR 404: Not Found.

package/pkg-generic.mk:159: recipe for target '/home/owen/workspace/RK3288/buildroot2018.02/output/build/linux-master/.stamp_downloaded' failed
make[1]: *** [/home/owen/workspace/RK3288/buildroot2018.02/output/build/linux-master/.stamp_downloaded] Error 1
Makefile:79: recipe for target '_all' failed
make: *** [_all] Error 2

因此,menuconfig配置,禁止编译 Linux 内核和 uboot。这两项前面已经单独编译。

进入Kernel
在这里插入图片描述
选中上图“Linux Kernel”,键盘按下“N”建,禁止编译linux内核。
在这里插入图片描述

返回,进入Bootloaders,
在这里插入图片描述
选中上图“U-Boot”,键盘按下“N”建,禁止编译Uboot。
在这里插入图片描述
在这里插入图片描述
退出保存

编译 buildroot

owen@ubuntu:~/workspace/RK3288/buildroot2018.02$ make -j4

等待编译完成。
在这里插入图片描述

因为没有编译 Linux 内核和 uboot,提示的没有uboot.img等信息不管他。

6.4、镜像文件

编译成功后文件输出路径为 output/images
在这里插入图片描述
至此,三大块都已编译完成。
先到这里,继续学习。

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

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

相关文章

卷积计算转换为矩阵乘计算的几种场景和方法

本文默认卷积的输入输出数据格式为NHWC。 1x1卷积 输入shape为[N, H, W, C] , filter为[Hf, Wf, Ci, Co] FH, FW都为1,直接把输入shape reshape为[N, H * W, C], filter reshape为[[Hf * Wf * Ci, Co],然后进行矩阵乘得到[N, H * W, Co],再reshape为卷…

ChatGPT 本地部署及搭建

这篇简要说下清华开源项目 ChatGLM 本地部署的详细教程。清华开源项目 ChatGLM-6B 已发布开源版本,这一项目可以直接部署在本地计算机上做测试,无需联网即可体验与 AI 聊天的乐趣。 项目地址:GitHub - THUDM/ChatGLM-6B: ChatGLM-6B&#xf…

一次小破站JS代码审计出XSS漏洞思路学习

今天看了小破站一个大佬的分析,感觉思路很有意思,感兴趣的xdm可以到大佬视频下提供的链接进行测试(传送门)这类社交平台的XSS漏洞利用起来其实危害是特别大的,利用XSS能在社交平台上呈现蠕虫式的扩散,大部分…

redis内存回收——过期、淘汰

DB结构删除策略惰性删除周期删除SLOWFAST淘汰策略redis内存设置过大时会增加同步等操作的复杂度 DB结构 /* Redis database representation. There are multiple databases identified* by integers from 0 (the default database) up to the max configured* database. The …

es 搜索中同时包含 “query“ 和 “filter“ 子句

Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询。 一、Query DSL 与 Filter DSL DSL查询语言中存在两种:查询DSL(query DSL)和过滤DSL(filter DSL…

数据库管理-第六十八期 Oracle 23c的其他(20230417)

数据库管理 2023-04-17第六十八期 Oracle 23c的其他1 DGPDB2 无锁并发总结第六十八期 Oracle 23c的其他 由于Oracle 23c的文档相对较少,一是当前文档主要面向开发人员,二是感觉实际内容还在不断增加,主要还有一点就是各种新特性的在官方文档…

几分种学会React Router v6使用

React路由可以实现页面间的切换。 传送门:英文文档 中文教程: https://www.reactrouter.cn/docs/getting-started/tutorial 1.基础使用 react 需求:实现一个普通的底部导航切换 1.安装react-router npm i react-router-dom62.配置根组件…

C#调试与测试 | DebuggerDisplay使用技巧

DebuggerDisplay使用技巧 文章目录DebuggerDisplay使用技巧前言DebuggerDisplay介绍示例代码前言 当你在开发一个大型的应用程序时,调试是一个不可避免的任务。调试器是你的好朋友,但是有时候它并不能直接给你所需的信息。这时,就需要使用 C…

线上问题排查异闻录

如何解决堆内存溢出问题 OOM有很多种情况啊,这里就先讲解最常见也是最容易观测的java.lang.OutOfMemoryError: Java heap space,也就是堆内存溢出。 发现 启动Java程序的时候,最好参数加上-XX:HeapDumpOnOutOfMemoryError,该参…

【RabbitMQ】RabbitMQ控制台的使用

一、访问控制台页面 如果在本机上装了RabbitMQ则在浏览器访问127.0.0.1:15672,如果在服务器装了RabbitMQ则通过在浏览器输入urlip:15762来访问 登录后进入主页 二、添加RabbitMQ用户 进入主页后选择Admin,对应找到添加用户选择输入信息后即可完成添加 三、添加Rab…

GROUP BY 与 聚合函数、 HAVING 与 ORDER BY-MySQL数据库 - 分组选择数据(头歌实践教学平台)

文章目的初衷是希望学习笔记分享给更多的伙伴,并无盈利目的,尊重版权,如有侵犯,请官方工作人员联系博主谢谢。 目录 第1关:GROUP BY 与 聚合函数 任务描述 相关知识 GROUP BY与聚合函数的使用 编程要求 第2关&…

交通 | 应用Benders分解方法解决多车生产路由问题

论文解读​ 曲晨辉,王飞龙 1 知识补充和文章贡献 2.1 IRP (Inventory routing problems) IRP关注的是在一个给定的规划范围内,从一个设施到一组客户的单一产品分配。客户以给定的速度消费产品,并可将产品的库存维持在一个特定的水平上。一组…

HTB-SolidState

HTB-SolidState信息收集80端口Apache Jamesmindyrbash绕过mindy -> root总结信息收集 80端口 目录扫描 从/README.txt文件里知道他们在捣鼓一个新的秘密项目,这个新的秘密项目就是一个新的网页外观。 80端口先点到为止,免得进兔子洞。 Apache James …

基于SpringBoot技术点餐系统的设计与实现(论文+源码)_kaic

摘 要 饮食行业的发展推动了服务的提升,在线点餐服务模式随之产生。相比于传统点餐,在线点餐更加方便地浏览菜品,挑选菜品,有更好的用餐体验。系统的使用减少了人工成本,方便数据统计,便于提供更优质的服务…

大数据学习路线图(2023完整版)适合收藏

大数据开发是一门涉及处理和分析大规模数据的技术领域,随着大数据技术的不断发展和应用,对大数据开发人员的需求也在逐渐增加。就业前景相对较好,尤其在科技行业和数据驱动型企业中。大数据开发的前景还是有很多优势的,就业范围广…

Ubuntu14.04+ROS-indigo版本安装教程

ROS之indigo版本安装教程 1、Ubuntu14.04安装(indigo对应的ubuntu版本是14.04) Ubuntu14.04 的下载地址https://www.releases.ubuntu.com/14.04/ 64位的电脑下载如下图 在虚拟机上配置了该镜像(我用的是VMware虚拟机) 2、ROS …

mac苹果电脑运行慢卡顿如何释放内存?

苹果电脑受到大众追捧的大部分原因是她高效的运行速度,为我们带来了很大的方便。但是大家有没有发现经过几年时间后,现在自己的苹果电脑运行速度没有以前快了呢?导致苹果电脑变慢的原因有哪些?苹果电脑变慢了怎么办?小…

平凡的Python为什么能一跃成为世界排名第一的语言

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"! 作者:大周|慕课网讲师 一、前言 本文将结合个人经历为各位同学客观的分析是否有学习Python的必要、Python适合谁学、为什么…

webgl-画三角形

html <!DOCTYPE html> <head> <style> *{ margin: 0px; padding: 0px; } </style> </head> <body> <canvas id webgl> 您的浏览器不支持HTML5,请更换浏览器 </canvas> <script src"./main.js"></script&g…

007:Mapbox GL实现地图地点搜索定位功能

第007个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中实现地图地点搜索定位功能 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共68行)安装插件相关API参考:专栏目标示例效果 配置方式 1)查看基础设…