友善之臂的开发板手册上提供了从源代码开始创建Android的两个脚本:build-android,genrootfs.sh 以及使用制作yaffs2格式的文件系统映像
1.build-android
1 #!/bin/bash
2
3 if [ ! -e "./jdk1.6.0_23" ]; then
4 tar xzf jdk1.6.0_23.tar.gz
5 fi
6
7 tar xzf symlinks.tgz
8
9 # if [ -e "../Android-2.2-apps/" ]; then
10 # cd ../Android-2.2-apps/
11 # ./apply_patch.sh
12 # cd -
13 # fi
14
15 export PATH=$PWD/jdk1.6.0_23/bin:$PATH
16 . setenv
17 make -j$CPU_JOB_NUM || exit 1
18
19 # if [ -e "../Android-2.2-apps/" ]; then
20 # cd ../Android-2.2-apps/
21 # ./build-apps
22 # cd -
23 # fi
24
25 exit 0
这个用到了setenv脚本
1 #!/bin/bash
2
3 CPU_JOB_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')
4
5 PRODUCT='full_mini210'
6
7 source build/envsetup.sh
8
9 TARGET_PRODUCT=$PRODUCT
10 TARGET_SIMULATOR=false
11 TARGET_BUILD_TYPE=release
12 TARGET_BUILD_VARIANT=eng
13
14 export PATH TARGET_PRODUCT TARGET_SIMULATOR TARGET_BUILD_TYPE TARGET_BUILD_VARIANT
15
2.genrootfs.sh
主要是文件系统的打包。
1.将编译好的文件复制到rootfs_dir,并修改文件属性
2.建立linux文件设备节点
3.安装 prebuilt packages
4.安装内核模块与固件
1 #!/bin/sh
2
3 PRODUCT=smdkv210
4
5 echo -n "Generating rootfs for Android..."
6 rm -fr rootfs_dir
7 cp -a out/target/product/${PRODUCT}/root/ rootfs_dir
8 cp -a out/target/product/${PRODUCT}/system/* rootfs_dir/system
9 cp -a out/target/product/${PRODUCT}/data/* rootfs_dir/data
10 chown root:root rootfs_dir -R
11 chmod 755 rootfs_dir/system/etc/dhcpcd/dhcpcd-run-hooks
12 chown 1014:2000 rootfs_dir/system/etc/dhcpcd/dhcpcd-hooks -R
13 chown 1000:1000 rootfs_dir/data -R
14 echo "...done"
15
16 function mvapk()
17 {
18 mv $1 rootfs_dir/mnt/apps
19 echo " $1"
20 }
21
22 if [ "${PRODUCT}" = "smdkv210" ]; then
23 echo -n "Create device file..."
24 mkdir rootfs_dir/dev/input
25 mknod rootfs_dir/dev/tty c 5 0
26 mknod rootfs_dir/dev/console c 5 1
27 mknod rootfs_dir/dev/fb0 c 29 0
28 mknod rootfs_dir/dev/pointercal c 10 119
29 mknod rootfs_dir/dev/input/event1 c 13 65
30 mknod rootfs_dir/dev/ts-if c 10 185
31 mknod rootfs_dir/dev/touchscreen c 10 180
32 mknod rootfs_dir/dev/touchscreen-1wire c 10 181
33 mknod rootfs_dir/dev/s3c2410_serial0 c 204 64
34 mknod rootfs_dir/dev/s3c2410_serial3 c 204 67
35 echo "...done"
36
37 echo -n "Install prebuilt packages..."
38 if [ -f vendor/samsung/common/busybox-bin.tgz ]; then
39 tar xf vendor/samsung/common/busybox-bin.tgz -C rootfs_dir/system
40 ln -sf /system/busybox/bin/busybox rootfs_dir/system/bin/sh
41 mkdir -p rootfs_dir/bin && ln -sf /system/busybox/bin/sh rootfs_dir/bin/sh
42 fi
43 if [ -f vendor/samsung/common/iwtools-bin.tgz ]; then
44 tar xf vendor/samsung/common/iwtools-bin.tgz -C rootfs_dir/system/bin
45 fi
46 echo "...done"
47
48 echo -n "Install kernel modules and firmware..."
49 if [ -f vendor/samsung/smdkv210/firmware.tgz ]; then
50 tar xf vendor/samsung/smdkv210/firmware.tgz -C rootfs_dir/system/etc
51 fi
52 if [ -f vendor/samsung/smdkv210/kernel-modules.tgz ]; then
53 tar xf vendor/samsung/smdkv210/kernel-modules.tgz -C rootfs_dir/system/lib
54 find rootfs_dir/system/lib/modules/ -name modules.* \
55 -o -name source -o -name build | xargs rm -rf
56 fi
57 echo "...done"
58
59 echo -n "Install proprietary-open files..."#友善的东西我没有找到这个包。
60 [ -f FriendlyARMData.tgz ] && tar xf FriendlyARMData.tgz -C rootfs_dir
61 echo "...done"
62
63
64 cp vendor/friendly-arm/mini210/rootdir/* rootfs_dir/ -af
65
66 chown 1000:1000 rootfs_dir/data/app -R
67 chmod 775 rootfs_dir/data/app
68 chmod 664 rootfs_dir/data/app/*.apk
69
70 find rootfs_dir/ -name CVS -type d | xargs rm -rf
71 fi
72
3.制作yaffs2格式的文件系统映像
使用mkyaffs2image-128M工具,可以把目标文件系统目录制作成yaffs2格式的映像文件,当它被烧写入Nand Flash中启动时,整个根目录将会以yaffs2文件系统格式存在,缺省的Android内核已经支持该文件系统,在命令行输入:
#cd /opt/FriendlyARM/mini6410/android/Android-2.3
#mkyaffs2image-128M rootfs_dir rootfs_android.img
将会在当前目录下生成rootfs_android.img文件,