ROC-RK3328-CC板子编译烧录环境记录

3328的官网 http://www.t-firefly.com/doc/product/index/id/34.html

官方网站:http://www.t-firefly.com

开发者社区:http://developer.t-firefly.com

联系电话(紧急问题):(+86)18688117175

技术支持  -  邮箱: service@t-firefly.com

                 技术交流群①:431139193(已满) 

                 技术交流群②:586343230

如何通过 SD 卡启动系统

http://wiki.t-firefly.com/zh_CN/ROC-RK3328-CC/flash_sd.html
如何通过emmc 启动系统

http://wiki.t-firefly.com/zh_CN/ROC-RK3328-CC/flash_emmc.html

如何制作 Linux SD 卡 启动系统

http://www.t-firefly.com/doc/product/info/id/247.html

如何制作 Android SD 卡 启动系统

http://www.t-firefly.com/doc/product/info/id/343.html
源码获取
Android: https://gitlab.com/TeeFirefly/RK3328-Nougat.git
Linux: https://github.com/FireflyTeam

教你如何搭建环境和下载和编译rk3288开发板的android及linux的
http://wiki.t-firefly.com/zh_CN/ROC-RK3328-CC/android_compile_android7.html

//
http://wiki.t-firefly.com/zh_CN/ROC-RK3328-CC/index.html

ROC-RK3288-CC

编译 Android 7.1
准备
硬件配置

编译 Android 7.1 开发环境硬件配置建议:

64 位 CPU
16GB 内存 + 交换内存
30GB 空闲空间用来编译, 源码树另占 8GB

另外可参考 Google 官方文档硬件和软件配置:

https://source.android.com/setup/build/requirements
https://source.android.com/setup/initializing

软件配置

安装 JDK 8

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk

安装环境包

sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev
libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils
xsltproc lzop libc6-dev schedtool g+±multilib lib32z1-dev lib32ncurses5-dev
lib32readline-gplv2-dev gcc-multilib libswitch-perl

sudo apt-get install gcc-arm-linux-gnueabihf
libssl1.0.0 libssl-dev
p7zip-full

下载 Android SDK

由于 SDK 较大,请选择以下云盘之一下载 ROC-RK3328-CC_Android7.1.2_git_20171204.7z:

Baiduyun
Google Drive

下载完成后,在解压前先校验下 MD5 码:

$ md5sum /path/to/ROC-RK3328-CC_Android7.1.2_git_20171204.7z
6d34e51fd7d26e9e141e91b0c564cd1f ROC-RK3328-CC_Android7.1.2_git_20171204.7z

然后解压:

mkdir -p ~/proj/roc-rk3328-cc
cd ~/proj/roc-rk3328-cc
7z x /path/to/ROC-RK3328-CC_Android7.1.2_git_20171204.7z
git reset --hard

更新远程仓库:

git remote rm origin
git remote add gitlab https://gitlab.com/TeeFirefly/RK3328-Nougat.git

从 gitlab 处同步源码:

git pull gitlab roc-rk3328-cc:roc-rk3328-cc

也可以到如下地址查看源码: https://gitlab.com/TeeFirefly/RK3328-Nougat/tree/roc-rk3328-cc
使用 Firefly 脚本编译

编译内核

./FFTools/make.sh -k -j4

编译 U-Boot

./FFTools/make.sh -u -j4

编译 Android

./FFTools/make.sh -a -j4

编译全部

如下指令会编译出内核, U-Boot 以及 Android

./FFTools/make.sh -j4

不使用脚本编译

编译之前请先执行如下命令配置好环境变量:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
export CLASSPATH=.: J A V A H O M E / l i b : JAVA_HOME/lib: JAVAHOME/lib:JAVA_HOME/lib/tools.jar

编译内核

make ARCH=arm64 firefly_defconfig
make -j8 ARCH=arm64 rk3328-roc-cc.img
make -j8 ARCH=arm64 modules

编译 U-Boot

make rk3328_box_defconfig
make ARCHV=aarch64 -j4

编译 Android

