我无法弄清楚这条ARM指令的作用:
strd.w r0, r1, [r2]
Run Code Online (Sandbox Code Playgroud)
我知道这是一个商店指令,存储的东西,*r2
但我不完全确定.为什么有两个源寄存器(r0
和r1
)以及d.w
后缀是什么意思?
我在哪里可以获得Android 4.0(Ice Cream Sandwich)内核源代码?
虽然这可能是一些人之前提出过的愚蠢问题,但我似乎无法在任何地方找到合适的答案,因为:
谷歌决定是非常有用的和重定向android.kernel.org
到http://source.android.com/source/downloading.html
,其中包括Android系统的每一个部分从内核分开.我不明白这背后的逻辑.
git clone https://android.googlesource.com/kernel/common.git
做一些奇怪的事情并创建一个巨大的(600 MB +) .git
文件夹而不创建源树.关于git repo,我没有给出两个问题,我只需要源代码树.
GitHub上的所有内核分支都非常过时.
我想测试我编写的第一阶段引导加载程序,以便引导加载未完成的内核,所以我可以调试它,看它是否有效.是否有可能使Qemu模拟NAND存储设备,从中复制引导加载程序并执行它?如果是这样,我将如何去做呢?
基本上,Qemu需要初始化虚拟CPU和虚拟NAND,将其中一大块加载到RAM中,然后让CPU跳转到它.加载器在内存中之后,它将能够加载文件系统,查找内核,解压缩,解密,解码,重定位和执行它.
是否可以开发一个不依赖 Dalvik 运行时和任何 Java 库而运行的本机应用程序?
基本上,我想制作一个可以通过 shell 运行的本机二进制文件,该 shell 可以在没有system_server
进程运行的情况下运行。理想情况下,我希望能够通过 OpenGL 系统渲染内容来创建自己的 Window Server,而不是依赖 SurfaceFlinger(SurfaceFlinger 也会因为未system_server
运行而失效)。
我问这个问题的原因是我想尝试用 C/C++ 进行较低级别的 Android 开发,而 Java 根本不需要。基本上,我正在尝试开发一个独立的应用程序,可以通过OpenGL+Cairo渲染事物并接收 HID 输入。
PS:我知道NDK是什么,但这不是我要找的。我想创建独立的二进制文件,而不是创建在 Dalvik VM 内运行的东西。
我无法让mmap函数工作.它返回EINVAL错误代码.
void* mapped =
mmap((void*)(map_addr + slide),
map_size,
PROT_WRITE | PROT_READ,
MAP_PRIVATE | MAP_ANON,
bprm->file,
map_offset);
Run Code Online (Sandbox Code Playgroud)
我在我的平台(达尔文)上检查了这个功能的文档,似乎没有任何错误.mmap的手册页介绍了返回EINVAL的四种情况.
[EINVAL] MAP_FIXED was specified and the addr argument was not page
aligned, or part of the desired address space resides out of the
valid address space for a user process.
Run Code Online (Sandbox Code Playgroud)
未指定MAP_FIXED,因此不是这个.
[EINVAL] flags does not include either MAP_PRIVATE or MAP_SHARED.
Run Code Online (Sandbox Code Playgroud)
MAP_PRIVATE存在.
[EINVAL] The len argument was negative.
Run Code Online (Sandbox Code Playgroud)
调用时的len(map_size)参数是8192.
[EINVAL] The offset argument was not page-aligned based on …
Run Code Online (Sandbox Code Playgroud) 是否存在针对ARM(v6)处理器优化的libm(libmath)?
我正在研究GNU实现,它似乎没有被优化(但它确实有x86).似乎libm的大多数实现都没有ARM特定的优化.
是否可以建议内核绕过调度程序逻辑,立即执行上下文切换到不同的线程?
例如,如果我刚刚创建了一个线程/进程,并且clone
我想立即开始执行它,立即放弃当前上下文,而不是等待内核下次重新安排内容。
理想情况下,我正在寻找与thread_switch
Mach 内核上的调用相同的东西。
所以,我想知道 - 我将如何在内核中实现复制内存页面(struct page
)并利用写时复制机制而不是立即传输数据.
现在,我通过将用户地址转换为页面来allocate_pages
复制页面,使用内核分配所需的页面数量,使用它们进行复制copy_pages
,然后最终使用它们将它们映射到所需的区域install_special_mapping
.这有效,但我觉得这可以使用写时复制机制进行优化.
所以,我有四个整数,我需要找出这四个中最低的两个.用C(或任何其他语言)这样做最有效的方法是什么?
编辑:为了提高效率,我需要一个固定的实现,因为这是一个非常关键的操作,将要执行数千次.
我有一个quad类型,定义为:
typedef struct __point {
float x;
float y;
} point_t;
typedef struct __quad {
point_t p1;
point_t p2;
point_t p3;
point_t p4;
} quad_t;
Run Code Online (Sandbox Code Playgroud)
如果我在同一平面上有两个这样的四边形,我希望能够计算出这些四边形的交点.例如,如果我们有四A和四B,如果B的任何一个点落在A之外,那么该算法应该产生一个带有点的四边形,如下图所示(A为红色,B为紫色):
编辑:点的排序并不重要,因为我稍后会使用这些点构建一个将在A中绘制的四边形.