我有一些Android的C代码,可以进行大量的低级数字运算.我想知道我应该使用哪些设置(例如我的Android.mk和Application.mk),以便生成的代码可以在所有当前的Android设备上运行,但也可以利用特定芯片组的优化.我正在寻找使用良好的默认Android.mk和Application.mk设置,我想避免使用#ifdef分支丢弃我的C代码.
例如,我知道ARMv7有浮点指令,一些ARMv7芯片支持NEON指令,默认ARM不支持这些指令.是否可以设置标志,以便我可以使用NEON,没有NEON的ARMv7和默认的ARM构建来构建ARMv7?我知道如何做后两者但不是全部3.我对我使用的设置持谨慎态度,因为我认为当前默认设置是最安全的设置以及其他选项有哪些风险.
对于GCC特定的优化,我使用以下标志:
LOCAL_CFLAGS=-ffast-math -O3 -funroll-loops
Run Code Online (Sandbox Code Playgroud)
我检查了所有这三个加速了我的代码.还有其他我可以添加的常见内容吗?
我的另一个提示是将"LOCAL_ARM_MODE:= arm"添加到Android.mk以加快更新的手臂芯片(尽管我对这件事以及旧芯片上发生的事情感到困惑).
有没有人成功编译了android内核并在Android模拟器中测试过它,如果有的话还有什么特别需要做的吗?
SDK的文档非常好,但是我很难找到用于编译内核和在模拟器中设置自定义机器的文档.
我正在尝试分析QEMU源代码.
我知道它很庞大,直到约会还没有官方文件.
我主要关注的是指令缓存管理和TCG操作.
任何指向它们的指针都会有所帮助吗?
我想在指令级别对我的C代码进行统计分析.我需要知道我正在执行多少次加法,乘法,除法等.
这不是您通常的磨码分析要求.我是算法开发人员,我想估算将代码转换为硬件实现的成本.为此,我被问到运行时的指令调用故障(解析编译的程序集是不够的,因为它不考虑代码中的循环).
环顾四周后,似乎VMware可能提供了一个可能的解决方案,但我仍然找不到能够跟踪我的进程的指令调用流的特定功能.
你知道任何能够实现这一目标的分析工具吗?
我正在尝试使用GNU汇编程序学习ARM汇编程序编程.我用QEmu设置了我的PC,并拥有Debian ARM-HF chroot环境.
如果我汇编并链接我的测试程序:
.text
.global _start
_start:
mov r0, #6
bx lr
Run Code Online (Sandbox Code Playgroud)
有:
as test.s -o test.o
ld test.o -o test
Run Code Online (Sandbox Code Playgroud)
然后将文件加载到gdb并在_start上设置断点:
root@Latitude-E6420:/root# gdb test GNU gdb (GDB) 7.6.1 (Debian 7.6.1-1) Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was …
我按照步骤 https://developer.here.com/mobile-sdks/documentation/android/topics/app-simple-android-studio.html
但我得到的错误是:无法初始化Map Fragment MISSING_LIBRARIES
映射init代码:
mapFragment.init(new OnEngineInitListener() {
@Override
public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
if (error == OnEngineInitListener.Error.NONE) {
// retrieve a reference of the map from the map fragment
map = mapFragment.getMap();
// Set the map center to the Vancouver region (no animation)
map.setCenter(new GeoCoordinate(49.196261, -123.004773, 0.0),
Map.Animation.NONE);
// Set the zoom level to the average between min and max
map.setZoomLevel(
(map.getMaxZoomLevel() + map.getMinZoomLevel()) / 2);
} else {
System.out.println("ERROR: Cannot initialize Map Fragment " + error.toString());
Toast.makeText(MainActivity.this, …Run Code Online (Sandbox Code Playgroud) 几天来,我正在研究一个小项目,以探索内核编程。然而,我在网上看了很多关于内核编译的问题,并在之前问过一个问题,但我在某些时候仍然感到迷茫。
如果我需要进行一些内核编程,我认为使用 Linus Torvalds 的 Linux 源代码将是最好的起点。所以我做了以下操作(来自 MacOS High Sierra):
vagrant initvagrant upvagrant sshcd /vagrant/linux 为了进入Linux源解压文件夹make menuconfig 我只是按了确定/保存sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4现在,我遇到了一个小错误:
agrant @vagrant-ubuntu-trusty-64:/vagrant/Kernel-Programming/linx-kernel$ sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CHK scripts/mod/devicetable-offsets.h
CHK include/generated/timeconst.h
CHK include/generated/bounds.h
CHK include/generated/asm-offsets.h
CALL scripts/checksyscalls.sh …Run Code Online (Sandbox Code Playgroud) android ×3
qemu ×3
assembly ×2
c ×2
linux ×2
android-ndk ×1
arm ×1
emulation ×1
gcc ×1
gdb ×1
here-api ×1
instructions ×1
linux-kernel ×1
profiling ×1