Firefly-RK3399笔记
有用的连接:
Rockchip官方资料:
http://opensource.rock-chips.com/wiki_Main_Page
http://opensource.rock-chips.com/wiki_RK3399
http://opensource.rock-chips.com/wiki_Boot_option
http://opensource.rock-chips.com/wiki_U-Boot#Download_U-Boot
Firefly官方资料:
http://wiki.t-firefly.com/index.php/Firefly-RK3399
http://wiki.t-firefly.com/index.php/Firefly-RK3399/Flash_image
SDK
https://gitlab.com/TeeFirefly/FireNow-Nougat
https://gitlab.com/TeeFirefly/FireNow-Marshmallow
1、烧写工具
这里用到的主要是upgrade_tool,在按住recovery键开机会进入下载模式,此时运行这个工具,然后选择板子对应的设备号,就会进入命令行:
- $sudo upgrade_tool
- List of rockusb connected
- DevNo= Vid=0x2207,Pid=0x330c,LocationID= Loader
- Found rockusb,Select input DevNo,Rescan press <R>,Quit press <Q>:
- ---------------------Tool Usage ---------------------
- Help: H
- Quit: Q
- Version: V
- Clear Screen: CS
- ------------------Upgrade Command ------------------
- ChooseDevice: CD
- SwitchDevice: SD
- UpgradeFirmware: UF <Firmware>
- UpgradeLoader: UL <Loader>
- DownloadImage: DI <-p|-b|-k|-s|-r|-m image> [parameter file]
- DownloadBoot: DB <Loader>
- EraseFlash: EF <Loader|firmware>
- LowerFormat: LF
- ----------------Professional Command -----------------
- TestDevice: TD
- ResetDevice: RD [subcode]
- ResetPipe: RP [pipe]
- ReadFlashID: RID
- ReadFlashInfo: RFI
- ReadChipInfo: RCI
- ReadSector: RS <BeginSec> <SectorLen> [-decode] [File]
- WriteSector: WS <BeginSec> <File>
- ReadLBA: RL <BeginSec> <SectorLen> [File]
- WriteLBA: WL <BeginSec> <File>
- EraseBlock: EB <CS> <BeginBlock> <BlokcLen> [--Force]
- -------------------------------------------------------
- Rockusb>
我们可以利用这个工具完成很多操作。
这个工具的下载地址: 百度云 或 Linux_Upgrade_Tool_v1.24.zip
帮助手册: upgrade_tool帮助手册.pdf
2、使用upgrade_tool烧写uboot.img
阅读wiki:http://wiki.t-firefly.com/index.php/Firefly-RK3399/Flash_image 可以知道各个镜像在emmc中对应的地址:
从这里可以看到uboot被烧写到了emmc的0x2000处。
烧写方法1:
进入upgrade_tool的命令行模式,执行:
- Rockusb>WL 0x2000 uboot.img
烧写方法2:
直接执行:
- sudo upgrade_tool wl 0x2000 ./uboot.img
其中wl也可以写成WL
用upgrade_tool烧写其他分区的镜像的命令如下:
- 烧写统一固件 update.img:
- sudo upgrade_tool uf update.img
- 烧写分区镜像:
- sudo upgrade_tool di -b /path/to/boot.img
- sudo upgrade_tool di -k /path/to/kernel.img
- sudo upgrade_tool di -s /path/to/system.img
- sudo upgrade_tool di -r /path/to/recovery.img
- sudo upgrade_tool di -m /path/to/misc.img
- sudo upgrade_tool di resource /path/to/resource.img
- sudo upgrade_tool di -p paramater #烧写 parameter
- sudo upgrade_tool ul bootloader.bin # 烧写 bootloader
- sudo upgrade_tool di trust /path/to/trust.img #烧写 trust
di参数的格式: di <分区名称/缩写> <对应的镜像文件的路径信息>,具体分区的名字可以查看parameter.txt文件,比如上面用upgrade_tool烧写uboot也可以用:
- sudo upgrate_tool di uboot /path/to/uboot.img
从parameter.txt中可以得到如下emmc的分区:
- mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(trust),0x00002000@0x00006000(misc),0x00008000@0x00008000(resource),0x0000C000@0x00010000(kernel),0x00010000@0x0001C000(boot),0x00010000@0x0002C000(recovery),0x00038000@0x0003C000(backup),0x00040000@0x00074000(cache),0x00300000@0x000B4000(system),0x00008000@0x003B4000(metadata),0x00002000@0x003BC000(baseparamer),-@0x003BE000(userdata)
uboot:对应的是uboot.img
trust:对应的是trust.img, 其中含有ATF以及休眠唤醒相关的文件
misc: misc 分区映像,对应misc.img,负责启动模式切换和急救模式的参数传递。
resource: 资源映像,对应的是resource.img,内含开机图片和内核的设备树信息。
kernel: 内核映像,对应的是kernel.img
boot: Android 的初始文件映像,即ramdisk,负责初始化并加载 system 分区,对应的是boot.img
recovery:急救模式映像,对应的是recovery.img
system: Android 的 system 分区映像,ext4 文件系统格式,对应的是system.img
3、在maskrom模式也可以使用upgrade_tool
4、audit2allow的使用
在kernel log里可以看到很多avc的log:
- [ 143.450213] type= audit(1358499630.406:): avc: denied { read open } for pid= comm="vm" path="/system/bin/sh" dev="mmcblk1p10" ino= scontext=u:r:sudaemon:s0 tcontext=u:object_r:shell_exec:s0 tclass=file permissive=
- [ 143.450484] type= audit(1358499630.406:): avc: denied { execute_no_trans } for pid= comm="vm" path="/system/bin/sh" dev="mmcblk1p10" ino= scontext=u:r:sudaemon:s0 tcontext=u:object_r:shell_exec:s0 tclass=file permissive=
- [ 143.450738] type= audit(1358499630.410:): avc: denied { getattr } for pid= comm="sh" path="/system/bin/sh" dev="mmcblk1p10" ino= scontext=u:r:sudaemon:s0 tcontext=u:object_r:shell_exec:s0 tclass=file permissive=
- [ 143.462718] type= audit(1358499630.423:): avc: denied { getattr } for pid= comm="sh" path="/dev/pts/0" dev="devpts" ino= scontext=u:r:sudaemon:s0 tcontext=u:object_r:devpts:s0 tclass=chr_file permissive=
- [ 143.463075] type= audit(1358499630.423:): avc: denied { ioctl } for pid= comm="sh" path="/dev/pts/0" dev="devpts" ino= ioctlcmd= scontext=u:r:sudaemon:s0 tcontext=u:object_r:devpts:s0 tclass=chr_file permissive=
可以用下面的办法将上面的这些语句转换为类似下面的selinux的语法:
- allow adbd graphics_device:dir { search };
- allow adbd surfaceflinger:fifo_file rw_file_perms;
首先将要转换的avc信息保存到一个临时文件中,比如tmp.txt
然后用adb pull将板子上的sepolicy文件拷贝出来:adb pull /sepolicy
设置环境变量ANDROID_BUILD_TOP为Android源码的路径:export ANDROID_BUILD_TOP=/home/pengdonglin/disk_ext/Firefly/RK3399/sdk_7_1_1
然后Android源码中提供的audit2allow工具进行转换:./external/selinux/prebuilts/bin/audit2allow -p ~/logcat/rk3399/selinux/sepolicy -i ~/logcat/rk3399/selinux/tmp.txt
5、fastboot的使用
参考:http://opensource.rock-chips.com/wiki_Fastboot
使用方法:
Rockchip use 0x2207 as its USB vendor ID. This VID is not in Google's original fastboot code. So every fastboot command have to use "-i" parameter to specify vid to fastboot.
To list all the Rockchip devices attached to your USB port in fastboot mode.
进入fastboot:
- adb reboot fastboot
在uboot的log中可以看到:
- #Boot ver: --#1.06
- empty serial no.
- reboot normal.
查看:
- fastboot -i 0x2207 devices
0123456789 fastboot
6、用命令进入下载模式
在Android系统下进入:
adb reboot bootloader
在fastboot模式下进入:
fastboot reboot-bootloader
可以在uboot的log中看到:
- #Boot ver: --#1.06
- empty serial no.
- reboot rockusb.
此时我们可以适用upgrade_tool进行镜像的烧写等等。
7、unlock设备
在fastboot模式下执行下面的命令:
先执行 fastboot -i 0x2207 oem unlock
然后在5s内执行 fastboot -i 0x2207 oem unlock_accept
8、使用fastboot启动内核
在进行开发时,为了延长flash的寿命,每次改完内核后,没有必要每次都烧进emmc。fastboot提供了boot命令。
默认的uboot已经支持fastboot了,但是在用fastboot boot启动新的kernel时提示如下错误:
creating boot image...
creating boot image - 18911232 bytes
downloading 'boot.img'...
FAILED (remote: not support "-u" option)
finished. total time: 0.000s
通过分析uboot代码发现,fastboot每次只能接受16MB的数据,而我们的kernel.img为19MB,所以需要修改uboot代码:
- diff --git a/u-boot/include/configs/rk_default_config.h b/u-boot/include/configs/rk_default_config.h
- index d408d05..849b8ca
- --- a/u-boot/include/configs/rk_default_config.h
- +++ b/u-boot/include/configs/rk_default_config.h
- @@ -, +, @@
- * CONFIG_FASTBOOT_TRANSFER_BUFFER_SIZE should be larger than our boot/recovery image size.
- */
- #define CONFIG_FASTBOOT_TRANSFER_BUFFER_SIZE CONFIG_RK_BOOT_BUFFER_SIZE
- -#define CONFIG_FASTBOOT_TRANSFER_BUFFER_SIZE_EACH (CONFIG_FASTBOOT_TRANSFER_BUFFER_SIZE >> 1)
- +#define CONFIG_FASTBOOT_TRANSFER_BUFFER_SIZE_EACH (CONFIG_FASTBOOT_TRANSFER_BUFFER_SIZE)
从新编译uboot,将生成的uboot.img烧写到emmc中,重新启动。
然后用下面的命令:
adb reboot fastboot
fastboot -i 0x2207 boot /home/pengdonglin/disk_ext/Firefly/RK3399/sdk_7_1_1/kernel/kernel.img
==
Firefly-RK3399笔记的更多相关文章
- firefly rk3399 增加 HL-340 驱动(编译内核)
前言:新下载了firefly rk3399 ubuntu固件16.04,但是发现没有HL-340 USB转串口的驱动,而机器人底盘驱动是HL-340的,所以一直提示无法找到设备驱动. 由于没有技术支持 ...
- 萤火虫系统(firefly) RK3399 python3 安装 tensorflow
前言: 继续之前在RK3399上安装深度学习的一些环境,主要碰到的坑给大家分享一下,为了让大家少走弯路.这次是安装tensorflow,话不多说,直接开撸. --------------------- ...
- 萤火虫系统(firefly) RK3399 python3 安装 spicy
最近一直在研究深度学习,公司里正好也有个项目是需要在RK3399的板子上跑人脸识别. 原本在linux_x86系统上轻轻松松装的环境到了RK3399板子上(firefly系统)安装起来真的非常麻烦,需 ...
- 九鼎RK3399笔记一:Linux平台手册
@ 目录 一.git下载九鼎SDK 二.安装所需的软件包: 三.安装 kernel 及 u-boot 编译需要依赖的软件包 四.安装文件系统需要依赖的软件包 五.安装 Buildroot 编译需要依赖 ...
- ARM64编译工具链下载
下面是自制的用于编译ARMv8指令的交叉编译工具链: 1.运行在PC上,支持SVE指令,不支持SVE ACLE,版本GCC9.2 https://pan.baidu.com/s/1_NnwajWCel ...
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- [Firefly引擎][学习笔记一][已完结]带用户验证的聊天室
原地址:http://bbs.9miao.com/thread-44571-1-1.html 前言:早在群里看到大鸡蛋分享他们团队的Firefly引擎,但一直没有时间去仔细看看,恰好最近需要开发一个棋 ...
- [Firefly引擎][学习笔记四][已完结]服务器端与客户端的通讯
原地址:http://www.9miao.com/question-15-54981.html 传送门:学习笔记一学习笔记二学习笔记三 前言:学习笔记三是模块封装,这个在持续开发中会不断更新, 因为写 ...
随机推荐
- spark操作Kudu之写 - 使用DataFrame API
在通过DataFrame API编写时,目前只支持一种模式“append”.尚未实现的“覆盖”模式 import org.apache.kudu.spark.kudu._ import org.apa ...
- 移动端上拉加载下拉刷新插件-mescroll.js插件
官网地址是:http://www.mescroll.com // 初始化mescroll function initMeScroll() { //创建MeScroll对象,内部已默认开启下拉刷新,自动 ...
- Fstring
题目描述 一个只包含A,B,C三种字符的字符串,如果其中有连续的3个由A,B,C各一个组成,则称为Fstring. 例如:BAACAACCBAAA就是,而AABBCCAABB则不是. 你的任务就是计算 ...
- weka的基本使用
目录: 1. 简介 2.界面初识 3.数据格式 4.数据准备 5.关联规则 6.分类与回归 7.聚类分析 8.Weka相关资料 9.Weka二次开发 10.Weka源代码导入 1. 简介 WEKA的全 ...
- python 精确计算与向上取整 decimal math.ceil
1. 精确计算 python的float型不精确,需要导入decimal包,以下是不精确举例: 导入decimal包后: 2. 向上取整 一般的取整数(向下取整): 向上取整的方法:
- 001.Ceph简介概述
一 Ceph简介 Red Hat Ceph是一个分布式的数据对象存储,系统设计旨在性能.可靠性和可扩展性上能够提供优秀的存储服务.分布式对象存储是存储的未来,因为它们适应非结构化数据,并且客户端可以同 ...
- 从函数式编程到Ramda函数库(一)
函数式编程是种编程方式,它将电脑运算视为函数的计算.函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值).和指令式编程相比, ...
- input模拟输入下拉框
功能点: 输入.下拉选择.根据输入内容模糊检索.键盘上下键选择 实现思路: 显示隐藏: input获取焦点显示,失去焦点隐藏 下拉选择: 以父元素为基准,通过绝对定位定位至input输入下方 模 ...
- Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别
https://blog.csdn.net/yunfeng482/article/details/72856762
- Winform-DataGridView
Winform-DataGridView 1 常用属性 // 1.点击后的选中模式 this.dgv.SelectionMode = DataGridViewSelectionMode.FullRow ...