source build/envsetup.sh
lunch roc_rk3328_cc_box-userdebug
make installclean
make -j4
./mkimage.sh

打包 RK 固件 在 Linux 下打包固件

编译完成后使用 Firefly 官方脚本即可打包所有的分区映像成 RK固件:./FFTools/mkupdate/mkupdate.sh update

最终生成的文件是 rockdev/Image-rk3328_firefly_box/update.img.

在 Windows 下打包固件

在 Windows 下打包 RK 固件 update.img 也是很简单的:

拷贝所有在 rockdev/Image-rk3328_firefly_box/ 目录下编译好的文件到 AndroidTool 的 rockdev\Image 目录下。
运行在 AndroidTool 的 rockdev 目录下的 mkupdate.bat 文件。
在 rockdev\Image 目录将会生成 update.img。

分区映像

update.img 是发布给最终用户的固件,方便升级开发板。而在实际开发中,更多的时候是修改并烧写单个分区映像文件,这样做大大节省开发时间。

下表总结了在各个编译阶段所生成的分区映像文件:

|------------------|---------------------|-----------|

StageProductPartition
Compiling Kernelkernel/kernel.imgkernel
kernel/resource.imgresource
--------------------------------------------------
Compiling U-Bootu-boot/uboot.imguboot
--------------------------------------------------
./mkimage.shboot.imgboot
system.imgsystem
--------------------------------------------------

注意,执行 ./mkimage.sh 后, boot.img 和 system.img 将会被重新编译并打包到目录 out/target/product/rk3328_firefly_box/ 下,所有生成的映像文件将会拷贝到目录 rockdev/Image-rk3328_firefly_box/ 下。

如下是映像文件列表:(.img文件是RK格式固件)

boot.img: Android 的 initramfs 映像,包含Android根目录的基础文件系统,它负责初始化和加载系统分区。
system.img: ext4 文件系统格式的 Android 文件系统分区映像。
kernel.img: 内核映像。
resource.img: Resource 映像, 包含启动图片和内核设备树。
misc.img: misc 分区映像, 负责启动模式的切换和急救模式参数的传递。
recovery.img: Recovery 模式映像。
rk3328_loader_v1.08.244.bin: Loader 文件。
uboot.img: U-Boot 映像文件。
trust.img: Arm trusted file (ATF) 映像文件。
parameter.txt: 分区布局和内核命令行。

///
http://www.t-firefly.com/doc/product/info/id/271.html

Uboot 使用

更新时间:2018-05-21 阅读:1790
前言

RK Uboot 是基于开源的 Uboot 进行开发的,Uboot 的工作模式有启动加载模式和下载模式。启动加载模式是 Uboot 的正常工作模式,嵌入式产品发布时,Uboot都工作在此模式下,主要用于开机时把 FLASH 中的内核加载到 SDRAM 中,启动操作系统;下载模式主要用于将固件下载到 FLASH,开机时长按 RECOVERY 键可进入下载模式。本文简单说明 Uboot 的使用,更多 Uboot 相关文档请看 SDK 下面的 RKDocs/Develop reference documents/Rockchip U-Boot 开发指南 V3.7-20160708.pdf。注意,该文档主要是编译基于 Android 7.1 的 Uboot,其中 Android 7.1 的相关 SDK 在链接 Android_7.1_SDK 处下载。
编译

首先 cd 进入 Android 7.1 SDK 源码目录中的 u-boot 目录,编译前把默认配置写入 .config,执行

make rk3328_box_defconfig

如果需要修改相关选项,也可以用

make menuconfig

编译执行

make ARCHV=aarch64

编译后生成

u-boot/uboot.img
u-boot/trust.img
u-boot/rk3328_loader_v1.08.244.bin

烧录

打开烧录工具,板子接好 USB 双头公对公数据线(具体连接设备请参考 《连接设备》 或者 《Loader 模式》),上电时按住 RECOVERY 键,上电后松开 RECOVERY 键使开发板进入 Uboot 的下载模式,然后在烧录工具中选择编译好的 Loader 文件,点击"执行"按钮即可,如下图

