代码下载
下载地址
服务器镜像下载
注,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作为参考。

针对以上开发板我们编写如下脚本:
#!/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
我要赚赏金
