使用rockchip sdk二次开发,代码十几个G,都放在一个git仓库的话,每次git status要等好久,决定拆分一下,官方是用repo做代码管理的,我打算也搭建个类似开发环境。
1.首先在git服务器上创建一个manifest仓库,按照官方manifest规范配置自己用到的项目仓库。这里我创建了3个配置,一个是常用来编译发布镜像的;一个是编译调试内核和uboot的;还有一个是下载完整SDK的,这个基本上用不上,只是给SDK做了个备份。
2.把SDK每个子目录建成一个单独仓库上传到git服务器。有些仓库我做了分支,比如prebuilts里面的工具链我只用到了aarch64版本,没有必要全部同步到本地。有些仓库只是子目录的一部分,比如buildroot/support。我的项目用的是自己做好的ubuntu20,不需要buildroot全部代码,但是编译镜像的时候依赖他们。
3.使用repo命令同步自己仓库。编译的时候发现还是有问题,recovery.img、oem.img和userdat.img生成还是需要编译buildroot。自己动手改了一下device/rockchip/common/script目录下的编译脚本,删除这部分依赖。
4.repo命令每次init的时候总是去google下载最新版本,没有代理容易卡死报错,我自己封装了一层附上脚本代码:
#!/bin/bash
ROOT_DIR=`pwd`
MENIFEST_FILE="default.xml"
REPO_FILE=$HOME/.repo/repofunction usage()
{
echo " "
echo "usage: repo fpad [menifest.xml] [fpad_dir]"
echo " "
echo "******************* or *******************"
echo " "
which repo > /dev/null 2>&1
if [ $? -eq 0 ]; then
repo --help
fi
}function download_repo()
{
if [ -e $REPO_FILE ]; then
rm $REPO_FILE
fi
if [ ! -e $HOME/.repo ]; then
mkdir $HOME/.repo
ficurl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o $REPO_FILE
sed -i "s/\#\!\/usr\/bin\/env python$/\#\!\/usr\/bin\/env python3/g" $REPO_FILE
chmod +x $REPO_FILE
}function replace_repo()
{
local NEW_REPO=$1
if [ -e $REPO_FILE ]; then
rm $REPO_FILE
fi
echo "release repo from $NEW_REPO"
cp $NEW_REPO $REPO_FILE
sed -i "s/\#\!\/usr\/bin\/env python$/\#\!\/usr\/bin\/env python3/g" $REPO_FILE
chmod +x $REPO_FILE
}function download_project()
{
local DOWNLOAD_DIR=$1
if [ -e $DOWNLOAD_DIR -a $ROOT_DIR != $DOWNLOAD_DIR ]; then
echo "remove old project repo: $DOWNLOAD_DIR"
rm -rf $DOWNLOAD_DIR
fi
if [ ! -e $DOWNLOAD_DIR ]; then
mkdir -p $DOWNLOAD_DIR
cd $DOWNLOAD_DIR
fi
echo "start to sync repo to $DOWNLOAD_DIR ... ..."
repo init -u ssh://git@gitee.com/rk3588/manifest.git -m $MENIFEST_FILE
replace_repo $DOWNLOAD_DIR/.repo/repo/repo
repo sync -c
repo start main --all
}if [ $# -lt 1 ]; then
echo "too few args."
usage
exit 1;
fiif [ ! -e $REPO_FILE ]; then
echo "downlaod repo command file."
download_repo
fiexport REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
export PATH=$HOME/.repo/:$PATHif [ $1 == "project" ]; then
case $# in
1)
download_project $ROOT_DIR
;;
2)
MENIFEST_FILE="$2.xml"
echo "manifest file: $MENIFEST_FILE"
download_project $ROOT_DIR
;;
3)
MENIFEST_FILE="$2.xml"
download_project $3
;;
*)
echo "too many args."
usage
exit 1;
;;
esac
else
repo $@
if [ $1 == "init" -a -e .repo/repo/repo ];then
replace_repo .repo/repo/repo
fi
fi