rk3328-uboot使用图1.PNG 烧录工具是AndroidTool

地址 名字 路径
0x0000 0000 loaderddr u-boot/rk3328_loader_ddr786_v1.06.243.bin
0x0000 4000 uboot u-boot/uboot.img
0x0000 6000 trust u-boot/trust.img

注意:该软件默认是英文的,但是将 AndroidTool_Release_v2.39/config 配置文件中的 Selected=2 修改为 Selected=1 并保存,然后重启软件,可以切换为中文界面;其中"地址"、“名字”、"路径"都是可以修改的,这里需要特别注意地址字段的填写,图中显示的是正确的烧录地址。
确认是否正确烧写新的 Loader

如果你已经成功烧写你最新编译的 Loader,在开机的串口输出 log 中可以看到类似如下信息:

#Boot ver: 2016-12-19#1.05

如果打印的时间及版本与你编译的一致,说明你成功更新了Loader。
进入 Uboot 命令行模式

由于 Firefly 产品主要用于开发,所以我们默认设置开机时有1秒的倒计时,如果这时候在串口输入任意键即可进入 u-boot命令行模式。 发布的产品是不需要进入 u-boot 命令行模式的,如果需要设置 u-boot 默认不进入命令行模式的,可以做如下修改:
在文件 u-boot/include/configs/rk33plat.h

/* mod it to enable console commands. */
#define CONFIG_BOOTDELAY 0

把宏 CONFIG_BOOTDELAY 改为 0 即默认不进入命令行模式。
一级 Loader

U-Boot 作为一级 Loader 模式,那么仅支持 eMMC 存储设备,编译完成后生成的镜像:

RK3328LoaderU-BOOT_V2.17.01.bin

其中 V2.17.01 是发布的版本号,rockchip 定义 U-Boot loader 的版本,其中 2.17 是根据存储版本定义的,客户务必不要修改这个版本,01 是 U-Boot 定义的小版本,用户根据实际需求在 Makefile 中修改。
二级 Loader

U-Boot 作为二级 Loader 模式,那么固件支持所有的存储设备,该模式下,需要 MiniLoader 支持,通过宏CONFIG_MERGER_MINILOADER 进行配置生成。同时引入 Arm Trusted,Firmware 后会生成 trust image,这个通过宏CONFIG_MERGER_TRUSTIMAGE 进行配置生成。
RK3328 使用二级 Loader,编译生成的镜像为:

u-boot/uboot.img
u-boot/trust.img
u-boot/RK3328MiniLoaderAll_V1.05.bin

其中 V1.05 是发布的版本号,rockchip 定义 U-Boot loader 的版本,其中 1.05 是根据存储版本定义的,客户务必不要修改这个版本。 uboot.img 是 U-Boot 作为二级 loader 的打包。 trust.img 是 U-Boot 作为二级 loader 的打包。
/

烧录

