RK3399开发准备工作

目录

0 前言

1 准备工作

2 开发工具

2.1 SourceInsight4.0

2.2 VirtualBox

2.3 FillZilla

2.4 github

2.5 刷机工具

2.6 Android编译方法

2.7 解包RK固件

2.8 合成RK固件[1]

0 前言

      RK3399适合学习Android,一是网上资料比较多,二是官网适配了Android8.1系统,甚至有学者移植了Android 10系统,比较能跟上现阶段的Android版本。主要从Android8.1深度定制(包括kernel)、uboot定制、开机LOGO/动画定制、多屏显示几个方面学习RK3399,其中应用层以显示系统(我是做Android显示的)为主,其他功能为辅。

1 准备工作

      1  首先准备ubuntu系统、sourceInsight等工具,配置自己熟悉的系统环境;

      2 然后熟悉RK3399架构、寄存器与指令集、电路图、芯片手册等。

      3 官方使用手册:RK3399  官网wiki  Android8.1源码在线

      相关资料:ARMv8架构  ARMv8指令集 RK3399裸机开发

2 开发工具

2.1 SourceInsight4.0

(1) 护眼背景

     Options-->Preferences-->Colors & Fonts-->Windows Background里面设置:

     色调:85;饱和度:123;亮度:205,

     R:     199;         G:    237;       B:   204;

2.2 VirtualBox

    我用的VirtualBox虚拟机软件装的ubuntu18,因为他是免费的,并且操作简单,可以在官网下载。然后使用mobaXterm作为终端通过ssh连接ubuntu。virtualBox安装扩展包 

2.3 FillZilla

    tftp文件传输软件,虽然mobaXterm也有这个功能,但比较慢,推荐这个,在没法使用共享文件夹的时候用这个。VirtualBox可以创建共享文件夹,但我没搞好,用的samba共享文件夹。

2.4 github

可以使用CSDN免费的github: github

git clone https://codechina.csdn.net/ZHUYJUN/rk3399.git

git add .

git commit -m "Initial commit"

git push -u origin master

2.5 刷机工具

windows: AndroidTool

Android8.1使用的是RK固件,parameter.txt 文件来定义分区,使用脚本show_rk_parameter.sh读取源码分区:

show_rk_parameter.sh device/rockchip/rk3399/parameter.txt

Rockusb Mode
--------
NAME                 OFFSET     LENGTH
uboot                0x00002000 0x00002000
trust                0x00004000 0x00002000
misc                 0x00006000 0x00002000
resource             0x00008000 0x00008000
kernel               0x00010000 0x00010000
boot                 0x00020000 0x00010000
recovery             0x00030000 0x00020000
backup               0x00050000 0x00038000
security             0x00088000 0x00002000
cache                0x0008a000 0x00100000
system               0x0018a000 0x00500000
metadata             0x0068a000 0x00008000
vendor               0x00692000 0x00100000
oem                  0x00794000 0x00100000
frp                  0x00894000 0x00000400
userdata             0x00894400 -

Maskrom Mode
--------
NAME                 OFFSET     LENGTH
uboot                0x00004000 0x00002000
trust                0x00006000 0x00002000
misc                 0x00008000 0x00002000
resource             0x0000a000 0x00008000
kernel               0x00012000 0x00010000
boot                 0x00022000 0x00010000
recovery             0x00032000 0x00020000
backup               0x00052000 0x00038000
security             0x0008a000 0x00002000
cache                0x0008c000 0x00100000
system               0x0018c000 0x00500000
metadata             0x0068c000 0x00008000
vendor               0x00694000 0x00100000
oem                  0x00796000 0x00100000
frp                  0x00896000 0x00000400
userdata             0x00896400 -

 脚本代码:

#!/bin/sh

PARAMETER_FILE="$1"
[ -f "$PARAMETER_FILE" ] || { echo "Usage: $0 <parameter_file>"; exit 1; }

