Submitted by admin on 2011, July 19, 11:47 AM
Submitted by admin on 2011, July 19, 11:39 AM
1. 说明 1) 下载编译最基本的android源码,无法在真机上使用(不能生成boot.img),只能在模拟器上使用。这是因为没有编译相关机型的内核和硬件驱动。以下介绍的是用android源码编译出对应HTC G1的版本,和烧写的过程。编译生成的版本除相机不能用之外,其它绝大部分功能都能正常使用,在G1上运行2.1版的速度也不错。 2) 本文主要参考日文文档G1/G2烧机指南,感谢原文作者,原文地址: 3) 以下步骤都经过验证(只验证G1手机,G2部分请参见日文文档),实验系统ubuntu8.04,实验日期2010年5月8日 4) 关键字: android 2.1 eclair g1 源码编译 2. 建立android源码编译目录 3. 源码下载 4. 打补丁以支持动态壁纸(此为步骤为可选) 5. 编译内核及无线网络驱动 6. 编译android源码 7. 把编译好的软件烧写到手机 8. 参考 1) 刷写部分未详细描述,具体请参考文档 2) 源码编译部分未详细描述,具体请参考文档
http://code.google.com/p/android-development-environment/wiki/EclaironADP1andADP2
同时加入中文系统的支持和JIT支持(提高速度),以及相关文字解释。
$ export ANDROID=/exports/android/android_2.1_cn/
$ mkdir -p $ANDROID
$ cd $ANDROID
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.1_r2 #设定下载 2.1版代码
$ vi .repo/local_manifest.xml # 新建下载配置文件
编辑内容如下
<?xml version=”1.0″ encoding=”UTF-8″?>
<manifest>
<project path=”kernel” name=”kernel/msm” revision=”refs/heads/android-msm-2.6.29-donut”/>
<project path=”vendor/htc/common-open” name=”platform/vendor/htc/common-open” revision=”master”/>
<project path=”vendor/htc/dream-open” name=”platform/vendor/htc/dream-open” revision=”master”/>
<project path=”vendor/htc/prebuilt-open” name=”platform/vendor/htc/prebuilt-open” revision=”master”/>
<project path=”vendor/htc/sapphire-open” name=”platform/vendor/htc/sapphire-open” revision=”master”/>
<project path=”vendor/qcom/android-open” name=”platform/vendor/qcom/android-open” revision=”master”/>
<project path=”vendor/qcom/proprietary-open” name=”platform/vendor/qcom/proprietary-open” revision=”master”/>
<project path=”vendor/pv-open” name=”platform/vendor/pv-open” revision=”master”/>
<project path=”vendor/aosp” name=”platform/vendor/aosp” revision=”master”/>
<project path=”hardware/htc/dream” name=”platform/hardware/htc/dream” revision=”master”/>
</manifest>
注意:其中msm是高通芯片组,path指明下载到源码目录中的位置,name指明git上的项目名
$ repo sync # 开始下载代码,此时需要等待较长时间
$ wget http://android-development-environment.googlecode.com/files/patch_devphone_eclair.tar.gz
$ tar zxvf patch_devphone_eclair.tar.gz
$ ./patch/eclair-build-patch.sh
$ cd $ANDROID/kernel
$ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- msm_defconfig # 设定默认的msm配置
$ vi .config # 修改新生成的配置文件,以重新设置CPU最高频率,修改如下:
修改CONFIG_MSM_CPU_FREQ_ONDEMAND_MAX项为CONFIG_MSM_CPU_FREQ_ONDEMAND_MAX=528000
$ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- #编译内核
$ cd $ANDROID/system/wlan/ti/sta_dk_4_0_4_32
$ make ARCH=arm CROSS_COMPILE=$ANDROID/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- KERNEL_DIR=$ANDROID/kerne l #编译无线网络驱动
$ cp $ANDROID/kernel/arch/arm/boot/zImage $ANDROID/vendor/htc/dream-open/kernel
$ cp $ANDROID/system/wlan/ti/sta_dk_4_0_4_32/wlan.ko $ANDROID/vendor/htc/dream-open/wlan.ko
在HTC网站http://developer.htc.com/adp.html
下载名为signed-dream_devphone_userdebug-ota-14721.zip的包,并把它放在$ANDROID目录下
$ cd $ANDROID
$ source build/envsetup.sh
$ lunch aosp_dream_us-eng # 指明机型
$ cd vendor/htc/dream-open
$ ./unzip-files.sh # 解压htc相关驱动
$ cd $ANDROID
$ vi buildspec.mk # 新建配置文件
加入如下内容
CUSTOM_LOCALES:=zh_CN # 设置编译为中文系统
WITH_JIT:=true # 加入JIT支持,使得运算速度加快1-2倍
$ make -j2 # 编译android源码,需要等待较长时间
用usb线连接手机到电脑,按home+power键将手机启动到工程模式,按back键准备烧写
$ export PATH=$PATH:$ANDROID/out/host/linux-x86/bin # 把烧写工具所在目录加上路径
$ cd out/target/product/dream-open/
$ fastboot flash system system.img
$ fastboot flash boot boot.img
$ fastboot reboot
烧写系统后第一次启动手机需要几分钟,请耐心等待
http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1452.entry
http://xy0811.spaces.live.com/blog/cns!F8AECD2A067A6B17!1364.entry
Submitted by admin on 2011, July 19, 10:36 AM
1. 软盘上安装引导器(grub)
一般制作软盘上跑的Linux引导器都使用sysLinux这个工具(这个工具不支持ext2分区格式,只能支持fat分区格式),因为我对grub比较熟悉,并且我在软盘上安装grub只用了132KB空间,不是很耗磁盘空间。
具体操作如下:
# mke2fs /dev/fd0
创建了 ext2 文件系统后,需要安装该文件系统:
# mount /dev/fd0 /mnt/floppy
现在,需要创建一些目录,并将一些关键文件(原先安装 GRUB 时已安装了这些文件)复制到软盘:
# mkdir /mnt/floppy/boot
# mkdir /mnt/floppy/boot/grub
# cp /boot/grub/stage1 /mnt/floppy/boot/grub
# cp /boot/grub/stage2 /mnt/floppy/boot/grub
再有一个步骤,就能得到可用的引导盘。
在Linux bash中,从 root 用户运行“grub”,该程序非常有趣并值得注意,因为它实际上是 GRUB 引导装入器的半功能性版本。尽管 Linux 已经启动并正在运行,您仍可以运行 GRUB 并执行某些任务,而且其界面与使用 GRUB 引导盘或将 GRUB 安装到硬盘 MBR 时看到的界面(即GRUB控制台)完全相同。
在 grub> 提示符处,输入:
grub> root (fd0)
grub> setup (fd0)
grub> quit
现在,引导盘完成了。
2. 安装根文件系统
一套Linux系统要正常启动,根文件系统要包括下列文件夹:
/bin /etc /proc /tmp /var /dev /mnt
要包括下列基本的设备文件:
/dev/console /dev/fd0 /dev/null /dev/ram0 /dev/tty /dev/tty0
要包括下列配置文件:
/etc/rc.d/inittab /etc/rc.d/rc.sysinit /etc/fstab
要实现基本的功能,还要包括一些常用工具:如:sh,ls,cd,cat等。其中,前面三个部分不要多少空间的,但是常用工具会占用很多空间,要是用原来系统中的这些命令,就是全部用静态编译,不是用动态连接库,大概有2MB~3MB,放不进软盘。网络上解决的方案是使用BusyBox工具。具体可以到官方网站:www.busybox.net看看。下载BusyBox工具的源代码。
注意:
(1) 译的时候要静态编译,修改 Makefile 中的 DOSTATIC 参数,从false 改为 true,这样,编译出来的代码就不要依赖glibc了。
(2) 因为我们用的是 BusyBox 上的 init,与一般所使用的 init 不太一样,会先执行 /etc/init.d/rcS 而非 /etc/rc.d/rc.sysinit,为了做出来的 FloppyLinux 架构与 Redhat 的架构一样,所以修改了 BusyBox 中的 init.c底下是修到的部分内容∶
#ifndef INIT_SCRIPT
#define INIT_SRCIPT "/etc/rc.d/rc.sysinit"
#endif
具体操作如下:
(1) 官方网站上下载BusyBox的最新版本:busybox-0.60.5.tar.gz解开,按照上面的注意点修改源代码。
(2) 运行下列命令:
#make
#make install
(3) 译好的可势行文件放在 ./_install 文件夹里的。
#cp ./_install /tmp/floppy-Linux -r
(4) 动建立其它的文件或文件夹:
#cd /tmp/floppy-Linux
# mkdir dev etc etc/rc.d proc mnt tmp var
# chmod 755 dev etc etc/rc.d bin mnt tmp var
# chmod 555 proc
# cd dev
# mknod tty c 5 0
# mknod console c 5 1
# chmod 666 tty console
# mknod tty0 c 4 0
# chmod 666 tty0
# mknod ram0 b 1 0
# chmod 600 ram0
# mknod fd0 b 2 0
# chmod 600 fd0
# mknod null c 1 3
# chmod 666 null
(5) 建启动配置文件:(inittab,rc.sysinit,fstab)
initab:
::sysinit:/etc/rc.d/rc.sysinit
::askfirst:/bin/sh
rc.sysinit:
#!/bin/sh
[1] [2] 下一页
mount -a
# chmod 755 rc.sysinit
fstab:
proc /proc proc defaults 0 0
(6) 作Ramdisk的镜像文件:
# dd if=/dev/zero of=/tmp/initrd bs=1k count=4096
# losetup /dev/loop0 /tmp/initrd
# mke2fs -m 0 /dev/loop0>
# mount -t ext2 /dev/loop0 /mnt
# cp -r /tmp/floppy-Linux/* /mnt
# umount /mnt
# losetup -d /dev/loop0
# dd if=/tmp/initrd gzip -9 > /tmp/initrd.gz
# rm -f /tmp/initrd
# sync
3.编译内核:
这部分内容不详细讲述,主要是去掉了一些不需要的选项,减小内核,编译出来的内核是725920Byte。里面包含了必要的网卡驱动和网络协议栈。
4.整合启动盘
现在所用到了的东西全部搞好了,下面就是整合一下:
全部文件(文件夹)如下:
/lost+found/
/boot/
/boot/grub/
/boot/grub/stage1 =========èGrub启动时用到的两个文件
/boot/grub/stage2
/boot/grub/menu.lst =========èGrub的配置文件指向grub.conf
/boot/grub/grub.conf
/boot/kernel =============è内核
/initrd.gz ===============è内存镜像文件
这样这张软盘就能启动一套Linux系统了,占用1.213MB。
Submitted by admin on 2011, July 17, 10:43 PM
rysnc是一个数据镜像及备份工具,具有可使本地和远程两台主机的文件,目录之间,快速同步镜像,远程数据备份等功能。在同步过程中,rsync是根据自己独特的算法,只同步有变化的文件,甚至在一个文件里只同步有变化的部分,所以可以实现快速的同步数据的功能。
第一种:依赖ssh服务同步目录
rsync -aSvH /home/N22/test1/* /home/N22/test2/
参数解释:
a 等同于 -rlptgoD 归档模式,就是保持文件所有属性、权限不变
S 有效的处理零散文件
v verbose模式
H 保持hard links
上面这个表示 将本机的/home/N22/test1/目录下所有的文件,同步到/home/N22/test2/目录下。这种方式我只能同步新增和更新,不能同步删除,不知道原因,修改为
rsync -aSvH –delete /home/N22/test1/* /home/N22/test2/
时,虽然添加了delete仍然不能同步删除的文件。
和其它服务器同步时,需要账户和密码:rsync -aSvH /home/* root@192.168.1.1:/home/
第二种:服务器和客户端
经过测试,这种服务器和客户端的配置能完美解决删除文件和目录的同步功能。
服务器端配置:
1、rysnc一般是通过xinetd进行启动的。
修改/etc/xinetd.d/rsync,只修改一个地方
# default: off
# description: The rsync server is a good addition to am ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = yes 修改为disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon
log_on_failure += USERID
}
2、接下来编辑配置文件
[root@mailsvr ~] # vi /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[web]
path = /opt/web
ignore errors
read only = true
list = false
hosts allow = 192.168.0.5 # 允许的IP地址
hosts deny = 0.0.0.0/32 # 禁止的IP 地址
auth users = backup # 认证用户名,此例是 backup
secrets file = /etc/backup.pass #认证用户的密码文件
3、编辑服务器的密码文件 /etc/backup.pass
vi /etc/backup.pass
backup:123456
4、然后设置权限chmod 400 /etc/backup.pass
客户端配置
1. 编辑rsync连接时的密码文件 /etc/rsync_client.pass
vi /etc/rsync_client.pass
123456 # 只需要配置连接时使用的密码即可,必须与A服务器上定义的密码相同.
2. chmod 600 /etc/rsync_client.pass
3. 使用 rsync 命令连接服务器,实现文件同步
rsync -vzrtopg –progress –delete –password-file=/etc/rsync_client.passbackup@192.168.1.2::web /opt/test
4. 使用 –execlude= 排除不需要同步的文件后缀名
rsync -vzrtopg –progress –delete –password-file=/etc/rsync_client.pass –exclude=”*.tmp”backup@192.168.1.2::web /home/test
5. 使用 –execlude-from= 排除不需要同步的目录
rsync -vzrtopg –progress –delete –password-file=/etc/rsync_client.pass –exclude-from=/opt/pcdir backup@192.168.1.2::web /home/test
6、定时同步
#vi rsyncd.sh
rsync -aSvH –delete –password-file=/home/N22/rsync_client.pass backup@192.168.1.252::web /home/N22/test2/
#crontab -e
01 04 * * * /etc/rsyncd.sh
每天凌晨4点01分执行
http://hi.baidu.com/colorsight/blog/item/f0ce3816d874ec104b90a75f.html
Submitted by admin on 2011, July 16, 2:42 PM
一些CentOS等Linux系统启动后可能会出现读进度条等待进入系统的过程,对于学习Linux启动过程非常不利,我们可以将它恢复到显示详细启动过程模式。
使用root用户修改 /boot/grub/grub.conf 文件。
[root@Slyar ~]# vim /boot/grub/grub.conf
找到下面的部分,将"rhgb"去掉,保存即可。其中"rhgb"表示"redhat graphics boot",就是图形进度条模式。而"quiet"表示在启动过程中只显示重要启动信息,类似硬件自检之类的消息不会显示,可以有选择地选用。
kernel /vmlinuz-2.6.32-71.el6.i686 ro root=UUID=697cb0d9-19f6-414a-90a1-5ceb2f40b03d rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
Submitted by admin on 2011, July 16, 1:14 PM
Install DAG GPG key
wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt # download DAG GPG key
rpm --import RPM-GPG-KEY.dag.txt # import the key
rm RPM-GPG-KEY.dag.txt # clean up after ourselves
Install yum-priorities
yum install yum-priorities
Download and install package (i386 - 32bit)
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.i386.rpm # install the rpmforge
yum reporm rpmforge-release-0.3.6-1.el5.rf.i386.rpm # clean up after ourselves
Download and install package (x86_64 - 64bit)
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm # install the rpmforge yum reporm rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm # clean up after ourselves
Set priorities
vim /etc/yum.repos.d/CentOS-Base.repo
[base] or [updates] or [addons] or [extras]
priority=1
[centosplus]
priority=2
vim /etc/yum.repos.d/rpmforge.repo
[rpmforge]
priority=10
------------
1. 下载RPMForge rpm包
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
2. 导入GPG Key:
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
3. 验证安装包:
rpm -K rpmforge-release-0.5.2-2.el5.rf.i386.rpm
显示rpmforge-release-0.5.2-2.el5.rf.i386.rpm: (sha1) dsa sha1 md5 gpg OK,验证成功
4. 验证成功后,开始安装:
rpm -i rpmforge-release-0.5.2-2.el5.rf.i386.rpm
http://repoforge.org/faq/
Submitted by admin on 2011, July 10, 10:12 AM
linux 支持的 tunnel 有 ipip gre sit 其他非内核隧道这几种。
ipip 需要内核模块 ipip.ko 下面的描述说出了ipip的特点。
简单之极!但是你不能通过IP-in-IP隧道转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已。至于兼容性,这部分代码已经有很长一段历史了,它的兼容性可以上溯到1.3版的内核。据我所知,Linux的IP-in-IP隧道不能与其他操作系统或路由器互相通讯。它很简单,也很有效。需要它的时候尽管使用,否则就使用GRE。
GRE 需要内核模块 ip_gre.ko
GRE是最初由CISCO开发出来的隧道协议,能够做一些IP-in-IP隧道做不到的事情。比如,你可以使用GRE隧道传输多播数据包和IPv6数据包。
还有一个 sit 我也不知道这个该不该算在隧道里面,他的作用是连接 ipv4 与 ipv6 的网络,这里也我也把他当作隧道的一种吧。
以上所有隧道都需要内核模块 tunnel4.ko 的支持。
在内核之外,还有很多实现隧道的方法,最闻名的当然要数PPP和PPTP,但实际上还有很多(有些是专有的,有些是安全的,有些甚至根本不用IP。
很多人都把隧道描写成一个专用的管子,我觉得这容易造成理解上的误区,当然你看到的结果的确像在一个专用的管子里那样通讯,我更喜欢把隧道看成一个装在大信封里面的一个小信封和一封信。因为不管理论如何,你的数据包还是要实实在在的,通过现有的网络、路由,一步一步的传送过去,这个是不可能省略掉的。
说了这么多,现在就开始从最基本的 ipip 来手工建立一个隧道。
环境:两台linux服务器,分别在两地。并且两台机器都有实ip与互联网向链接,能够互相通讯。每台机器后面都有带着一个LAN 。
图1
————————————-INTERNET————————————
| 192.168.100.0/24 | 211.167.237.218 <------> 123.127.177.195 |192.168.200.0/24 |
|- – – – | | – – – -|
| eth0 | eth1 | | eth1 | eth0 |
———————————————————————————
结构就是这个样子,现在我们就依据上面的结构来建立 tunnel 。
在 211.167.237.218 上创建:
modprobe ipip
ip tunnel add tun1 mode ipip remote 123.127.177.195 local 211.167.237.218 ttl 64
ip link set tun1 mtu 1480 up
ip address add 192.168.200.253 brd 255.255.255.255 peer 123.127.177.195 dev tun1
ip route add 192.168.200.0/24 via 192.168.200.253
在 123.127.177.195 上创建:
modprobe ipip
ip tunnel add tun1 mode ipip remote 211.167.237.218 local 123.127.177.195 ttl 64
ip link set tun1 mtu 1480 up
ip address add 192.168.100.253 brd 255.255.255.255 peer 211.167.237.218 dev tun1
ip route add 192.168.100.0/24 via 192.168.100.253
上面的命令里出现了几个关键字,需要我们注意的地方:
1、mtu隧道会增加协议开销,因为它需要一个额外的IP包头。一般应该是每个包增加20个字节,所以如果一个网络的MTU是1500字节的话,使用隧道技术后,实际的IP包长度最长只能有1480字节了。这倒不是什么原则性的问题,但如果你想使用隧道技术构建一个比较大规模的网络的话,最好仔细研究一下关于IP包的分片和汇聚的知识。
2、ttl 数据包的生存期。设置为64是安全的。如果你的网络规模巨大就提高这个值。不要因为好玩而这么做,那样会产生有害的路由环路。实际上,在很多情况下你要考虑能否减小这个值。
3、ip 要写对端的内网ip,因为这可以减少vpn服务器不是默认网关的麻烦。对方看到的数据包实际是你本地绑定在 tun1 上的ip地址。
4、设置路由后就可以通讯了。
5、这样你已经可以和 你拨入的机器的内网卡通讯了,为了让你拨入方的其他机器也可以和你通讯,你需要增加一个 arp 的响应机制及打开ip转发功能。
arp -Ds source_ip -i lan_eth pub
sysctl -w net.ipv4.ip_forward=1
让你的内网卡可以响应这个ip的arp回应。
到此为止,一简单的 ip tunnel 已经完成了。当然如果你不想使用 ipip 你更喜欢gre 那你可以在开头简单的改成
moprobe ip_gre
ip tunnel add tun1 mode gre … …
来实现,而后面的参数基本上不需要改变。
上面是一个简单的没有任何加密的隧道建立过程,这样通讯可能会带来安全隐患,毕竟我们访问的是内网吗。
要搞隧道加密就搞ipsec吧,没玩过,ipsec 是一个复杂的东西.
先介绍配置 ipip 隧道
在 /etc/sysconfig/network-scripts 下建立 ifcfg-tunl1 文件
内容如下:
DEVICE=tunl1
TYPE=IPIP
PEER_OUTER_IPADDR=219.216.98.110
MY_INNER_IPADDR=10.0.1.1/24
而配置 gre 隧道就是建立一个 ifcfg-gre1 文件
内容如下:
DEVICE=gre1
TYPE=GRE
PEER_OUTER_IPADDR=219.216.98.110
MY_INNER_IPADDR=10.0.0.1/24
然后使用 ifup tunl1|gre1 则可以了。
转
Submitted by admin on 2011, July 10, 10:11 AM
在linux上用TUN/TAP构建6to4隧道
http://www.lostriver.net/linux-userspace-6to4-tun/
因为Android是由kernel、Dalvik、Bionic、prebuilt、build等多个Git项目组成,所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。
这几天William为了拿Android最新的sourcecode,学习了一下git和repo的一些基本操作,整理了一个如何取得Android代码的How-To,今天把他贴上来。
1、Git的安装
在Ubuntu 8.04上安装git只要设定了正确的更新源,然后使用apt-get就可以了,有什么依赖问题,就让它自己解决吧。其中cURL是一个利用URL语法在命令行下工作的文件传输工具,会在后面安装Repo的时候用到。
sudo apt-get install git-core curl
2、安装Repo
首先确保在当前用户的主目录下创建一个/bin目录(如果没有的话),然后把它(~/bin)加到PATH环境变量中
接下来通过cURL来下载Repo脚本,保存到~/bin/repo文件中
curl http://android.git.kernel.org/repo >~/bin/repo
别忘了给repo可执行权限
chmod a+x ~/bin/repo
3、初始化版本库
如果是想把Android当前主线上最新版本的所有的sourcecode拿下来,我们需要repo的帮助。
先建立一个目录,比如~/android,进去以后用repo init命令即可。
repo init -u git://android.git.kernel.org/platform/manifest.git
这个过程会持续很长的时间(至少可以好好睡一觉),具体要多少时间就取决于网络条件了
最后会看到 repo initialized in /android这样的提示,就说明本地的版本库已经初始化完毕,并且包含了当前最新的sourcecode。
如果想拿某个branch而不是主线上的代码,我们需要用-b参数制定branch名字,比如:
repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
另一种情况是,我们只需要某一个project的代码,比如kernel/common,就不需要repo了,直接用Git即可。
git clone git://android.git.kernel.org/kernel/common.git
这也需要不少的时间,因为它会把整个Linux Kernel的代码复制下来。
如果需要某个branch的代码,用git checkout即可。比如我们刚刚拿了kernel/common.get的代码,那就先进入到common目录,然后用下面的命令:
git checkout origin/android-goldfish-2.6.27 -b goldfish
这样我们就在本地建立了一个名为goldfish的android-goldfish-2.6.27分支,代码则已经与android-goldgish-2.6.27同步。我们可以通过git branch来列出本地的所有分支。
4、同步版本库
使用epo sync命令,我们把整个Android代码树做同步到本地,同样,我们可以用类似
repo sync project1 project2 …
这样的命令来同步某几个项目
如果是同步Android中的单个项目,只要在项目目录下执行简单的
git pull
即可。
5、通过GitWeb下载代码
另外,如果只是需要主线上某个项目的代码,也可以通过GitWeb下载,在shortlog利用关键字来搜索特定的版本,或者找几个比较新的tag来下载还是很容易的。
Git最初是为Linux内核开发而设计,所以对其他平台的支持并不好,尤其是Windows平台,必须要有Cygwin才可以。现在,得益于msysgit项目,我们已经可以不需要Cygwin而使用Git了。另外,Git Extensions是一个非常好用的Windows Shell扩展,它能与资源管理器紧密集成,甚至提供了Visual Studio插件。它的官方网站上有一分不错的说明文档,感兴趣的朋友可以看一看。
至于Git的参考文档,我推荐Git Magic,这里还有一个Git Magic的中文版。