$mkdir androidrepo && cd androidrepo
$repo repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread --mirror
$cp ....../default.xml ./.repo/manifests/default.xml
$repo sync
為了保險起見,先把他 tar 起來˙˙ ˙
$cd ..
$tar zcvf myandroidrepo.tar.gz myandroidrepo
接著 clone kernel 和 uboot..follow user guide, 把 kernel 和 uboot 分開 mirror
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.35.y.git --mirrot
還有git clone git://git.denx.de/u-boot.git --mirrot
server 部份先作到這裡,接下來要從 client 來修改 server 的內容 (因為 server 的 repo 是用 --mirror option clone 的)
修改 manifest.git/default.xml
$git clone git://server/androidrepo/platform/manifest.git -b gingerbread
照剛剛server 的作法作一次,好 update default.xml$cp ../code/r10.1/default.xml manifest/default.xml
branch 出來作mark$git checkout -b freescale
$git commit -am 'use freescale default.xml
$git push origin freescale
接著改為local,同樣 branch 一次(因為 repo init -u 只能由 -b 選擇 manifest.xml 的 branch,不能選rev,所以要這樣每次都 branch 一次)
$git checkout -b freescaleLocal
修改 default.xml,把 remote 改為 local: <remote name="korg"
fetch="git://server/androidrepo/"
review="review.source.android.com" /&g
commit & push 回去$git commit -am 'use local server'
$git push origin freescaleLocal
OK, 現在 client 可以開始作 repo sync..
$mkdir myandroid && cd myandroid
$repo init -u git://server/androidrepo/platform/manifest.git -b freescaleLocal
$repo sync
為了把每一個 step 都紀錄起來,最好隨著 manifest.xml 的版本變更,增加對應的 project code branch。
現在作一個 branch -- justsync, 要改 source 跟 manifest.xml
$repo forall -c 'git checkout -b justsync'
update server$repo forall -c 'git push korg justsync
修改 manifest..先到外面..clone
$git clone git://server/androidrepo/platform/manifest.git -b freescaleLocal
新增 justsync , 修改 manifest.xml$cd manifest
$git checkout -b justsync
修改 default.xml,把 default rev 改. <default revision="justsync"
remote="korg" />
並且把下面所有 project 有 revision 的部份刪掉.commit, push 到 serve
$git commit -am 'use justsync as default rev'
$git push origin justsync
接著clone kernel, uboot 到對應位置, follow user guide, checkout v2.6.35.3 出來
$git clone git://serer/linux-2.6.35.y.git kernel_imx
$git checkout v2.6.35.3
cd .....
$git clone git://server/u-boot.git uboot-imx
為求一致,都 branch 一個 justsync ,push 到 server$ git checkout -b justsync
$ git push origin justsync
kernel_imx, uboot-imx 都要作一次。到此,所有 git project 都在 justsync 上了。
以後 checkout justsync,就可以回到 repo sync 後的 code 狀態。
上 vendor patch..
$ c_patch ~/home/myhome/imx-android-r10.1/code/r10.1 imx_r10.1
vendor patch 會 對所有 patch 過的 project 產生 imx_r10.1 這個 branch。同時還會新增一些 folder...
做完 patch ,先把有在 repo manifest管理的 project 都 create imx_r10.1 出來,push 到 server.
$repo forall -c 'git checkout -b imx_r10.1'
$repo forall -c 'git push korg imx_r10.1'
kernel, bootloader 也要這樣作,push 回去
$git push origin imx_r10.1
做完patch 後,用上次寫的python script : searchcompare.py,找出哪些 folder 不在 manifest.xml 的管轄內。
要手動加回去,還要 mirror 到 server 裡。
$python searchcompare.py
./kernel_imx
./system/dispd
./system/wlan/atheros
./packages/apps/fsl_imx_demo
./device/fsl
./hardware/mx5x
./bootable/bootloader/uboot-imx
./external/linux-atheros-wifi
./external/systemtap
./external/linux-firmware-imx
./external/wpa_supplicant_ath
./external/linux-lib
所以除了 kernel_imx, bootable/bootloader/uboot-imx 以外,都要作到 server 去,su 成 git,到 git-daemon 的 repo 位置, androidrepo 下,到對應的 folder。
以 dispd 為例
$cd platform/system
$git clone --mirror /home/myhome/myandroid/system/dispd
10 個都做,這樣 server repo 就做好。--- 現在 server repo 裡有所有 patch 後的 code,在 imx_r10.1 裡。
然後是修改 manifest..
1. 把沒有在 manifest.xml 裡的 project 加進去
2. 把 default rev 改為 imx_r10.1
先 branch 出來
$git checkout -b imx_r10.1
修改 default.xmldiff:
diff --git a/default.xml b/default.xml
index fcdbc50..8670e1e 100644
--- a/default.xml
+++ b/default.xml
@@ -3,7 +3,7 @@
<remote name="korg"
fetch="git://gps1004/myandroid10.1/"
review="review.source.android.com" />
- <default revision="justsync"
+ <default revision="imx_r10.1"
remote="korg" />
<project path="build" name="platform/build">
@@ -174,4 +174,14 @@
<project path="hardware/alsa_sound" name="platform/hardware/alsa_sound" />
<project path="external/alsa-utils" name="platform/external/alsa-utils" />
<project path="external/mtd-utils" name="platform/external/mtd-utils" />
+ <project path="device/fsl" name="device/fsl" />
+ <project path="external/linux-atheros-wifi" name="platform/external/linux-atheros-wifi" />
+ <project path="external/linux-firmware-imx" name="platform/external/linux-firmware-imx" />
+ <project path="external/linux-lib" name="platform/external/linux-lib" />
+ <project path="external/wpa_supplicant_ath" name="platform/external/wpa_supplicant_ath" />
+ <project path="external/systemtap" name="platform/external/systemtap" />
+ <project path="hardware/mx5x" name="platform/hardware/mx5x" />
+ <project path="system/dispd" name="platform/system/dispd" />
+ <project path="system/wlan/atheros" name="platform/system/wlan/atheros" />
+<
</manifest>
commit, push/create 到 server$git commit -am 'use imx_r10.1 as default and add newly added project'
$git push origin imx_r10.1
試著從 predownload 的 working directory 來作,看看能不能減少 localize repo server 的 repo sync 時間。
不行.. 因為 repo 的 project path 和 project name 不一樣,
也就是說 有用 --mirror option 作repo sync 出來的 repo folderstructure 和實際 checkout 出來的不一樣,
所以 manifest.xml 不能用。
沒有留言:
張貼留言