我已经看过很多关于在Raspberry Pi上运行Mono/.NET代码的讨论.在Raspberry Pi上实际运行任何Mono代码是否有任何成功?
在他们的网站上,他们列出了几个在该设备上运行的Linux发行版,其中一些发行版包括Mono.但是,没有详细说明Mono是否适用它.
有工作实施吗?
我想知道任何微处理器中FIQ和IRQ中断系统之间的区别,例如:ARM926EJ.
我一遍又一遍地阅读定义,我仍然没有得到ARM中的SP和LR?我理解PC(它显示下一条指令的地址),SP和LR可能是相似的,但我只是不知道它是什么.请你帮助我好吗?
编辑:如果你能用例子来解释它,那就太棒了.
编辑:终于找出了LR的用途,仍然没有得到SP的用途.
我们在Android开发中需要ARM EABI v7a系统映像吗?该特定图像的目的是什么?
我最近几天一直遇到这个问题而且我无法理解这里真正发生的事情,或者问题是什么.
我有一个带有这些标志的makefile:
CC = arm-linux-gnueabihf-gcc-4.6
FLAGS = -O3 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -std=gnu99
Run Code Online (Sandbox Code Playgroud)
我在.a文件中有一个库,它有一些目标文件,我需要做的就是用可执行文件链接它们.我知道原型和所有这些,唯一抱怨的是以下内容:
/usr/bin/ld: error: *EXECUTABLE* uses VFP register arguments, *OBJECTFILE* does not
/usr/bin/ld: failed to merge target specific data of file *OBJECTFILE*
Run Code Online (Sandbox Code Playgroud)
当我不使用-mfloat-abi = softfp时,我得到另一个与浮点寄存器有关的错误.
有没有人知道造成这种情况的原因,以及我可以做些什么来解决这个问题,例如让我的可执行文件不使用虚拟浮点寄存器参数?
x@x:~/Desktop/perf_test$ make
arm-linux-gnueabihf-gcc-4.6 -c -O3 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -ftree-vectorize -std=gnu99 -mfloat-abi=softfp perf_test.c ../baseline/util.c
arm-linux-gnueabihf-gcc-4.6 -o perf_test perf_test.o util.o ../baseline/lib.a
/usr/bin/ld: error: perf_test uses VFP register arguments, perf_test.o does not
/usr/bin/ld: failed to merge target specific data of file perf_test.o
/usr/bin/ld: error: …
Run Code Online (Sandbox Code Playgroud) arm-linux-gcc和arm-none-linux-gnueabi和arm-linux-gnueabi工具链有什么区别?
他们编译不同吗?
我有两个"解锁"设备,一个iPad mini 3和一个Galaxy Edge 6,它们都有一个终端和一组简单的unix命令.我认为这两款设备都有arm64处理器,但是当我跑步时
uname -a
Run Code Online (Sandbox Code Playgroud)
在两台设备上我得到以下内容:
对于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
Run Code Online (Sandbox Code Playgroud)
对于三星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
Run Code Online (Sandbox Code Playgroud)
如果我没有错,那么J85mAP和GNU/Linux的最后一个信息代表固件,而倒数第二个信息,arm64和aarch64代表处理器.
我的问题如下:显然字符串"arm64"和"aarch64"不一样,但我一直认为arm64和aarch64是相同的.(甚至告诉你何时将arm64标签放在这里的问题上.)
那么,他们真的相同吗?
特别是,对于两个目标的交叉构建库,我应该担心什么?事实上,我考虑到了gcc 5.2.0,但也许还有较低版本.我可以通过
-target=arm64
Run Code Online (Sandbox Code Playgroud)
要么
-target=aarch64
Run Code Online (Sandbox Code Playgroud)
根据我的目标设备,只是担心配置的其余选项?
编辑 Hum,再次寻找,但没有成功.
我们知道,对于X86架构:按下电源按钮后,机器开始执行0xFFFFFFF0处的代码,然后它开始在BIOS中执行代码以进行硬件初始化.BIOS执行后,它使用bootloader将操作系统映像加载到内存中.最后,操作系统代码开始运行.对于ARM体系结构,使用后的启动过程按电源按钮是什么?谢谢!
TL/DR:我在哪里可以找到有关为ARM(gnueabi)平台(旨在在Raspberry Pi设备上运行)构建GCC 4.7.0交叉编译工具链的更多信息?
我刚买了一个全新的Raspberry Pi,我非常渴望为它开始编程.我已经设法安装了GCC工具链(我正在使用Arch Linux系统映像)并编译了一些基本程序,一切正常.
我也尝试编译Boost库,因为我经常在我的项目中使用它们,一切似乎都按照说明(./bootstrap.sh
+ ./b2
)工作正常,除了编译速度很慢的事实.我把它放了几个小时,但它几乎没有超过前几个源文件.在我让它运行过夜之后,我发现构建过程由于RAM短缺而中止.
所以,我的猜测是,Rasp Pi的功能不足以编译像Boost这样大小的东西.所以,我想到了交叉编译.但是,即使有很多关于ARM在线交叉编译的信息,我觉得它很混乱.一个人甚至从哪里开始?
我最近在我的Raspberry Pi上有一个GCC版本(4.7.0),所以我想要用相同的版本进行交叉编译.哪里可以获得ARM的GCC 4.7.0工具链?(我将在x86 CentOS 6.2上编译)
编辑:
我释放了不需要的GPU内存并在USB驱动器上设置了4GB交换分区,而构建文件在NFS共享上.Boost现在编译得更快,因此它是可管理的.我仍然想知道如何在我的x86 PC上设置GCC 4.7工具链进行交叉编译,因为我打算做很多编译,我希望它尽可能快.
编辑2:
由于GCC 4.7.0相对较新,似乎没有预先构建的交叉编译器(i386-> ARM).我可能不得不自己构建一个,这似乎是一个非常重要的任务(我已经尝试过并且失败了).有没有人知道要建立GCC交叉编译器的教程,希望是最近的版本之一?
我已经尝试过这个很棒的shell脚本(它非常适合构建同一个arch编译器)并且我已经成功构建了binutils
GCC的先决条件,但是GCC构建仍然失败了很多神秘的错误.我真的迷失在这里,所以我非常感谢你的帮助.
Raspberry Pi上的GCC配置了
--prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib
--mandir=/usr/share/man --infodir=/usr/share/info
--with-bugurl=https://bugs.archlinux.org/
--enable-languages=c,c++,fortran,lto,objc,obj-c++ --enable-shared
--enable-threads=posix --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-clocale=gnu
--disable-libstdcxx-pch --enable-libstdcxx-time
--enable-gnu-unique-object --enable-linker-build-id --with-ppl
--enable-cloog-backend=isl --enable-lto --enable-gold
--enable-ld=default --enable-plugin --with-plugin-ld=ld.gold
--with-linker-hash-style=gnu --disable-multilib --disable-libssp
--disable-build-with-cxx --disable-build-poststage1-with-cxx
--enable-checking=release --host=arm-unknown-linux-gnueabi
--build=arm-unknown-linux-gnueabi
Run Code Online (Sandbox Code Playgroud)
编辑3:
我设法使用这个shell脚本为ARM构建一个4.7 GCC工具链(yay!),如用户dwelch在评论中所建议的那样.我还构建newlib
并libstdc++
使用本文作为指南.工具链工作正常,但是我在我的Raspberry Pi上运行可执行文件,它失败了Illegal instruction …
自从我上次编写手臂汇编程序以来已经有一段时间了,我对细节有点生疏.如果我从arm调用C函数,我只需要担心保存r0-r3和lr,对吧?
如果C函数使用任何其他寄存器,它是否负责保存堆栈中的那些并恢复它们?换句话说,编译器会生成代码来为C函数执行此操作.
例如,如果我在汇编程序函数中使用r10,我不必将其值放在堆栈或内存中,并在C调用后弹出/恢复它,是吗?
这是针对arm-eabi-gcc 4.3.0.