返回列表 发帖

[原创经验] 移植最新eclear 2.1 android系列之创建自己的平台

[原创经验] 移植最新eclear 2.1 android系列之创建自己的平台

移植最新eclear 2.1 android到marvell pxa168 avlite板子上系列

嵌入式开发联盟
作者:osboy
email:  
mcuos.com@gmail.com

http://www.kandroid.org/android_pdk/build_new_device.html

根据这篇文章,先建立自己的vendor:

(1)\android-porting-to-avlite\vendor\下面建立自己的vendor
mkdir mcuos;
(2)mkdir product;注意这里是product,而不是products,理所当然的加了复数,结果搞的一塌糊涂:)
在此目录下:
创建AndroidProducts.mk文件:

PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/pxa168.mk \

创建pxa168.mk :

# This is a generic product that isn't specialized for a specific device.
# It includes the base Android platform. If you need Google-specific features,
# you should derive from generic_with_google.mk
$(call inherit-product, build/target/product/generic.mk)
# Overrides
PRODUCT_BRAND := mcuos
PRODUCT_DEVICE := avlite
PRODUCT_NAME := pxa168

为了简单点,我只是继承了generic.mk,其他啥也没做,下面的PRODUCT_BRAND ,PRODUCT_DEVICE,PRODUCT_NAME自己定义就可以了。

(3)退回到:mcuos目录
创建avlite目录,这个名字和你的PRODUCT_DEVICE := avlite这个相同,不说为啥了,去研究下android的makefile吧。
此目录下:

创建:BoardConfig.mk文件:

# config.mk
#
# Product-specific compile-time definitions.
#
# The generic product target doesn't have any hardware-specific pieces.
TARGET_BOARD_PLATFORM := mcuos
TARGET_NO_BOOTLOADER := true
TARGET_NO_KERNEL := true
TARGET_CPU_ABI := armeabi//必须的吧
BOARD_USES_ALSA_AUDIO:=true//用标准的alsa库
BUILD_WITH_ALSA_UTILS:=true//用标准的alsa工具集
BOARD_USES_GENERIC_AUDIO := false //这个禁掉吧
USE_CAMERA_STUB:=true//camera一开始编译不过,因为我没有libcamera的库,所以先打开这个选项,弄个虚拟的吧。

创建:AndroidBoard.mk文件:

LOCAL_PATH := $(call my-dir)
L_PATH := $(LOCAL_PATH)
include $(L_PATH)/keymaps/Mdroid.mk
#file := $(TARGET_OUT_KEYLAYOUT)/tuttle2.kl
#ALL_PREBUILT += $(file)
#$(file) : $(LOCAL_PATH)/tuttle2.kl | $(ACP)
# $(transform-prebuilt-to-target)
#
#include $(CLEAR_VARS)
#LOCAL_SRC_FILES := tuttle2.kcm
#include $(BUILD_KEY_CHAR_MAP)

这个主要是配合keymap用的,大家可以看到,是拿marvell的BSP里面的,懒的自己弄了,如何实现正确的键盘map
请参考:http://www.kandroid.org/android_pdk/keymaps_keyboard_input.html,弄过一次了,不难,就不具体写了。

(4)先看下面的链接:

   git clone git://android.git.kernel.org/platform/external/alsa-lib.git
   git clone git://android.git.kernel.org/platform/external/alsa-utils.git
   git clone git://android.git.kernel.org/platform/hardware/alsa_sound.git
这个是android集成的alsa,我们用这个标准版本吧。因为我用标准的alsa工具测试过marvell的audio驱动,还算标准。

alsa-lib.git,alsa-utils.git放到external 目录下。

alsa_sound.git放到android-porting-to-avlite\hardware\mcuos目录下,重命名为:libaudio-alsa。

编译的时候由于我在BoardConfig.mk里面已经设置了TARGET_BOARD_PLATFORM := mcuos定义了,所以会被编译到的放心好了。
(5)设置环境变量,选择平台

(1) . build/envsetup.sh
(2)  choosecombo
Build for the simulator or the device?
     1. Device
     2. Simulator
Which would you like? [1] 1

Build type choices are:
     1. release
     2. debug
Which would you like? [1] 1

Which product would you like? [generic] pxa168

Variant choices are:
     1. user
     2. userdebug
     3. eng
Which would you like? [eng] 1
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.1-update1
TARGET_PRODUCT=pxa168
TARGET_BUILD_VARIANT=user
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=ECLAIR
============================================

