这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » RK3568平台软件开发指南

共1条 1/1 1 跳转至

RK3568平台软件开发指南

高工
2026-02-20 15:54:30     打赏
Rockchip Android 11.0 SDK开发指南


Rockchip Android 11.0 SDK代码下载编译
代码下载
下载地址
服务器镜像下载
注,repo是google用Python脚本写的调用git的一个脚本,主要是用来下载、管理Android项目的软件
仓库,其下载地址如下:
repo init --repo-url=ssh://git@www.rockchip.com.cn:2222/repo-
release/tools/repo.git -u
ssh://git@www.rockchip.com.cn:2222/Android_R/manifests.git -m Android11.xml
repo init --repo-url=ssh://git@www.rockchip.com.cn:2222/repo-
release/tools/repo.git -u
ssh://git@www.rockchip.com.cn:2222/Android_R/manifests.git -m Android11.xml --
mirror
git clone ssh://git@www.rockchip.com.cn:2222/repo-release/tools/repo

代码编译
一键编译命令
各个平台编译命令汇总
git merge android-11.0-mid-rkr8
git push rk29 local_xxx_branch:xxx_branch
./build.sh -UKAup
( WHERE: -U = build uboot
   -C = build kernel with Clang
   -K = build kernel
   -A = build android
   -p = will build packaging in IMAGE
   -o = build OTA package
   -u = build update.img
   -v = build android with 'user' or 'userdebug'
   -d = huild kernel dts name
   -V = build version
   -J = build jobs
------------大家可以按需使用,不用记录uboot/kernel编译命令了------------------

============================================================
请注意使用一键编译命令之前需要设置环境变量,选择好自己需要编译的平台,举例:
source build/envsetup.sh
lunch rk3566_rgo-userdebug
============================================================

其他编译说明
Android11.0不能直接烧写kernel.img和resource.img
Android11.0的kernel.img和resource.img包含在boot.img中,需要使用build.sh -K 命令来编译
kernel。编译后烧写rockdev下面的boot.img。也可以使用如下方法单独编译kernel。
单独编译kernel生成boot.img
编译的原理:在kernel目录下将编译生成的 kernel.img 和 resource.img 替换到旧的 boot.img 中。
以 RK3566 样机为例,编译时替换对应的boot.img及dts:
其中 BOOT_IMG=../rockdev/Image-rk3566_r/boot.img 这里指定的是旧的boot.img的路径,命令如
下:
编译后可以直接烧写kernel目录下的boot.img(注意:32bit的平台是zboot.img,如3126c/rk3288w)
到机器的boot位置,烧写时请先加载分区表(parameter.txt),以免烧写位置错误。

固件烧写
固件烧写工具
Android11的USB驱动DriverAssitant需要更新到V5.1.1版本,可以参考下面的工具章节进行更新。
Windows烧写工具:(工具是时刻更新,请及时同步更新)
在下文工具说明章节有详细说明
固件说明
完整编译后会生成如下文件:(以RK3566为例,这里lunch的是rk3566_rgo-userdebug)
cd kernel
make ARCH=arm64 rockchip_defconfig android-11.config
make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3566_r/boot.img rk3566-rk817-
tablet.img -j24
RKTools/windows/AndroidTool/AndroidTool_Release_v2.84


固件说明



fastboot烧写动态分区
R的新设备支持动态分区,已经移除了system/vendor/odm/product/system_ext分区,请烧写
super.img,单独烧写system/vendor/odm等(可以在out下面找到对应img文件)可以用
fastbootd ,要求adb和fastboot版本均为最新,SDK提供了编译好的工具包:
使用命令烧写动态分区:
注:进入fastbootd模式后,屏幕上会显示相关设备信息,如图所示:

新建产品dts

产品新建dts可以根据下表的配置选择对应的dts作为参考。

poYBAGP-qwCAbj4iAAokET1UKTg881.png

针对以上开发板我们编写如下脚本:
#!/bin/bash -e

if [ -z "${BASH_SOURCE}" ];then
        echo Not in bash, switching to it...
        bash -c "$0 $@"
fi

function choose_board()
{
        echo
        echo "You're building on Linux"
        echo "Lunch menu...pick a combo:"
        echo ""

        echo "0. non-rockchip boards"
        echo ${RK_DEFCONFIG_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/
/. /"

        local INDEX
        while true; do
                read -p "Which would you like? [0]: " INDEX
                INDEX=$((${INDEX:-0} - 1))

                if [ "$INDEX" -eq -1 ]; then
                        echo "Lunching for non-rockchip boards..."
                        unset TARGET_OUTPUT_DIR
                        unset RK_BUILD_CONFIG
                        break;
                fi

                if echo $INDEX | grep -vq [^0-9]; then
                        RK_BUILD_CONFIG="${RK_DEFCONFIG_ARRAY[$INDEX]}"
                        [ -n "$RK_BUILD_CONFIG" ] && break
                fi

                echo
                echo "Choice not available. Please try again."
                echo
        done
}

function lunch_rockchip()
{
        TARGET_DIR_NAME="$RK_BUILD_CONFIG"
        export TARGET_OUTPUT_DIR="$BUILDROOT_OUTPUT_DIR/$TARGET_DIR_NAME"

        mkdir -p $TARGET_OUTPUT_DIR || return

        echo "==========================================="
        echo
        echo "#TARGET_BOARD=`echo $RK_BUILD_CONFIG | cut -d '_' -f 2`"
        echo "#OUTPUT_DIR=output/$TARGET_DIR_NAME"
        echo "#CONFIG=${RK_BUILD_CONFIG}_defconfig"
        echo
        echo "==========================================="

        make -C ${BUILDROOT_DIR} O="$TARGET_OUTPUT_DIR"
                "$RK_BUILD_CONFIG"_defconfig

        CONFIG=${TARGET_OUTPUT_DIR}/.config
        cp ${CONFIG}{,.new}
        mv ${CONFIG}{.old,} &>/dev/null || return 0

        make -C ${BUILDROOT_DIR} O="$TARGET_OUTPUT_DIR" olddefconfig &>/dev/null

        if ! diff ${CONFIG}{,.new}; then
                read -t 10 -p "Found old config, override it? (y/n):" YES
                [ "$YES" = "n" ] || cp ${CONFIG}{.new,}
        fi
}

function main()
{
        SCRIPT_PATH=$(realpath ${BASH_SOURCE})
        SCRIPT_DIR=$(dirname ${SCRIPT_PATH})
        BUILDROOT_DIR=$(dirname ${SCRIPT_DIR})
        BUILDROOT_OUTPUT_DIR=${BUILDROOT_DIR}/output
        TOP_DIR=$(dirname ${BUILDROOT_DIR})
        echo Top of tree: ${TOP_DIR}

        RK_DEFCONFIG_ARRAY=(
                $(cd ${BUILDROOT_DIR}/configs/; ls rockchip_* |
                        sed "s/_defconfig$//" | grep "$1" | sort)
        )

        unset RK_BUILD_CONFIG
        RK_DEFCONFIG_ARRAY_LEN=${#RK_DEFCONFIG_ARRAY[@]}

        case $RK_DEFCONFIG_ARRAY_LEN in
                0)
                        echo No available configs${1:+" for: $1"}
                        ;;
                1)
                        RK_BUILD_CONFIG=${RK_DEFCONFIG_ARRAY[0]}
                        ;;
                *)
                        if [ "$1" = ${RK_DEFCONFIG_ARRAY[0]} ]; then
                                # Prefer exact-match
                                RK_BUILD_CONFIG=$1
                        else
                                choose_board
                        fi
                        ;;
        esac

        [ -n "$RK_BUILD_CONFIG" ] || return

        source ${TOP_DIR}/device/rockchip/.BoardConfig.mk

        lunch_rockchip

        # Set alias
        alias croot="cd ${TOP_DIR}"
        alias broot="cd ${BUILDROOT_DIR}"
        alias bpkg="cd ${BUILDROOT_DIR}/package"
        alias bout="cd ${TARGET_OUTPUT_DIR}"
}

if [ "${BASH_SOURCE}" == "$0" ];then
        echo This script is executed directly...
        bash -c "source "$0" "$@"; bash"
else
        main "$@"
fi





关键词: RK3568     软件     开发指南    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]