在tiny4412源码下编写全系统编译执行脚本

今天心血来潮,想把之前做的开发板环境配置以及编译的东西重新整理一下,毕竟最近在搞开发,所以有必要温故而知新。

以下是我整个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修改记录,欢迎大家有空来学习。

时间: 2024-09-20 16:05:18

在tiny4412源码下编写全系统编译执行脚本的相关文章

Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机

Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没仔细的梳理源码的入门逻辑,今天也就来讲一个源码的玩法,各位看官,一起学习学习! 看本篇博客之前,先看下我的前面两篇 Android源码浅析(一)--VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置 Android源码浅析(二)--Ubuntu Roo

Ubuntu Android源码以及内核下载与编译_Android

本教程是基于Ubuntu下Android6.0.1源码以及内核的下载和编译,记录一下,以后也就不用自己去找资料,一遍一遍的尝试了.可以翻墙的,英语好的,直接去AndroidSource. 系统环境:Ubuntu14.04LTS Android版本:6.0.1 重要网址 清华大学镜像 AndroidSource 下载前的准备 安装OpenJdk sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get in

Android内核源码 在Ubuntu上下载,编译,安装

从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件.那么,如何才能DIY自己的内核呢?这篇文章一一道来. 一. 首选,参照前一篇在Android源码 在Ubuntu上下载,编译和安装准备好Android源代码目录. 二. 下载Linux Kernel for Android源代码. 1. 使用GIT

反编译-spring源码增加注释如何重新编译打包?

问题描述 spring源码增加注释如何重新编译打包? spring源码增加注释如何重新编译打包,或者其它反编译获得的源码加注释后重新编译如何打成jar包 解决方案 spring 源码编译

Ubuntu14.04环境编译vlc源码for安卓Android系统

一.准备虚拟机 1.所需软件 deamon:DTLite4491-0356.1394761051.exe VMware-workstation-full-12.1.0-3272444_for_x64.exe 序列号5A02H-AU243-TZJ49-GTC7K-3C61N ubuntu-14.04.1-desktop-amd64.iso 2.逐个安装,遇到报虚拟机无法跑长类型的ubuntu,按照错误提示,修改主板cmos参数:Intel VT-x BIOS/固件设置 中 开启 二.参考文档 参考

Android源码 在Ubuntu上下载,编译和安装

看完了前面说的几本书之后,对Linux Kernel和Android有一定的认识了,是不是心里蠢蠢欲动,想小试牛刀自己编译一把Android源代码了呢?一直习惯使用Windows系统,而Android源代码是不支持在Windows上编译上,于是决定使用虚拟机安装Ubuntu,然后下载.编译和安装Android源代码. 一. 环境准备. 1. 磁盘空间预留20G左右,内存3G,因为一边要跑主机,一边要跑虚拟机,内存要求还是比较高的,这样才会比较流畅. 2. 安装VMWare 7.1.4.我的操作系

用C#写了一个SLE4442加密卡充值售电软件,源代码中包含写卡密码,C#源码可用.Net Reflector 反编译的话,那写卡密码岂不是很容易泄露

问题描述 用C#写了一个SLE4442加密卡充值售电软件,源代码中包含写卡密码,C#源码可用.NetReflector反编译的话,那写卡密码岂不是很容易泄露.请问如何解决这个问题.谢谢大家. 解决方案 解决方案二:你的充值售电软件会网上公开吗解决方案三:引用1楼andywangguanxi的回复: 你的充值售电软件会网上公开吗 不在网上公开,但是,如果我们当地的同行业竞争对手搞到我们的软件(那是很容易的),而后反编译,那就可以仿造我们的产品,以低价争抢我们原有的客户资源,那是很危险的.解决方案四

[实践] Android5.1.1源码 - 让某个APP以解释执行模式运行

前言 本文的实践修改了Android5.1.1的源码. 本文只简单的讲了一下原理.在"实践"一节讲了具体做法. 本文的内容涉及Art模式下dex加载的知识,想要详细了解这部分知识可以去看老罗的文章:  Android运行时ART简要介绍和学习计划  Android运行时ART加载OAT文件的过程分析  Android运行时ART加载类和方法的过程分析  Android运行时ART执行类方法的过程分析 本文的内容涉及zygote,如果不知道zygote是什么,或者好奇zygote如何启动

PHP yii框架源码阅读(二) 整体执行流程分析

一 程序入口 <?php // change the following paths if necessary $yii=dirname(__FILE__).'/http://www.cnblogs.com/framework/yii.php'; $config=dirname(__FILE__).'/protected/config/main.php'; // remove the following line when in production mode // defined('YII_D