1.阿里平头哥宣布,源码译自研处理器已成功落地,下编它的源码译性能如何?
2.å®ååiOSçåºå«
3.Androidå¦ä¹ ä¹Buildç¯å¢ä»ç»
阿里平头哥宣布,自研处理器已成功落地,下编它的源码译性能如何?
阿里巴巴宣布旗下的平头哥半导体完成了安卓对RISC-V的移植并开源了全部相关代码。从平头哥社区发布的下编各大网站源码免费下载软件信息来看,安卓系统已经可以在玄铁芯片上流畅运行。源码译
作为一种开源的下编处理器指令,RISC-V近年来备受热捧,源码译但是下编目前主要还是用于AI、嵌入式、源码译IoT等领域,下编移动终端领域至一直仍未有相关RISC-V芯片厂商涉足,源码译swap系统源码主要还是下编安卓系统对RISC-V支持不够。今天阿里巴巴方面宣布了一个重要进展,源码译旗下的平头哥半导体完成了安卓对RISC-V的移植并开源了全部相关代码。从平头哥社区发布的信息来看,安卓系统已经可以在玄铁芯片上流畅运行。
据了解,源码哥UID平头哥基于安卓开源项目(AOSP)实现了对RISC-V架构的支持。安卓软件栈主要包括系统内核、硬件抽象、运行时、框架层、应用五个层次的bootstrap modal源码近千个软件包,其中涉及到处理器架构相关移植工作主要包含:本地库与ART支持、Linux内核支持、build系统支持三大部分:
本地库与ART支持:
完成bionic、ART、Clang/LLVM、V8、溯源码价格NDK、VNDK、OpenGL等软件包的RISC-V架构支持:为bionic添加动态链接、系统调用、浮点数学库的支持;基于ART实现了RISC-V架构的DEX实时解释执行、dex2oat、JNI调用以及JIT编译优化,极大地提高了JAVA程序在RISC-V平台上执行的效率。
Linux内核支持:
完善了Clang/LLVM对Linux内核的编译支持,修复了大量Clang/LLVM的问题,首次将RISC-V架构的Linux内核与安卓系统进行了适配。
Build系统支持:
安卓的编译框架主要由blueprint和soong构成,平头哥整合编译框架、预编译的工具链、本地方法库、模拟器,应用和服务等模块,首次实现了RISC-V架构对安卓build系统的支持。
至于玄铁,则是前年阿里巴巴旗下的平头哥半导体发布的一款号称是业界最强的RISC-V处理器内核IP。资料显示,玄铁单核性能达到7.1 Coremark/MHz,主频达到2.5GHz,比当时业界最好的RISC-V处理器性能高%以上。据介绍,玄铁可以用于设计制造高性能端上芯片,应用于5G、人工智能以及自动驾驶等领域。
å®ååiOSçåºå«
ã1. åºç¨ç设å¤ä¸åï¼
ããIOSåå®åæ大çåºå«å¨äºæ¬èº«æåºç¨ç设å¤ä¸åãIOSç³»ç»ä¸»è¦æ¯åºç¨å¨iPhoneãIPadãitouch设å¤ä¸çæä½ç³»ç»ï¼å®åç³»ç»ä¸»è¦æ¯åºç¨å¨å®åæºè½ææºä¸çæä½ç³»ç»ã
ãã2. é¢å人群ä¸åï¼
ããIOSç³»ç»é¢åçæ¯ä¸é«å±æ¶å ¥ç人群ï¼æ人称å®ä¸ºâé«å¯å¸ âç³»ç»ï¼èå®åç³»ç»åæ¯é¢è¯ä¸ä½å±ç大ä¼äººç¾¤ï¼æ人称å®ä¸ºâå±ä¸ç³»ç»âã
ãã3.ç³»ç»çå¼æ¾æ§åºå«ï¼
ããå®åæ¥æèªå·±çå¼æºè®¡åAOSP(Android Open Source Project)ï¼åªè¦éµå¾ªGPLåApache Licence 2.0å¼æºåè®®ï¼é£ä¹ä½ å°±å¯ä»¥ä½¿ç¨å®åæºä»£ç è¿è¡äºæ¬¡å¼åãèå®åç±äºæºä»£ç å¼æ¾ï¼èªç¶å¯ç©æ§ä¹æ¯iOSé«ãæ¤å¤ï¼å®åæ¯iOSå¼æ¾äºæ´å¤çåºç¨æ¥å£APIï¼å¯ä»¥å¾èªç¶å°å©ç¨å®åå®ç°å¾å¤å¨iOSä¸ä¸æè ¾å°±æ²¡æ³åçåè½ãå¨å®åï¼å¯ä»¥éå¿éæå°æ´æ¢è¾å ¥æ³ï¼éæç¨ä»»ä½æµè§å¨æå¼é¾æ¥ï¼éæä»ä»»ä½éç»å®è£ ç¨åºï¼éæè°ç¨ç¬¬ä¸æ¹ç¨åºå享æ件ââè¿äºå¨iOSä¸ä¸è¶ç±é½åä¸å°ï¼å³ä½¿è¶ç±ä¹æªå¿ æ¯å®ååå¾æ´å¥½ã
ãã4. ç³»ç»çå®å ¨æ§åºå«ï¼
ããIOSç³»ç»æ¯ä¸æ¬¾æ¯è¾å¼ºå¤§çæä½ç³»ç»ï¼å¨IOSç³»ç»è¿è¡çç¨åºä¸ç®¡ç¨åºå¤å¤§é½ä¸ä¼é ææ»æºï¼ç©èµ·æ¥é常çæµç¨ï¼èä¸ç³»ç»çå®å ¨æ§æ¯è¾é«ã
ããå®åç³»ç»æ¯å±äºä»£ç ç³»ç»ï¼å¦æææçåºç¨ç¨åºéè¦ä¸è½½ä¸æ¥ä¹åæè½ç©ï¼ç³»ç»ç¨ä¹ ä¹åä¼ç»å¸¸åºç°å¡æºæè æ¯æ»æºçç°è±¡ï¼èä¸å®åç³»ç»è¿åå¨æ¶æçæ件å¨ç³»ç»ä¸èªå¨è¿è¡ï¼ç³»ç»æ¼æ´å¤ï¼å¯¼è´ä¸ªäººèµæ被çãç³»ç»èçµå¤§ï¼æµéæ¶è大çï¼ç³»ç»å®å ¨æ§ç¸å¯¹æ¥è¯´æ¯è¾ä½ã
ãã5. å¼åé¾åº¦ä¸åï¼
ããè¹ææä¾å®æ´é«æxcode,sdkçå¼åç¯å¢ï¼iosç³»ç»ä¸èç¸æ¿ï¼iosçæ¬ä¹é´ç软件éç¨ï¼å³å¼åä¸æ¬¾äº§åè¹æææ设å¤é½è½è¿è¡ãå ¶ç¡¬ä»¶ç强大ä¹è®©å¼ååçæ´å 容æã
Androidå¦ä¹ ä¹Buildç¯å¢ä»ç»
è¿éç¥è¿å¯¹androidå¨ææºä¸çæ件系ç»æ¡æ¶çéè¿°ï¼googleæè baidué½è½å¸®å©ä½ æ¾å°å¯¹åºçä¿¡æ¯ï¼ï¼ä¸»è¦çgoogleæ¯å¦ä½æçæåéçrootfsçå·¥ä½æ´åå°å®çbuildä½ç³»å½ä¸ï¼åæ¶ï¼ä¼é¡ºå¸¦çä¸ä¸CyanogenModä¸å¯¹åºåç§æºåçbuildæºå¶ã
é¦å ï¼æ¥çä¸ä¸Androidçbuildç³»ç»ä¸ï¼ä½¿ç¨å°çç¼è¯é项åç¸å ³å·¥å ·
å ·ä½çç®å½å¨ï¼mydroid/build/tools/ä¸
|-- acp
è¿æ¯ä¸ä¸ªç¨å¾®æ¹è¯çcpå½ä»¤ï¼ç¨æ¥åºä»å¨windows/MAC/Linuxä¸çcpå½ä»¤ç缺é·ï¼å ¶ä¸çREADMEå¾å¼å¾ä¸çï¼
|-- adbs
è¿æ¯ä¸ä¸ªç¨æ¥æ¥çcrashé®é¢çå·¥å ·ï¼è¯¦ç»è¯·çãAndroidè°è¯å·¥å ·ä¹adbsã
|-- Android.mk
|-- apicheck
ç¨æ¥è¿è¡åå¸åçAPIæ£æ¥ï¼åè§mydroid/build/core/tasks/apicheck.mkï¼ï¼æ¯å¦æ°ç¼è¯çç³»ç»ä¸æç ´åAPIå ¼å®¹æ§ææ¯éæ³çAPI
è¿éç代ç æ¯ç¨Javaåçç¨æ¥æ£æ¥ç¼è¯æ¶çæçAPIç¸å ³ä¿¡æ¯çxmlæ件ï¼mydroid/framework/base/api/ä¸ï¼ï¼å¯ä»¥åèéé¢å¯¹äºxmlæ件解æç代ç
|-- apriori
å®ç°prelinkçå·¥å ·ï¼ç®åä»ç»åè§ï¼mydroid/bionic/linker/README.TXTï¼
|-- atree
为android SDKæå¡çä¸ä¸ªå·¥å ·ï¼ç¨æ¥æç §æå®xxx.atreeæ件ä¸çå 容è¿è¡ä¸äºæ件æä½
|-- bin2asm
ä¸å¤ªæç½å ·ä½çç¨å¤ï¼åºè¯¥æ¯ç¨æ¥åºä»macä¸ç¼è¯androidä¸äºä¸gccç¸å ³çé®é¢
|-- buildinfo.sh
çætargetä¸çåç§xxx.propæ件ï¼å¦system.prop, build.propç
|-- check_builds.sh
å è£ äºdiffï¼ç¨æ¥ç2个åå¸çæ¬ä¹é´åå
|-- check_prereq
deviceä¸è¿è¡otaå级æ¶çå·¥å ·ä¹ä¸
|-- compare_fileslist.py
ä¸check_builds.shé åå®æçæ¬æ¯è¾çèæ¬
|-- droiddoc
Androidæ´å ·javadocçä¸äºç§»æ¤
|-- dump-package-stats
ç®åçæ¥çä¸ä¸ªjar/apkæ件å çdexåå ¶å®æ件ç大å°ä¿¡æ¯
|-- event_log_tags.py
å¤çevent-log-tagsçå 容ï¼å ³äºevent-log-tagsæ件çæä¹åè§ãAndroidå¦ä¹ ä¹event-log-tagsæ¯ç¥é©¬ã
|-- fileslist.py
ç®åçååºæå®ç®å½ä¸æææ件å大å°çèæ¬ -- å¯ä»¥æ¾å ¥èªå·±çå·¥å ·åºäºä½¿ç¨ï¼ï¼
|-- findleaves.py
å¨æå®ç®å½ä¸ï¼å¯å¤ä¸ªï¼æ¾æå®æ件çèæ¬ -- å¯ä»¥æ¾å ¥èªå·±çå·¥å ·åºäºä½¿ç¨ï¼ï¼
|-- fixlinebreaks.sh
æwindowsä¸çæ¢è¡æ¹ä¸ºlinuxä¸ç -- å¯ä»¥æ¾å ¥èªå·±çå·¥å ·åºäºä½¿ç¨ï¼ï¼
|-- fs_config
ååºæå®æ件夹åæ件çæé
|-- fs_get_stats
å¾å°æå®æ件夹ä¸æ件çç®åstatsä¿¡æ¯
|-- iself
å¤ææ件æ¯å¦æ¯ELFæ ¼å¼
|-- isprelinked
å¤ææ件æ¯å¦æ¯prelinkè¿ç
|-- java-event-log-tags.py
å¤çevent-log-tagsçå 容ï¼å ³äºevent-log-tagsæ件çæä¹åè§ãAndroidå¦ä¹ ä¹event-log-tagsæ¯ç¥é©¬ã
|-- kcm
key character mapçå·¥å ·ï¼ ç¸å ³èµæåç §ï¼
|-- lsd
!!!!!!
|-- merge-event-log-tags.py
å¤çevent-log-tagsçå 容ï¼å ³äºevent-log-tagsæ件çæä¹åè§ãAndroidå¦ä¹ ä¹event-log-tagsæ¯ç¥é©¬ã
|-- mktarball.sh
ä¸fs_get_statsé åèæ§è¡çæå å·¥å ·
|-- print_module_licenses.sh
æ¾ç¤ºå½åç®å½ä¸ææmoduleä¿¡æ¯
|-- releasetools
-- check_target_files_signatures
|-- common.py
|-- edify_generator.py
|-- img_from_target_files
|-- ota_from_target_files
`-- sign_target_files_apks
|-- rgb
rgb转æ¢å·¥å ·
|-- signapk
å½ä»¤è¡ä¸å¯¹jarå ç¾åçå·¥å ·
|-- soslim
Androidå®å¶çç¼è¯å·¥å ·ä¹ä¸ï¼ç®åä»ç»åè§ï¼mydroid/bionic/linker/README.TXTï¼
|-- warn.py
解æAndroidç³»ç»ç¼è¯logçå·¥å ·
`-- zipalign
zipfileç对é½å·¥å ·ï¼åè§è¯¥æ件夹ä¸çREADME.TXT
#p#å¯æ é¢#e#
å¨æ¥ççAndroidç¼è¯ç³»ç»ä¸å®ä¹çä¸äºéç¨XXX.mkæ件
mydroid/build/core/
|-- armelflib.x
|-- armelf.x
|-- armelf.xsc
|-- base_rules.mk
|-- binary.mk
|-- build_id.mk
|-- build-system.html
|-- checktree
|-- cleanbuild.mk
|-- cleanspec.mk
|-- clear_vars.mk
|-- combo
|-- config.mk
|-- copy_headers.mk
|-- definitions.mk
|-- device.mk
|-- dex_preopt.mk
|-- distdir.mk
|-- droiddoc.mk
|-- dumpvar.mk
|-- dynamic_binary.mk
|-- envsetup.mk
|-- executable.mk
|-- filter_symbols.sh
|-- find-jdk-tools-jar.sh
|-- help.mk
|-- host_executable.mk
|-- host_java_library.mk
|-- host_native_test.mk
|-- host_prebuilt.mk
|-- host_shared_library.mk
|-- host_static_library.mk
|-- java_library.mk
|-- java.mk
|-- legacy_prebuilts.mk
|-- main.mk
|-- Makefile
|-- multi_prebuilt.mk
|-- native_test.mk
|-- node_fns.mk
|-- notice_files.mk
|-- package.mk
|-- pathmap.mk |-- phony_package.mk
|-- prebuilt.mk
|-- process_wrapper_gdb.cmds
|-- process_wrapper_gdb.sh
|-- process_wrapper.sh
|-- product_config.mk
|-- product.mk
|-- proguard.flags
|-- proguard_tests.flags
|-- raw_executable.mk
|-- raw_static_library.mk
|-- root.mk
|-- shared_library.mk
|-- static_java_library.mk
|-- static_library.mk
|-- tasks
|-- user_tags.mk
`-- version_defaults.mk
#p#å¯æ é¢#e#
è¿éï¼ç®å½å¨mydroid/build/core/tasks/æä¸äºç¹å«çtask
|-- apicheck.mk, å¤æapiæ¯å¦ç¬¦åAOSPçè§è
|-- cts.mk ctsæµè¯ï¼ å¯ä»¥å¨ä»£ç æ ¹ç®å½ï¼ make cts, ç¼è¯ç»æä¹åï¼è¿å ¥out/host/linux-x/bin/ä¸ï¼æ§è¡ctså½ä»¤
|-- ide.mk IDEå¼åç¯å¢
|-- product-graph.mk
`-- sdk-addon.mk
NDKçbuildç¯å¢æ²¡æå å«å¨æ 注é¾å¾AOSPç/build/ç®å½ä¸
èæ¯å¨mydroid/ndk/buildä¸
$ cd ndk/build/tools
$ export ANDROID_NDK_ROOT=aosp-root/ndk
$ ./make-release --help
ä¸äºå°æå·§
å¦ä½æ¾ç¤ºæ¯æ¬¡ç¼è¯æå å«çææxxx.mkæ件
æ¾å°build/core/main.mk
æinclude $ï¼subdir_makefilesï¼æ¿æ¢ä¸º
[plain] view plaincopy $ï¼foreach subdir_makefile, $ï¼subdir_makefilesï¼ï¼
$ï¼info Including $ï¼subdir_makefileï¼ï¼
$ï¼eval include $ï¼subdir_makefileï¼ï¼)
subdir_makefile :=
å¦æéè§APIç¸å ³çPACKAGING/checkapi-current-timestamp] Error
éè¦æ§è¡ï¼make update-api
å¦ä½å¨AOSP代ç ç®å½ä¹å¤ç¼è¯
[plain] view plaincopy # Paths and settings
TARGET_PRODUCT = generic
ANDROID_ROOT = /home/karim/android/aosp-2.3.x
BIONIC_LIBC = $ï¼ANDROID_ROOTï¼/bionic/libc
PRODUCT_OUT = $ï¼ANDROID_ROOTï¼/out/target/product/$ï¼TARGET_PRODUCTï¼
CROSS_COMPILE =
$ï¼ANDROID_ROOTï¼/prebuilt/linux-x/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
# Tool names
AS = $ï¼CROSS_COMPILEï¼as
AR = $ï¼CROSS_COMPILEï¼ar
CC = $ï¼CROSS_COMPILEï¼gcc
CPP = $ï¼CCï¼ -E
LD = $ï¼CROSS_COMPILEï¼ld
NM = $ï¼CROSS_COMPILEï¼nm
OBJCOPY = $ï¼CROSS_COMPILEï¼objcopy
OBJDUMP = $ï¼CROSS_COMPILEï¼objdump
RANLIB = $ï¼CROSS_COMPILEï¼ranlib
READELF = $ï¼CROSS_COMPILEï¼readelf
SIZE = $ï¼CROSS_COMPILEï¼size
STRINGS = $ï¼CROSS_COMPILEï¼strings
STRIP = $ï¼CROSS_COMPILEï¼strip
export AS AR CC CPP LD NM OBJCOPY OBJDUMP RANLIB READELF
SIZE STRINGS STRIP
# Build settings
CFLAGS = -O2 -Wall -fno-short-enums
HEADER_OPS = -I$ï¼BIONIC_LIBCï¼/arch-arm/include
-I$ï¼BIONIC_LIBCï¼/kernel/common
-I$ï¼BIONIC_LIBCï¼/kernel/arch-arm
LDFLAGS = -nostdlib -Wl,-dynamic-linker,/system/bin/linker
$ï¼PRODUCT_OUTï¼/obj/lib/crtbegin_dynamic.o
$ï¼PRODUCT_OUTï¼/obj/lib/crtend_android.o
-L$ï¼PRODUCT_OUTï¼/obj/lib -lc -ldl
# Installation variables
EXEC_NAME = example-app
INSTALL = install
INSTALL_DIR = $ï¼PRODUCT_OUTï¼/system/bin
# Files needed for the build
OBJS = example-app.o
# Make rules
all: example-app
.c.o:
$ï¼CCï¼ $ï¼CFLAGSï¼ $ï¼HEADER_OPSï¼ -c { 1}lt;
example-app: ${ OBJS}
$ï¼CCï¼ -o $ï¼EXEC_NAMEï¼ ${ OBJS} $ï¼LDFLAGSï¼
install: example-app
test -d $ï¼INSTALL_DIRï¼ || $ï¼INSTALLï¼ -d -m $ï¼INSTALL_DIRï¼
$ï¼INSTALLï¼ -m $ï¼EXEC_NAMEï¼ $ï¼INSTALL_DIRï¼
clean:
rm -f *.o $ï¼EXEC_NAMEï¼ core
distclean:
rm -f *~
rm -f *.o $ï¼EXEC_NAMEï¼ core
å¦ä½å¢å ä¸ä¸ªæ°ç设å¤
[plain] view plaincopy $ cd ~/android/aosp-2.3.x
$ . build/envsetup.sh
$ mkdir -p device/acme/coyotepad
$ cd device/acme/coyotepad
è¿å ¥AndroidProducts.mk
PRODUCT_MAKEFILES :=
$ï¼LOCAL_DIRï¼/full_coyotepad.mk
对äºfull_coyotepad.mk
$ï¼call inherit-product, $ï¼SRC_TARGET_DIRï¼/product/languages_full.mkï¼
$ï¼call inherit-product, $ï¼SRC_TARGET_DIRï¼/product/full.mkï¼
DEVICE_PACKAGE_OVERLAYS :=
PRODUCT_PACKAGES +=
PRODUCT_COPY_FILES +=
PRODUCT_NAME := full_coyotepad
PRODUCT_DEVICE := coyotepad
PRODUCT_MODEL := Full Android on CoyotePad, meep-meep
å¨BoardConfig.mkä¸
TARGET_NO_KERNEL := true
TARGET_NO_BOOTLOADER := true
TARGET_CPU_ABI := armeabi
BOARD_USES_GENERIC_AUDIO := true
USE_CAMERA_STUB := true
æå¼vendorsetup.sh
add_lunch_combo full_coyotepad-eng
#p#å¯æ é¢#e#