mtk芯片安卓车机系统具体流程
一:車機(jī)系統(tǒng)框架
MCU 功能
? 電源控制
? Radio 控制(RDS)
? 按鍵檢測(cè)(Panel/Remote/SW)
? 常見(jiàn)信號(hào)檢查(倒車/大燈/剎車)
? CAN 模塊通訊
? ARM-MCU 通訊
? 進(jìn)出碟控制
? 翻轉(zhuǎn)馬達(dá)系統(tǒng)
? 屏驅(qū)(此種情況倒車一般用 mcu 控制)
AMR 功能
? wifi 、BT、 gps、3/4G
? 顯示、觸摸
? 多媒體播放(SD 卡、U 盤)
? 倒車顯示
? 語(yǔ)音
? AUX
? 胎壓、DVR、CMMB
? CVBS 輸出(后排輸出)
二:安卓啟動(dòng)流程
? 第一階段:Android 設(shè)備上電后,首先會(huì)從處理器片上 ROM 的啟動(dòng)引導(dǎo)代碼開(kāi)始執(zhí)行,片上 ROM 會(huì)尋找 Bootloader
代碼,并加載到內(nèi)存。(這一步由“芯片廠商”負(fù)責(zé)設(shè)計(jì)和實(shí)現(xiàn))
? 第二階段:Bootloader 開(kāi)始執(zhí)行,首先負(fù)責(zé)完成硬件的初始化,然后找到 Linux 內(nèi)核代碼,并加載到內(nèi)存。(這一
步由“設(shè)備廠商”負(fù)責(zé)設(shè)計(jì)和實(shí)現(xiàn))
? 第三階段:Linux 內(nèi)核開(kāi)始啟動(dòng),初始化各種軟硬件環(huán)境,加載驅(qū)動(dòng)程序,掛載根文件系統(tǒng),并執(zhí)行 init 程序,
由此開(kāi)啟 Android 的世界。(這一步則是 Android 內(nèi)核開(kāi)發(fā)過(guò)程中需要涉及的地方)
init 程序最核心的工作主要有 3 點(diǎn):
(1) 創(chuàng)建和掛載一些系統(tǒng)目錄/設(shè)備節(jié)點(diǎn),設(shè)置權(quán)限,如:/dev, /proc, and /sys
(2) 解析 init.rc 和 init..rc,并啟動(dòng)屬性服務(wù),以及一系列的服務(wù)和進(jìn)程。
(3) 顯示 boot logo,默認(rèn)是“Android”字樣
? 第四階段:Zygote 進(jìn)程、SystemServer 進(jìn)程創(chuàng)建 Zygote 進(jìn)程由 init 進(jìn)程創(chuàng)建,SystemServer 進(jìn)程由 Zygote 創(chuàng)建
? 第五階段:訂制的service 啟動(dòng):例舉包括以下服務(wù)( 添加的所有關(guān)鍵服務(wù))
CBMService;
CanbusService;
McuService;
RadioService;
SettingService;
McuCBMService;
PandoraService;
SWCService;
? 第六階段:啟動(dòng)完成階段。當(dāng)所有的服務(wù)都啟動(dòng)完畢后,SystemServer 會(huì)打印出“Making services ready”,然后
通過(guò) ActivityManager 啟動(dòng) Home 界面,并發(fā)送“ACTION_BOOT_COMPLETED”廣播消息(到此真正看到了主界面)
三:代碼結(jié)構(gòu)
?
核心服務(wù)路徑:\autochips\frameworks\base\services\java\com…
APP 路徑:\autochips\packages
四:編譯說(shuō)明(AC8217平臺(tái)代碼而論)
全編譯
1 . mbldenv.sh 導(dǎo)出編譯需要的編譯工具相關(guān)環(huán)境變量
2 . selfenv 拷貝 autochips 到相關(guān)目錄主要拷貝以下目錄:
3 . selfbuild
實(shí)際上 selfbuild 僅是 autochips\build\build.all 腳本的符號(hào)鏈接。在沒(méi)有參數(shù)的情況下,selfbuild 會(huì)依次執(zhí)行 build.env,
build.uboot,build.kernel,build.driver,build.arm2,build.android,build.otapackage,build.makeimage 這 7 個(gè) sh 腳本。
相當(dāng)分步執(zhí)行以下:(當(dāng)要單獨(dú)編譯部分時(shí)可以單獨(dú)以下某句命令方法)
1.source./build.env設(shè)置編譯環(huán)境2.source./build.env設(shè)置編譯環(huán)境2../selfbuild uboot 編譯 uboot
3../selfbuilddriver編譯ATC的driver4../selfbuilddriver編譯ATC的driver4../selfbuild kernel 編譯 linux kernel
5../selfbuildarm2編譯arm26../selfbuildarm2編譯arm26../selfbuild android 編譯 android
7.$./selfbuild makeimage 生成最后需要燒寫到板子上的 Image( 把多余的 apk 刪除同時(shí)打包鏡像)
模塊編譯
1 : 用 mm 或 mmm 編譯相應(yīng)模塊
2: . selfbuild makeimage 生產(chǎn)鏡像
附上編譯腳本片段代碼:
**
mbldenv.sh腳本文件
**
!/bin/bash
#
ALPS(Android4.1 based) build environment profile setting
#
Overwrite JAVA_HOME environment variable setting if already exists
PATH=/mtktools/mtk-toolchain/gnuarm-4.2.1/image-tools:PATHPATH=/mtktools/mtk?toolchain/gnuarm?4.4.1/cross?tools/usr/local/bin:PATHPATH=/mtktools/mtk?toolchain/gnuarm?4.4.1/cross?tools/usr/local/bin:PATH
PATH=/mtktools/mtk-toolchain/vfp_4.5.1_2.6.27_cortex-a9-rhel4_002/i686/bin:PATHANTHOME=/usr/local/antexportANTHOMEexportMTKJAVAHOME=”/usr/local/jdk1.6.032”exportPATH=PATHANTHOME=/usr/local/antexportANTHOMEexportMTKJAVAHOME=”/usr/local/jdk1.6.032”exportPATH=MTK_JAVA_HOME/bin:ANTHOME/bin:ANTHOME/bin:PATH
export ANDROID_JAVA_HOME=MTKJAVAHOMEexportANDROIDJAVATOOLCHAIN=MTKJAVAHOMEexportANDROIDJAVATOOLCHAIN=MTK_JAVA_HOME/bin/
export JAVA_HOME=MTKJAVAHOMEexportJREHOME=MTKJAVAHOMEexportJREHOME={JAVA_HOME}/jre
export CLASSPATH=.:JAVAHOME/lib:JAVAHOME/lib:{JRE_HOME}/lib
export PATH
unset USERNAME
SKIN1: SKIN2:
export SKIN=Skin2
selfenv腳本文件:
!/bin/sh
export ANDROID4=pwd
export ANDROID_SRC=ANDROID4exportKERNELSRC=ANDROID4exportKERNELSRC=ANDROID4/kernel
export KERNELDIR=KERNELSRC/exportAUTOCHIPSDIR=KERNELSRC/exportAUTOCHIPSDIR=ANDROID4/autochips
export DRIVERS_DIR=AUTOCHIPSDIR/protect/platform/kernel/driversexportPUBLICDRIVERSDIR=AUTOCHIPSDIR/protect/platform/kernel/driversexportPUBLICDRIVERSDIR=AUTOCHIPS_DIR/platform/kernel/drivers
export DRIVERS_INC=AUTOCHIPSDIR/platform/kernel/drivers/incexportARM2SRC=AUTOCHIPSDIR/platform/kernel/drivers/incexportARM2SRC=AUTOCHIPS_DIR/platform/arm2
export DISPLAY_HARDWARE_INC=AUTOCHIPSDIR/hardware/atc/displayexportUBOOTSRC=AUTOCHIPSDIR/hardware/atc/displayexportUBOOTSRC=AUTOCHIPS_DIR/platform/uboot
export SCRIPT_DIR=AUTOCHIPSDIR/buildexportANDROIDOUTPUT=AUTOCHIPSDIR/buildexportANDROIDOUTPUT=ANDROID_SRC/out
export DRIVERS_OUTPUT=AUTOCHIPSDIR/platform/kernel/drivers/outputexportDRIVERSLIB=AUTOCHIPSDIR/platform/kernel/drivers/outputexportDRIVERSLIB=AUTOCHIPS_DIR/platform/kernel/drivers/lib
export AUTOCHIPS_TOOL=AUTOCHIPSDIR/toolsexportRELEASEFOLDERNAME=AUTOCHIPSDIR/toolsexportRELEASEFOLDERNAME=ANDROID4/image_release
export BOARD_CFG_FILE=$AUTOCHIPS_DIR/device/atc/ac8317/BoardConfig.mk
export PATH=ANDROIDSRC/autochips/external/gstreameraggregate/bin/:ANDROIDSRC/autochips/external/gstreameraggregate/bin/:AUTOCHIPS_TOOL:$PATH
export JOB_NUM=grep processor /proc/cpuinfo |wc -l
export CHIP_VER=8317
find AUTOCHIPSDIR/device/atc/ac8317/.overlay/build/?typef|xargstouchcp?ruafAUTOCHIPSDIR/device/atc/ac8317/.overlay/build/?typef|xargstouchcp?ruafAUTOCHIPS_DIR/device/atc/ac8317/.overlay/build/* $ANDROID_SRC/build/
copy /autochips/kernel/includeto/autochips/kernel/includeto/kernel/include
find AUTOCHIPSDIR/kernel/include?typef|xargstouchcp?ruafAUTOCHIPSDIR/kernel/include?typef|xargstouchcp?ruafAUTOCHIPS_DIR/kernel/include/* $ANDROID_SRC/kernel/include/
INPUT_PARAM=$*
function check_parameter()
{
if [ ! -z “echo "$INPUT_PARAM" | grep eng” ];then
echo “eng”
elif [ ! -z “echo "$INPUT_PARAM" | grep userdebug” ];then
echo “userdebug”
elif [ ! -z “echo "$INPUT_PARAM" | grep user” ];then
echo “user”
else
echo “eng”
fi
}
retval=check_parameter $*
source ANDROIDSRC/build/envsetup.shANDROIDSRC/build/envsetup.shretval
INPUT_PARAM=INPUTPARAM/eng/INPUTPARAM=INPUTPARAM/eng/INPUTPARAM={INPUT_PARAM/userdebug/}
INPUT_PARAM=INPUTPARAM/user/INPUTPARAM=INPUTPARAM/user/INPUTPARAM=(echo $INPUT_PARAM)
lunch
if [ ! -z “echo "$INPUT_PARAM" | grep ?” ];then
lunch
else
lunch 5
fi
echo “env [$retval] setup completed!!!”
selfbuild腳本文件:
!/bin/sh
{
if [ -z which androidq ];then
#echo "no androidq, source bash_profile"
1
source ~/.bash_profile
source ~/.bashrc
fi
if [ ! -z which androidq ];then
echo “androidq ok, build with it”
ANDROIDQ=androidq
else
echo “no androidq, build without it”
ANDROIDQ=
fi
INPUT_PARA=$*
Copy Overlay folder to original
if [ ! -z “echo "$INPUT_PARA" | grep cpoverlay” ];then
SCRIPTDIR/build.SCRIPTDIR/build.INPUT_PARA
exit 0
fi
process android version: user, userdebug, eng
if [ ! -z “echo "$INPUT_PARA" | grep eng” ];then
export ANDROID_VER=eng
elif [ ! -z “echo "$INPUT_PARA" | grep userdebug” ];then
export ANDROID_VER=userdebug
elif [ ! -z “echo "$INPUT_PARA" | grep user” ];then
export ANDROID_VER=user
else
export ANDROID_VER=eng
fi
INPUT_PARA=INPUTPARA/eng/INPUTPARA=INPUTPARA/eng/INPUTPARA={INPUT_PARA/userdebug/}
INPUT_PARA=INPUTPARA/user/INPUTPARA=INPUTPARA/user/INPUTPARA=(echo $INPUT_PARA)
source autochips/build/build.env $ANDROID_VER
echo “export env: ANDROID4=ANDROID4”if[!?dANDROID4”if[!?dAUTOCHIPS_DIR -o -z $AUTOCHIPS_DIR ];then
echo “export some env var error, exit”
exit 1
fi
ALLIMAGES=”uboot kernel driver arm2 android otapackage makeimage clean cts”
check if para is nand
if [ ! -z “echo "$INPUT_PARA" | grep nand” ];then
export AC83XX_BOOT_DEVICE=nand
elif [ ! -z “echo "$INPUT_PARA" | grep sd2” ];then
export AC83XX_BOOT_DEVICE=sd2
else
export AC83XX_BOOT_DEVICE=mmc
fi
remove mmc para
INPUT_PARA=INPUTPARA/nand/INPUTPARA=INPUTPARA/nand/INPUTPARA={INPUT_PARA/sd2/}
INPUT_PARA=(echo(echoINPUT_PARA)
echo “AC83XX_BOOT_DEVICE :$AC83XX_BOOT_DEVICE”
check if it is release build, debug build by default
if [ ! -z “echo "$INPUT_PARA" | grep debug” ];then
export RELEASE_BUILD=false
echo “build for debug”
else
export RELEASE_BUILD=true
echo “build for release”
fi
remove release or debug if it has
INPUT_PARA={INPUT_PARA%release}??
INPUT_PARA={INPUT_PARA%release}??INPUT_PARA={INPUT_PARA%debug}
INPUT_PARA=(echo(echoINPUT_PARA)
if [ -z “INPUTPARA”];thenIMAGELIST=”ubootkerneldriverarm2androidotapackagemakeimage”exportBUILDALL=trueecho“noparam,default:INPUTPARA”];thenIMAGELIST=”ubootkerneldriverarm2androidotapackagemakeimage”exportBUILDALL=trueecho“noparam,default:IMAGE_LIST”
echo -e “\033[31m delete out(ANDROIDOUTPUT)folder?(y/n)\033[0m”read?t5RMOUTif[?dout?a“ANDROIDOUTPUT)folder?(y/n)\033[0m”read?t5RMOUTif[?dout?a“RMOUT" = "y" -a "?”=“0”];thenecho?e“\033[31mbegindeleteout(?”=“0”];thenecho?e“\033[31mbegindeleteout(ANDROID_OUTPUT) folder\033[0m”
ANDROIDQrm?rfANDROIDQrm?rfANDROID_OUTPUT
fi
else
IMAGE_LIST=”$INPUT_PARA”
export BUILD_ALL=false
fi
if [ ! -z “echo $IMAGE_LIST | grep makeimage” ];then
export MAKE_IMAGE=true
IMAGE_LIST=${IMAGE_LIST%makeimage}
fi
for test
for PARAM in $IMAGE_LIST
do
if [ ! -z “echo "$ALLIMAGES" | grep $PARAM” ];then
if [ ! -z “echo $PARAM | grep android” ];then
if [ ! -z “echo $ANDROID_VER | grep eng” ];then
BUILD_PARA=”eng”
elif [ ! -z “echo $ANDROID_VER | grep userdebug” ];then
BUILD_PARA=”userdebug”
elif [ ! -z “echo $ANDROID_VER | grep user” ];then
BUILD_PARA=”user”
else
BUILD_PARA=””
fi
elif [ ! -z “echo $PARAM | grep kernel” ];then
if [ ! -z “echo "$RELEASE_BUILD" | grep false” ]; then
BUILD_PARA=”debug”
elif [ ! -z “echo $ANDROID_VER | grep eng” ];then
BUILD_PARA=”debug”
else
BUILD_PARA=””
fi
elif [ ! -z “echo $PARAM | grep driver” ];then
if [ ! -z “echo "$RELEASE_BUILD" | grep false” ]; then
BUILD_PARA=”debug”
else
BUILD_PARA=””
fi
else
BUILD_PARA=””
fi
echo -e "\033[32m build.$PARAM $BUILD_PARA\033[0m"
if [ ! -x $SCRIPT_DIR/build.$PARAM ];then
? if [ ! -z "`echo $PARAM | grep otapackage`" ];then
? source autochips/build/build.env $AC83XX_BOOT_DEVICE
? fi
? echo -e "\033[32m $SCRIPT_DIR/build.$PARAM $BUILD_PARA can't executable!\033[0m"
? exit 1
fi
echo "++ build_dir is $SCRIPT_DIR, param is $PARAM, build_para is $BUILD_PARA++"
? $ANDROIDQ $SCRIPT_DIR/build.$PARAM $BUILD_PARA
? if [ "$?" != "0" ];then
? ? echo -e "\033[31m build.$PARAM $BUILD_PARA error, stop!\033[0m"
? ? exit 1
? else
? ? echo -e "\033[32m build.$PARAM $BUILD_PARA OK!\033[0m"
? fi
else
echo -e “\033[31munknown cmd: $PARAM\033[0m”
fi
done
build kernel and driver again to debug if no release
assume that arm2 image is only need to generate in
building all iamge, which means the whole image building
if [ ! -z “echo "$RELEASE_BUILD" | grep false” ]; then
echo “it is debug build”
if [ ! -z “echo "$BUILD_ALL" | grep true” ]; then
echo “clean kernel and drivers”
cd KERNELDIR?&&?make?clean?&&?make?mrproper??
????#cdKERNELDIR?&&?make?clean?&&?make?mrproper??????#cdDRIVERS_DIR && make clean
echo “build kernel and driver again”
ANDROIDQANDROIDQSCRIPT_DIR/build.kernel “debug”
ANDROIDQANDROIDQSCRIPT_DIR/build.driver “debug”
fi
else
echo “it is release build”
fi
build image
if [ ! -z “echo $MAKE_IMAGE | grep true” ];then
echo “Going to build images”
$SCRIPT_DIR/build.makeimage
fi
echo “build is done!”
exit
} | tee buildlog.txt
?
總結(jié)
以上是生活随笔為你收集整理的mtk芯片安卓车机系统具体流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .bat批处理文件格式运行JAVA应用程
- 下一篇: java信息管理系统总结_java实现科