草庐IT

c - Linux 中的结构分配在 ARM 中失败但在 x86 中成功

我注意到了一些非常奇怪的事情。假设我定义了以下结构typedefstruct{uint32_ta;uint16_tb;uint32_tc;}foo;这个结构包含在我从网络接收的一个大缓冲区中。以下代码适用于x86,但我在ARM上收到SIGBUS。externvoid*buffer;foomy_foo;my_foo=((foo*)buffer)[0];用memcpy替换指针取消引用解决了这个问题。在ARM中搜索SIGBUS让我知道这与内存对齐方式有关。谁能解释一下这是怎么回事? 最佳答案 您自己说过:您的特定处理器存在内存对齐限制,并

linux - 嵌入式 Linux ( ARM ) 中的低内存吞吐量

我正在使用ARM926EJS。在没有Linux的情况下,我在内存复制测试中的内存速度提高了20%(就像入门可执行文件一样)。但在Linux中,相同的代码运行速度要慢20%。代码是///Belowcodejustperformsburstmodememcopytest.voidasmcpy(void*a,void*b,intiSize){do{asmvolatile("ldmia%0!,{r3-r10}\n\t""stmia%0!,{r3-r10}\n\t":"+r"(a),"+r"(b)::"r"(r3),"r"(r4),"r"(r5),"r"(r6),"r"(r7),"r"(r8),

linux - ARM 的 vim 交叉编译

我正在使用arm-linux-gnueabi并尝试为我的设备编译vim。经过一段时间的搜索和研究,我成功了,但是当我从设备启动它时,我看到了这个:#/usr/tmp/vim/bin/vim~...~~VIM-ViIMprovedversion7.4.873byBramMoolenaaretal.VimisopensourceandfreelydistributableSponsorVimdevelopment!type:helpsponsorforinformationtype:qtoexittype:helporforon-linehelptype:helpversion7forve

linux - 如何使用QEMU学习ARM Linux内核开发?

我想像开发一些设备驱动程序等一样学习它,并为此使用QEMU,因为我没有像beagleboard这样的ARM硬件板。你们有什么建议?我可以使用Qemu模拟器在ARM目标上学习Linux内核吗?或者我应该尝试的任何其他选项? 最佳答案 这取决于您想学习什么:硬件还是软件。如果您真的想尝试使用不同的GPIO输出来实现伺服电机控制、LED灯闪烁和显示等功能,那么便宜的板(例如,RaspberryPi,约25美元)是首选。但是如果你想学习一般的软件,qemu肯定要快得多,而且它可以让你看到正在发生的事情的内部。用硬件进行实验需要示波器等。但是

linux - ARM MMU在各种操作模式下的操作

在我提问之前,我会把我的理解与主题相关,LinuxKernelmode对应于ARMsupervisormode。Linux用户模式对应于ARM用户模式。在内核模式(启用MMU)下,Linux使用相对地址而不是物理地址。即,物理地址=相对地址-PAGE_OFFSET+PHYS_OFFSET在用户模式(启用MMU)下,Linux使用虚拟地址而不是物理地址。即,物理地址=MMU转换(虚拟地址)使用pte、pmd、pgd问题:是否在管理员模式下启用了MMU(用于内核地址)。如果它被启用,那么这是否意味着相同的MMU在转换管理员模式和用户模式时以不同的方式运行。如果MMU在不同模式下有不同的功能

c++ - 我怎样才能阻止 gcc 在较新的 ARM cpu 上发出 swap{b}?

我正在编译DCP-O-Matic在RaspberryPi2上收到以下警告:/tmp/ccu6rDcg.s:Assemblermessages:/tmp/ccu6rDcg.s:4208:Warning:swp{b}useisdeprecatedforARMv6andARMv7我已将“-mcpu=cortex-a8-mfpu=neon”传递给编译器,但我仍然收到警告。我很确定Linux内核中有一些东西使这个警告无关紧要,但我真的很想解决这个问题。这post有很多有用的信息,但我似乎找不到合适的开关来阻止警告。我已经验证没有使用swp{b}的显式汇编代码。谁能推荐清除这些警告的最佳方法?我真

linux - 使用交叉编译器为 arm 编译 native GCC

我正在寻找为ARM系统创建GCC的native构建,但我遇到了一些麻烦。构建机器是i686-linux。我看到的每个教程都告诉我如何设置实际的交叉编译套件(我已经使用crosstools-ng完成了)。但是,我没有看到任何与编译原生ARMGCC相关的内容。我使用的配置字符串在下面,我只使用header设置了sysroot。我还交叉编译并安装了GMP和MPFR。../../gcc-4.3.5/configure\--host=arm-unknown-linux-gnueabi\--build=i686-build_pc-linux-gnu\--target=arm-unknown-lin

linux - ARM 在 WinCE 和 Linux 上的调用约定?

WinCE和Linux在ARM上使用相同的调用约定吗?有什么区别?目前我找到的文档解释得不是很好。例如http://msdn.microsoft.com/en-us/library/ms864497.aspx,它在一行上写着“WindowsCE.NETCompiler”,但在下一行写着“ARMcompiler”,在底部写着“CLARM”,不清楚是指同一个编译器还是不同的编译器。这是我到目前为止发现的...ARMCallingSequenceSpecification(WinCE)-文档编写不当ARMtoCcallingconvention(Linux)-非正式解释Wikipedia-没

linux - 可以在 Windows 上的 Docker 中运行 ARM/rpi 图像,但不能在 linux 上运行

我能够在Windows(64位)的Docker中运行ARM镜像(例如hypriot/rpi-node),但在我尝试过的所有linuxx86/64机器(Debian、CoreOS、Alpine等)中我收到以下错误-这对我来说很有意义,但我不明白为什么它会在Windows上的Docker中运行,我想知道我是否错过了一些使用x86机器作为ARM图像构建服务器的机会(即。在google/awscloud/azure中)。有什么想法吗?dockerrun-tihypriot/rpi-nodelsstandard_init_linux.go:175:execuserprocesscaused"ex

c++ - 为 AT91SAM9 ARM 处理器 Linux 用户空间程序优化的 FFT 和数学

我正在使用Atmel的AT91SAM9G20处理器为嵌入式Linux系统开发C/C++软件。我需要使用Linux用户空间程序使用定点(或浮点)数学快速计算FFT。我知道汇编器可能是实现的方式,并且在使用gcc编译器进行编译时可能需要一个额外的-mpcu开关。进行此实现的最佳方法是什么?是否有任何好的书籍引用资料或优化的FOSS库可用?我必须实现一些算法,这些算法也需要多次应用小FFT长度(即1024点),我想知道某些库(例如kissfft)是否也能正常工作。我也对长FFT长度感兴趣,因此下面答案中建议的FFTW也能很好地工作。除了这个问题,我还想知道在ARM9Linux用户空间程序中如