Articles of arm

如何使用一个应用程序制作嵌入式Android操作系统?

我想在Android(ARM)上构建我自己的嵌入式系统,只使用Android发行版但没有启动器的设备。 要么 我希望启动Android,我的应用程序在顶部启动,并拒绝关闭它并从我的应用程序关闭Android。

arm64和aarch64之间的差异

我有两个“解锁”设备,一个iPad mini 3和一个Galaxy Edge 6,它们都有一个终端和一组简单的unix命令。 我认为这两款设备都配备了arm64处理器,但是当我运行时 uname -a 在两台设备上我都得到了以下内容: 对于iPad mini 3: xxxxs-iPad:/var/mobile root# uname -a Darwin xxxx-iPad 14.0.0 Darwin Kernel Version 14.0.0: Wed Jun 24 00:50:15 PDT 2015; root:xnu-2784.30.7-30/RELEASE_ARM64_S5L8960X iPad4, **arm64**, J85mAP 对于三星Galaxy s6 Edge: u0_a203@zerolte:/ $ uname -a Linux localhost 3.10.61-4497415 #1 SMP PREEMPT Thu Apr 9 15:06:40 KST 2015 **aarch64** GNU/Linux 如果我没有错,那么J85mAP和GNU […]

想要编译本机Android二进制文件我可以在手机终端上运行

我已经尝试了几天来编译一个本机ARM Android二进制文件,它将使用终端应用程序在我的手机上执行。 我想生成与手机上安装的标准Posix二进制文件相同types的二进制文件,如ls,mkdir等。我已经在Mac OS X下载了Android NDK,并且能够无错误地编译简单的ELF二进制文件。 但是,当我将它们转移到手机时,它们总是会出现段错误。 也就是说,在GCC中使用-static编译时会出现段错误。 如果我不使用-static,他们会抱怨没有链接等等。简单地说,它们不起作用。 我的假设是它们没有正确链接到Android标准C库。 即使我将我的二进制文件与NDK提供的libc链接,它们仍然无法正常工作。 我读到Android使用Bionic C库,并试图为它下载源代码,但我不确定如何从它构建一个库(它似乎是所有ARM程序集)。 手机上的Android C库是否与Android NDK提供的库不同? 包含在NDK中的那个不允许我编译我可以通过终端执行的本机二进制文件吗? 非常感谢任何指导! 更新: 我终于在Mac OS X上使用GCC 4.7.0了解它。我下载了Bionic标头,然后使用Android NDK附带的C库编译了一个动态链接的二进制文件。 我能够使用手机的C lib(二进制为33K)获得一个测试应用程序在手机上工作。 我还尝试静态链接NDK的C库,这也有效。 为了使这一切工作,我必须将-nostdlib传递给GCC,然后手动将crtbegin_dynamic.o和crtend_android.o添加到GCC的命令行。 它的工作原理如下: $CC \ $NDK_PATH/usr/lib/crtbegin_dynamic.o \ hello.c -o hello \ $CFLAGS \ $NDK_PATH/usr/lib/crtend_android.o 对于静态二进制文件,请使用“crtbegin_static.o”。 这在crtbegin_dynamic.S / crtbegin_static.S源中进行了解释。 对于这个实验,我只使用普通的’ol GCC 4.7.0和Binutils 2.22。 我还使用newlib编译了GCC,但我实际上并没有将我的ARM二进制文件与newlib链接起来。 我强迫GCC / ld直接链接到随Android NDK提供的libc,或者在动态二进制文件的情况下,链接到手机上的libc。

如何获得Android本机代码中的高分辨率定时器?