(6) make -j4
请参考下面的说明
    - croot:   Changes directory to the top of the tree.  
  • - m:       Makes from the top of the tree.  - mm:      Builds all of the modules in the current directory.
  • - mmm:     Builds all of the modules in the supplied directories.  - cgrep:   Greps on all local C/C++ files.
  • - jgrep:   Greps on all local Java files.  - resgrep: Greps on all local res/*.xml files.
  • - godir:   Go to the directory containing a file.
(7)\android-porting-to-avlite\out\target\product\avlite里面去找文件:

system.img,userdata.img文件还有一个root小的文件系统。

(9)拷贝root文件系统到\android-porting-to-avlite\kernel目录下面
修改init.rc文件:

    mount yaffs2 [email=mtd@system]mtd@system[/email] /system
    mount yaffs2 [email=mtd@system]mtd@system[/email] /system ro remount
    # We chown/chmod /data again so because mount is run as root + defaults
    mount yaffs2 [email=mtd@userdata]mtd@userdata[/email] /data nosuid nodev

修改为:

    mount yaffs2 [email=mtd@System]mtd@System[/email] /system
    mount yaffs2 [email=mtd@System]mtd@System[/email] /system ro remount
    # We chown/chmod /data again so because mount is run as root + defaults
    mount yaffs2 [email=mtd@Userdata]mtd@Userdata[/email] /data nosuid nodev

就是目录第一个字母改成大写,marvell的linux内核nand分区就是这个名字,我不想改内核,所以就修正这里吧。
android是根据内核分区名字来mount文件系统的,所以这个修改和内核一致。

(8)准备自己的linux内核(具体实现见以后章节)
编译,得到zImage
(9)下载运行

看效果,出现画面,但是没有声音。这就对了,因为你没有拷贝声音文件(我也不知到为何他不自动拷贝呢?)
铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音
\system\media\audio
\system\media\audio\alarms 闹铃音
\system\media\audio\notifications 提示音
\system\media\audio\ringtones 铃声
\system\media\audio\ui 界面操作事件音
\system\media\audio\alarms\Alarm_Beep_01.ogg
\system\media\audio\alarms\Alarm_Beep_02.ogg
\system\media\audio\alarms\Alarm_Beep_03.ogg
\system\media\audio\alarms\Alarm_Buzzer.ogg
\system\media\audio\alarms\Alarm_Classic.ogg
\system\media\audio\alarms\Alarm_Rooster_02.ogg
\system\media\audio\notifications\Beat_Box_Android.ogg
\system\media\audio\notifications\CaffeineSnake.ogg
\system\media\audio\notifications\DearDeer.ogg
\system\media\audio\notifications\DontPanic.ogg
\system\media\audio\notifications\F1_MissedCall.ogg
\system\media\audio\notifications\F1_New_MMS.ogg
\system\media\audio\notifications\F1_New_SMS.ogg
\system\media\audio\notifications\Heaven.ogg
\system\media\audio\notifications\Highwire.ogg
\system\media\audio\notifications\KzurbSonar.ogg
\system\media\audio\notifications\OnTheHunt.ogg
\system\media\audio\notifications\TaDa.ogg
\system\media\audio\notifications\Tinkerbell.ogg
\system\media\audio\notifications\Voila.ogg
\system\media\audio\ringtones\BeatPlucker.ogg
\system\media\audio\ringtones\BentleyDubs.ogg
\system\media\audio\ringtones\BirdLoop.ogg
\system\media\audio\ringtones\CaribbeanIce.ogg
\system\media\audio\ringtones\CrazyDream.ogg
\system\media\audio\ringtones\CurveBall.ogg
\system\media\audio\ringtones\DreamTheme.ogg
\system\media\audio\ringtones\EtherShake.ogg
\system\media\audio\ringtones\FriendlyGhost.ogg
\system\media\audio\ringtones\GameOverGuitar.ogg
\system\media\audio\ringtones\Growl.ogg
\system\media\audio\ringtones\InsertCoin.ogg
\system\media\audio\ringtones\LoopyLounge.ogg
\system\media\audio\ringtones\LoveFlute.ogg
\system\media\audio\ringtones\MidEvilJaunt.ogg
\system\media\audio\ringtones\MildlyAlarming.ogg
\system\media\audio\ringtones\NewPlayer.ogg
\system\media\audio\ringtones\Noises1.ogg
\system\media\audio\ringtones\Noises2.ogg
\system\media\audio\ringtones\Noises3.ogg
\system\media\audio\ringtones\OrganDub.ogg
\system\media\audio\ringtones\Ring_Classic_02.ogg
\system\media\audio\ringtones\Ring_Digital_02.ogg
\system\media\audio\ringtones\Ring_Synth_02.ogg
\system\media\audio\ringtones\Ring_Synth_04.ogg
\system\media\audio\ringtones\RomancingTheTone.ogg
\system\media\audio\ringtones\SitarVsSitar.ogg
\system\media\audio\ringtones\SpringyJalopy.ogg
\system\media\audio\ringtones\T-Jingle.ogg
\system\media\audio\ringtones\Terminated.ogg
\system\media\audio\ringtones\TwirlAway.ogg
\system\media\audio\ringtones\VeryAlarmed.ogg
\system\media\audio\ringtones\World.ogg
\system\media\audio\ui\Effect_Tick.ogg

(10)osboy小结

好了,暂时满足一下好奇心,之前听到android就心烦,现在弄了一版玩玩。
这只是小儿科,要做的事情还很多,后面慢慢说来吧。
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服