dd if=uboot.img of=/dev/sdb seek= ( ( ( 0 x 00002000 + 0 x 00002000 ) ) ) i b s = 1 M c o n v = s y n c , f s y n c d d i f = t r u s t . i m g o f = / d e v / s d b s e e k = (((0x00002000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=trust.img of=/dev/sdb seek= (((0x00002000+0x00002000)))ibs=1Mconv=sync,fsyncddif=trust.imgof=/dev/sdbseek=(((0x00004000 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=misc.img of=/dev/sdb seek= ( ( ( 0 x 00008000 + 0 x 00002000 ) ) ) i b s = 1 M c o n v = s y n c , f s y n c d d i f = r e s o u r c e . i m g o f = / d e v / s d b s e e k = (((0x00008000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=resource.img of=/dev/sdb seek= (((0x00008000+0x00002000)))ibs=1Mconv=sync,fsyncddif=resource.imgof=/dev/sdbseek=(((0x0000A800 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=kernel.img of=/dev/sdb seek= ( ( ( 0 x 00012000 + 0 x 00002000 ) ) ) i b s = 1 M c o n v = s y n c , f s y n c d d i f = b o o t . i m g o f = / d e v / s d b s e e k = (((0x00012000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=boot.img of=/dev/sdb seek= (((0x00012000+0x00002000)))ibs=1Mconv=sync,fsyncddif=boot.imgof=/dev/sdbseek=(((0x00022000 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=recovery.img of=/dev/sdb seek= ( ( ( 0 x 00032000 + 0 x 00002000 ) ) ) i b s = 1 M c o n v = s y n c , f s y n c d d i f = s y s t e m . i m g o f = / d e v / s d b s e e k = (((0x00032000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=system.img of=/dev/sdb seek= (((0x00032000+0x00002000)))ibs=1Mconv=sync,fsyncddif=system.imgof=/dev/sdbseek=(((0x000AC000 + 0x00002000))) ibs=1M conv=sync,fsync

dd if=uboot.img of=/dev/mmcblk0 seek= ( ( ( 0 x 00002000 + 0 x 00002000 ) ) ) i b s = 1 M c o n v = s y n c , f s y n c d d i f = t r u s t . i m g o f = / d e v / m m c b l k 0 s e e k = (((0x00002000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=trust.img of=/dev/mmcblk0 seek= (((0x00002000+0x00002000)))ibs=1Mconv=sync,fsyncddif=trust.imgof=/dev/mmcblk0seek=(((0x00004000 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=misc.img of=/dev/mmcblk0 seek= ( ( ( 0 x 00008000 + 0 x 00002000 ) ) ) i b s = 1 M c o n v = s y n c , f s y n c d d i f = r e s o u r c e . i m g o f = / d e v / m m c b l k 0 s e e k = (((0x00008000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=resource.img of=/dev/mmcblk0 seek= (((0x00008000+0x00002000)))ibs=1Mconv=sync,fsyncddif=resource.imgof=/dev/mmcblk0seek=(((0x0000A800 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=kernel.img of=/dev/mmcblk0 seek= ( ( ( 0 x 00012000 + 0 x 00002000 ) ) ) i b s = 1 M c o n v = s y n c , f s y n c d d i f = b o o t . i m g o f = / d e v / m m c b l k 0 s e e k = (((0x00012000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=boot.img of=/dev/mmcblk0 seek= (((0x00012000+0x00002000)))ibs=1Mconv=sync,fsyncddif=boot.imgof=/dev/mmcblk0seek=(((0x00022000 + 0x00002000))) ibs=1M conv=sync,fsync
dd if=recovery.img of=/dev/mmcblk0 seek= ( ( ( 0 x 00032000 + 0 x 00002000 ) ) ) i b s = 1 M c o n v = s y n c , f s y n c d d i f = s y s t e m . i m g o f = / d e v / m m c b l k 0 s e e k = (((0x00032000 + 0x00002000))) ibs=1M conv=sync,fsync dd if=system.img of=/dev/mmcblk0 seek= (((0x00032000+0x00002000)))ibs=1Mconv=sync,fsyncddif=system.imgof=/dev/mmcblk0seek=(((0x000AC000 + 0x00002000))) ibs=1M conv=sync,fsync

/烧录工具 windows系统
SD_Firmware_Tool 烧录文件是update.img(RK固件)

//

原始固件,是一种能以逐位复制的方式烧写到存储设备的固件,是存储设备的原始映像。原始固件一般烧写到 SD 卡中,但也可以烧写到 eMMC 中。 烧写原始固件有许多工具可以选用:
烧写 SD 卡
图形界面烧写工具:
SDCard Installer (Linux/Windows/Mac)
Etcher (Linux/Windows/Mac)
命令行烧写工具
dd (Linux)
烧写 eMMC
图形界面烧写工具:
AndroidTool (Windows)
命令行烧写工具:
upgrade_tool (Linux)
rkdeveloptool (Linux)

RK固件(update.img,其他的.img文件也是RK格式),打包 RK 固件,在 Linux 下打包固件编译完成后使用 Firefly 官方脚本即可打包所有的分区映像成 RK固件:./FFTools/mkupdate/mkupdate.sh update,编译过程见上。

windows烧写
RK 固件(./FFTools/mkupdate/mkupdate.sh update),update.img(其他的.img格式文件也是)是以 Rockchip专有格式打包的固件,使用 Rockchip 提供的 upgrade_tool (Linux) 或 AndroidTool (Windows) 工具烧写到eMMC 闪存中。RK 固件是 Rockchip 的传统固件打包格式,常用于 Android 设备上。另外,Android 的 RK 固件也可以使用 SD Firmware Tool 工具烧写到 SD 卡中
SD_Firmware_Tool  选择SD启动,烧写 update.img
使用 AndroidTool 之前, 应先安装 Rockusb 驱动(是DriverAssitant_v4.5这个文件),然后再安装运行 AndroidTool(以管理员身份),先按着复位键给板子上电(注意USB会供电,要先断开)进入,此时设备处于 Rockusb 模式,状态行将显示 “发现一个LOADER设备”。点击升级固件->固件-》选择update.img。–>点击升级就下载进emmc了。

linux系统烧写emmc
RK 固件
如果开发板原有系统是 RK 固件,那么它使用 parameter 文件作为分区方案,这样就可直接使用分区名称来烧写分区映像:
1. 强制设备进入 Rockusb 模式,按下按键插上电。
2. 使用 upgrade_tool 烧写分区映像:
upgrade_tool wl 0x2000 uboot.img
upgrade_tool wl 0x4000 trust.img
upgrade_tool di -b boot.img
upgrade_tool di -k kernel.img
upgrade_tool di -s system.img
upgrade_tool di -r recovery.img
upgrade_tool di -m misc.img
upgrade_tool di resource resource.img
upgrade_tool di -p parameter.txt # 烧写 parameter
upgrade_tool ul MiniLoaderAll.bin # 烧写 bootloader


upgrade_tool wl 0x2000 uboot.img
upgrade_tool wl 0x4000 trust.img
upgrade_tool wl 0x8000 misc.img
upgrade_tool wl 0xa000 parameter.txt
upgrade_tool wl 0xa800 resource.img
upgrade_tool wl 0x12000 kernel.img
upgrade_tool wl 0x22000 boot.img
upgrade_tool wl 0x32000 recovery.img
upgrade_tool wl 0xac000 system.img

注意:
• -b 是 boot 分区的预定义缩写。如果没有缩写可用,请改为分区名称,例如上述例子中的 resource。
• 可根据 《参数文件格式》 这份文档的说明自定义内核参数和分区布局。分区布局更改后,必须先重新烧写该 parameter 文件,方可重新烧写受影响的相应分区。


两种模式下的烧录文件偏移(我按下按键时是进入Rockusb Mode模式)
$ show_rk_parameter.sh device/rockchip/rk3328/parameter.txt
Rockusb Mode

NAME OFFSET LENGTH
uboot 0x00002000 0x00002000
trust 0x00004000 0x00004000
misc 0x00008000 0x00002000
baseparamer 0x0000a000 0x00000800
resource 0x0000a800 0x00007800
kernel 0x00012000 0x00010000
boot 0x00022000 0x00010000
recovery 0x00032000 0x00010000
backup 0x00042000 0x00020000
cache 0x00062000 0x00040000
metadata 0x000a2000 0x00008000
kpanic 0x000aa000 0x00002000
system 0x000ac000 0x00300000
userdata 0x003ac000 -

Maskrom Mode

NAME OFFSET LENGTH
uboot 0x00004000 0x00002000
trust 0x00006000 0x00004000
misc 0x0000a000 0x00002000
baseparamer 0x0000c000 0x00000800
resource 0x0000c800 0x00007800
kernel 0x00014000 0x00010000
boot 0x00024000 0x00010000
recovery 0x00034000 0x00010000
backup 0x00044000 0x00020000
cache 0x00064000 0x00040000
metadata 0x000a4000 0x00008000
kpanic 0x000ac000 0x00002000
system 0x000ae000 0x00300000
userdata 0x003ae000 -

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xx-xx-xxx-xxx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值