我正在寻找一种方法来获得Android上的高分辨率定时器(时钟源)。 这必须在本地代码,并可能是相当不便携的。 我想微秒的分辨率,或更好。 对于我的特殊应用,分辨率比精度更重要,而单调的计时器是最好的。 我已经使用Android 4.0.3在特定的ARMv7芯片组上进行了testing。 我到目前为止所尝试的是: clock_gettime(CLOCK_MONOTONIC) :在目标硬件上以1ms为单位递增( EDIT最初由于我的代码中的错误而被认为是10ms,1ms是正确的,但还不是很好) gettimeofday() :类似于clock_gettime 我还没有尝试过: System.nanoTime() :这不是本地的。 我相信这是基于clock_gettime(),但是我更愿意找出底层的东西,直接使用它。 /dev/rtc 某种ARM指令/工具,可能是SysTick ( http://web.eecs.umich.edu/~prabal/teaching/eecs373-f10/readings/ARMv7-M_ARM.pdf )或通用计时器(GPT)。 另见(相关问题,但不回答): Android JNI中的高精度定时器 在Android上获得高精度定时

gradle + ndkbuild + android studio 2.2如何设置支持的ABI?

我想使用Android Studio与ndkbuild集成。 我的“本地”项目的一部分只为armeabi-v7a-hard和x86构build,并且如果我只是在jni目录中运行ndk-build ,那么所有的工作都很好。 我在Application.mk有适当的行: APP_ABI := armeabi-v7a-hard x86 要将项目整合到android studio中,我将这些行添加到build.gradle : externalNativeBuild { ndkBuild { path 'src/lib/jni/Android.mk' } } 但由于某些原因, gradle build尝试使用APP_ABI=armeabi构build本机代码并失败,因为我的代码只能用armeabi-v7a-hard构build。 那么如何才能告诉gradle只为armeabi-v7a-hard和x86构build我的代码,或者只是不忽略来自Application.mk APP_ABI行? 我尝试这样的变体: defaultConfig { ndk { abiFilters 'x86', 'armeabi-v7a-hard' } } 但是gradle没有这样的信息: ABIs [armeabi-v7a-hard]不适用于平台,将被排除在build筑和包装之外。 可用的ABI是[armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,mips,mips64]。 请注意,我使用ndk 10,而不是最后一个(ndk 13),其中有armeabi-v7a-hard和ndk.dir在local.properties到正确的值。

Android CPU ARM架构

我们有一个Android的CPU相关的代码,我想看看有多less客户使用的设备是ARMv6 / ARMv7,如果还有ARM v5,有多lessARMv6有VFP,什么是Tegra或Neon百分比。 任何提示可以find这样的统计信息? BR STeN

Android NDK代码中的SIGILL

我有一个市场上的NDK应用程序,并得到了关于SIGILL信号的本地崩溃报告。 (我使用谷歌的breakpad生成本机崩溃报告。)这里是详细信息: 我的应用程序是为armeabi-v7a编译的,支持NEON。 它在采用ARM-7(Cortex-A9)的NVIDIA Tegra 2处理器上坠毁。 每次都发生。 (联系用户) 崩溃地址是0x399cc ,信号是SIGILL ,它在我的代码中。 注册和拆卸: r4 = 0x001d50f0 r5 = 0x001d50f0 r6 = 0x598e2a3c r7 = 0x00000000 r8 = 0x00000001 r9 = 0x001c22b0 r10 = 0x00000000 fp = 0x81216264 sp = 0x598e2a18 lr = 0x816399cb pc = 0x816399cc 0x000399c6 <_ZN8Analyzer15setExpAvgFactorEi+22>: blx 0x30508 0x000399ca <_ZN8Analyzer15setExpAvgFactorEi+26>: fconstd d16, #7 0x000399ce […]

为什么gcc emmiting代码与ARM指令集的2字节边界alignment?

我正在使用GCC(包含在Android NDK中的版本)检查我正在为ARM Android平台编译的C程序的汇编语言输出。 我指定了长度为4个字节的ARM指令集,而不是THUMB,但令人惊讶的是,emmited汇编语言代码将函数alignment到2个字节的边界! 下面是生成的代码显示错误.align指令的示例: .Ltext0: .global __aeabi_dmul .global __aeabi_d2iz .section .text.InitializeFIRFilter,"ax",%progbits .align 2 .global InitializeFIRFilter .type InitializeFIRFilter, %function InitializeFIRFilter: .fnstart 根据这个文件 ,正确的alignment应该是4这是有道理的。 我试图通过使用-falign-functions = 4强制alignment,但它被忽略。 这里是我在Android.mk文件中指定的构build标志 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_ARM_MODE := arm LOCAL_MODULE := nativeJadeMobile LOCAL_SRC_FILES := nativeJadeMobile.c fftasm.s LOCAL_LDLIBS := -llog LOCAL_CFLAGS += -marm -ffast-math -O2 -march=armv6 -falign-functions=4 -save-temps -S […]

gcc ON arm / android

我刚刚拿到一个EEE垫变压器。 就像我自己的任何硬件,我想有一个C编译器。 我知道我可以交叉编译,但是我想在设备本身上进行开发。 我search谷歌和所有我似乎可以find如何build立一个x86 / 64 Linux的ARM工具链的页面。 思考?

有没有可能在一个非rooted的android手机上运行本地的arm二进制文件?

那么,我一直在低级别的Android编程(使用CodeSourcery工具链的本地C / C ++)的低水位潜水。 我试着在模拟器上的可执行文件,它的工作。 我想尝试一下真实的设备。 所以我插入我的联系,并将文件推到文件系统。 然后我试图执行这个二进制文件,我得到了一个权限错误。 我挂载它,或者发送它的地方并不重要,我不是root,也不是让我执行它。 有什么办法可以在无根的手机上运行这样的程序吗?