使用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
?? ?fi?? ?curl 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