確定了我們sep0611的基準版本之後,接下來就是在北大小本上移植android 2.3.1
移植過程可以劃分為幾個階段:
·編譯系統:涉及目錄 build/core ,device,prebuilt
·c庫:bionic
·dalvik:去掉jit,預設使用解譯器
·其他:external、system、framework
第一步 編譯系統
步驟:
1.
Device
建立一個公司相關目錄:mkdir seuic
建立一個產品目錄:mkdir sep0611 @device/seuic/
產品相關的編譯設定檔:
Android.mk:總編譯檔案
BoardConfig.mk:板級產品編譯設定檔
device.mk:
setup-makefiles.sh
AndroidProducts.mk:包含full_sep0611.mk
CleanSpec.mk
full_sep0611.mk: 裝置級產品設定檔
vendorsetup.sh: lunch 配置指令碼
2.
build/core
編譯系統:
1) 在build/core/combo/arch:mkdir
unicore32
建立一個sep0611.mk宣各處理器架構相關配置
例如: #ARCH_ARM_HAVE_THUMB_SUPPORT := true<br /> #ARCH_ARM_HAVE_FAST_INTERWORKING := true<br /> #ARCH_ARM_HAVE_64BIT_DATA := true<br /> #ARCH_ARM_HAVE_HALFWORD_MULTIPLY := true<br /> #ARCH_ARM_HAVE_CLZ := true<br /> #ARCH_ARM_HAVE_FFS := true
2) 建立一個TARGET_linux-unicore32.mk@build/core/combo
這個檔案主要申明了編譯器目錄,編譯選項,標頭檔等
3) 修改dynamic_binary.mk@build/core
不使用prelink和strip(暫時沒做好)
ifeq ($(TARGET_ARCH),unicore32)<br />LOCAL_PRELINK_MODULE := false<br />endif<br />ifeq ($(TARGET_ARCH),unicore32)<br />LOCAL_STRIP_MODULE := false<br />endif
4) 修改android2.3.1/build/core//executable.mk檔案
聲明編譯靜態可執行檔所需要的啟動相關的lib庫目錄
ifeq ($(TARGET_ARCH),unicore32)<br /> ifeq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true)<br />$(linked_module): $(TARGET_CRTBEGIN_STATIC_O) $(all_objects)$(all_libraries)$(TARGET_CRTEND_COM_O)$(TARGET_CRTEND_EXECUTABLE_O)$(transform-o-to-static-executable)<br /> 29 else<br /> 30 $(linked_module): $(TARGET_CRTBEGIN_EXECUTABLE_O) $(all_objects) $(all_libraries) $(T ARGET_CRTEND_COM_O) $(TARGET_CRTEND_EXECUTABLE_O)<br /> 31 $(transform-o-to-executable)<br /> 32 endif<br /> 33 else # !unicore32<br /> 34 ifeq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true)<br /> 35 $(linked_module): $(TARGET_CRTBEGIN_STATIC_O) $(all_objects) $(all_libraries) $(TARGE T_CRTEND_O)<br /> 36 $(transform-o-to-static-executable)<br /> 37 else<br /> 38 $(linked_module): $(TARGET_CRTBEGIN_DYNAMIC_O) $(all_objects) $(all_libraries) $(TARG ET_CRTEND_O)<br /> 39 $(transform-o-to-executable)<br /> 40 endif<br /> 41 endif # unicore32<br />
主要由以下幾個啟動相關調用庫:
crtbegin_com.o
crtbegin_executable.o
crtend_com.o crtend_executable.o
我們主要實現了兩個:crtend_com.o
crtend_executable.o
5) 修改build/core//shared_library.mk:與啟動庫相關
53 ifeq ($(TARGET_ARCH),unicore32)<br /> 54 $(linked_module): $(all_objects) $(all_libraries) /<br /> 55 $(LOCAL_ADDITIONAL_DEPENDENCIES) /<br /> 56 $(TARGET_CRTBEGIN_COM_O) $(TARGET_CRTEND_COM_O)<br /> 57 $(transform-o-to-shared-lib)<br /> 58 else<br /> 59 $(linked_module): $(all_objects) $(all_libraries) /<br /> 60 $(LOCAL_ADDITIONAL_DEPENDENCIES) /<br /> 61 $(my_target_crtbegin_so_o) $(my_target_crtend_so_o)<br /> 62 $(transform-o-to-shared-lib)<br /> 63 endif
6)在prebuilt下添加我們編譯器unicore-linux-xxx