今天心血来潮,想把之前做的开发板环境配置以及编译的东西重新整理一下,毕竟最近在搞开发,所以有必要温故而知新。
以下是我整个Android-5.0的工程目录列表:
其中build_4412_img.sh、copyimage_to_window_system.sh是我自己写的快速编译拷贝脚本。
book@book-virtual-machine:/work/android-5.0.2$ ls
abi build_4412_img.sh development gen-img.sh Makefile prebuilts tools
art copyimage_to_window_sysetm.sh device hardware ndk rodev vendor
bionic cts docs kernel out sdk
bootable dalvik external libcore packages setenv
build developers frameworks libnativehelper pdk system
首先来看看build_4412_img.sh这个脚本,脚本对应的代码如下:
#build system IMG
#build system img and copy img to window share
#Y.X.YANG
#date:2016.12.22
cd /work/android-5.0.2/kernel/ #首先切换到工程的kernel主目录
make -j4 #开始编译内核
echo $?
if test $? -eq 0 #判断编译是否出错,出错直接退出,编译成功将生成的zImage拷贝至window共享目录
then
echo "build 4412 kernel-img success!"
cp /work/android-5.0.2/kernel/arch/arm/boot/zImage /mnt/hgfs/share/images/
else
echo "build 4412 kernel-img fair!"
exit 0
fi
cd /work/android-5.0.2/ #kernel编译完成后接下来编译Android源码
. setenv #先设置编译环境,下面有setenv的源码
lunch full_tiny4412-eng #选择我们要编译的产品,我们这里选择4412的工程版本
make -j4 #编译
./gen-img.sh #生成对应产品的img
./copyimage_to_window_sysetm.sh #将img拷贝到window共享目录
接下来这个就是setenv的源码:
#!/bin/bash
CPU_JOB_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')
# java
OPENJDK7_DIR=/usr/lib/jvm/java-7-openjdk-amd64
java_version_str=`java -version 2>&1 | grep '^java .*[ "]1\.7[\. "$$]'`
if [ "x$java_version_str" = "x" ]; then
export PATH=${OPENJDK7_DIR}/bin:$PATH
fi
PRODUCT='full_tiny4412' #这里是对应的产品
source build/envsetup.sh #和大多数安卓编译的方式一样的,这里只是把souce build/envsetup.sh放到setenv这个脚本里面来了
TARGET_PRODUCT=$PRODUCT
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_VARIANT=eng
export PATH TARGET_PRODUCT TARGET_SIMULATOR TARGET_BUILD_TYPE TARGET_BUILD_VARIANT #这里是对应的外部环境变量引用
# settitle
COMBO4FA=${TARGET_PRODUCT}-${TARGET_BUILD_VARIANT} #设置标题
export PROMPT_COMMAND="echo -ne \"\033]0;[${COMBO4FA}] ${USER}@${HOSTNAME}: ${PWD}\007\""
接下来这个是gen-img.sh,作用是将生成在out目录下的img拷贝到源码的根目录下:
#!/bin/bash
OUTDIR=out/target/product/tiny4412 #这里就是out生成img的路径
AHOSTBIN=out/host/linux-x86/bin #选择对应的工具
# install vendor files #安装供应商文件
if [ -d vendor/friendly-arm/tiny4412/rootdir/system/ ]; then
cp -af vendor/friendly-arm/tiny4412/rootdir/system/* ${OUTDIR}/system/
fi
if [ -d vendor/friendly-arm/tiny4412/rootdir/data/ ]; then
cp -af vendor/friendly-arm/tiny4412/rootdir/data/* ${OUTDIR}/data/
fi
# make images #生成img
LOPTS="-T -1 -S ${OUTDIR}/root/file_contexts"
${AHOSTBIN}/make_ext4fs -s ${LOPTS} -l 629145600 -a system system.img ${OUTDIR}/system
# eMMC Size | UserData partition Size
#------------------------------------------------
# 4G | 2149580800 (2G) 2050*1024*1024
# 8G | 4299161600 (4G)
# 16G | 10747904000 (10G) 10250*1024*1024
#------------------------------------------------
${AHOSTBIN}/make_ext4fs -s ${LOPTS} -l 2149580800 -a data userdata-4g.img ${OUTDIR}/data
${AHOSTBIN}/make_ext4fs -s ${LOPTS} -l 4299161600 -a data userdata-8g.img ${OUTDIR}/data
${AHOSTBIN}/make_ext4fs -s ${LOPTS} -l 10485760000 -a data userdata-16g.img ${OUTDIR}/data
cp userdata-4g.img userdata.img #拷贝对应的img
# ramdisk
${AHOSTBIN}/mkbootfs ${OUTDIR}/root | ${AHOSTBIN}/minigzip > ${OUTDIR}/ramdisk.img
mkimage -A arm -O linux -T ramdisk -C none -a 0x40800000 -n "ramdisk" \
-d ${OUTDIR}/ramdisk.img ramdisk-u.img
# minitools support #minitool 工具支持
MINITOOLS_PATH=/opt/MiniTools/tiny4412/images/Android5.0
if [ -d ${MINITOOLS_PATH} ]; then
cp -f ramdisk-u.img ${MINITOOLS_PATH}/
cp -f system.img ${MINITOOLS_PATH}/
cp -f userdata*.img ${MINITOOLS_PATH}/
ls -l ${MINITOOLS_PATH}/ramdisk-u.img
ls -l ${MINITOOLS_PATH}/system.img
ls -l ${MINITOOLS_PATH}/userdata*.img
fi
接下来这个是copyimage_to_window_system.sh,作用是将生成的img拷贝到window共享目录
sudo mv userdata-16g.img userdata-4g.img userdata-8g.img userdata.img system.img ramdisk-u.img /mnt/hgfs/share/images/
往后的文章会介绍如何修改4412上的配置文件,会做成sdk修改记录,欢迎大家有空来学习。