show_table() {
    echo "$1"
    echo "--------"
    printf "%-20s %-10s %s\n" "NAME" "OFFSET" "LENGTH"
    for PARTITION in `cat ${PARAMETER_FILE} | grep '^CMDLINE' | sed 's/ //g' | sed 's/.*:\(0x.*[^)])\).*/\1/' | sed 's/,/ /g'`; do
        NAME=`echo ${PARTITION} | sed 's/\(.*\)(\(.*\))/\2/'`
        START=`echo ${PARTITION} | sed 's/.*@\(.*\)(.*)/\1/'`
        LENGTH=`echo ${PARTITION} | sed 's/\(.*\)@.*/\1/'`
        START=$((START + $2))
        printf "%-20s 0x%08x %s\n" $NAME $START $LENGTH
    done
}

show_table "Rockusb Mode" 0
echo
show_table "Maskrom Mode" 0x2000

linux:rkdeveloptool / upgrade_tool   // 刷机前要进入刷机模式

sudo upgrade_tool ul bootloader.bin # 烧写 bootloader
sudo upgrade_tool di -p paramater   # 烧写 parameter
sudo upgrade_tool di -uboot uboot.img
sudo upgrade_tool di -trust trust.img
sudo upgrade_tool di -m misc.img
sudo upgrade_tool di -baseparameter baseparameter.img
sudo upgrade_tool di -b boot.img  // Android 内核的内存启动盘 (initrd),是内核启动后最先加载的根文件系统
sudo upgrade_tool di -k kernel.img  // Android 内核
sudo upgrade_tool di -resource/-re resource.img  // 资源映像,内有内核开机图片和内核设备树信息 (Device Tree Blob)
sudo upgrade_tool di -r recovery.img
sudo upgrade_tool di -s system.img
sudo upgrade_tool di -vendor vendor.img
sudo upgrade_tool di -oem oem.img

备注:编译kernel会生成boot.img kernel.img 和 resource.img,但修改驱动一般只烧写kernel.img

官方Android8.1固件分区表:

2.6 Android编译方法

Android8.1编译

./FFTools/make.sh -k -j8 # 单独编译kernel

./FFTools/make.sh -u -j8 # 单独编译uboot

./FFTools/make.sh -a -j8 # 单独编译android上层

./FFTools/make.sh -j8 # 同时编译ubooot、kernel、android

2.7 解包RK固件

 安装解包软件:

git clone https://github.com/TeeFirefly/rk2918_tools.git
cd rk2918_tools
make
sudo cp afptool img_unpack img_maker mkkrnlimg /usr/local/bin

  解包官方固件:

$ cd /path/to/your/firmware/dir
$ img_unpack Firefly-RK3399_20161027.img img
rom version: 6.0.1
build time: 2016-10-27 14:58:18
chip: 33333043
checking md5sum....OK

  解包update.img:

$ cd img
$ afptool -unpack update.img update
Check file...OK
------- UNPACK -------
package-file             0x00000800    0x00000280
Image/MiniLoaderAll.bin  0x00001000    0x0003E94E
Image/parameter.txt      0x00040000    0x00000350
Image/trust.img          0x00040800    0x00400000
Image/uboot.img          0x00440800    0x00400000
Image/misc.img           0x00840800    0x0000C000
Image/resource.img       0x0084C800    0x0003FE00
Image/kernel.img         0x0088C800    0x00F5D00C
Image/boot.img           0x017EA000    0x0014AD24
Image/recovery.img       0x01935000    0x013C0000
Image/system.img         0x02CF5000    0x2622A000
RESERVED                 0x00000000    0x00000000
UnPack OK!

2.8 合成RK固件[1]

(1) 合成 update.img :

# 当前的目录仍然为 update/ ,内有 package-file, package-file 所列的文件均存在
# 将参数文件拷贝一份到 paramter, 因为 afptool 默认要用到
$ cp Image/parameter.txt parameter
$ afptool -pack . ../update_new.img
------ PACKAGE ------
Add file: ./package-file
Add file: ./Image/MiniLoaderAll.bin
Add file: ./Image/parameter.txt
Add file: ./Image/trust.img
Add file: ./Image/uboot.img
Add file: ./Image/misc.img
Add file: ./Image/resource.img
Add file: ./Image/kernel.img
Add file: ./Image/boot.img
Add file: ./Image/recovery.img
Add file: ./Image/system.img
Add file: ./RESERVED
Add CRC...
------ OK ------
Pack OK!

(2) 合成 release_update.img :

$ img_maker -rk33 loader.img update_new.img release_update_new.img
generate image...
append md5sum...
success!

参考资料:

[1] 定制Android

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值