Articles of arm

打开embedded式启动困难

所以,我目前正试图抓住开放embedded式为i.MX53平台打造,但是我在理解OE概念的主要轮廓以及文件夹结构应该如何得到一个上视图。 所以,我希望有人能够简单地总结一下为什么不在内核根目录下使用make命令。 更重要的是(对于我来说),我想知道文件夹结构应该如何,为一个i:MX53QSB构build一个Oe核心和meta-fsl-arm图层。 我应该使用bitbake运行哪个文件来获取我的设备的自定义图像?

ARM交叉编译GLib 2.33.10,链接器错误

我是一个新手,我正在研究树莓派。 我有一个GLIB 2.33.10交叉编译的问题。 我已经从网站和所有依赖项(zlib,ffi)下载了源代码。 已经为ARM构build了依赖关系(在Raspberry上testing过)。 我目前正在使用arm-bcm2708hardfp-linux-gnueabi工具链。 我的configuration命令行如下: $ ZLIB_CFLAGS=-I/home/myuser/cross_lib/include/libzlib \ ZLIB_LIBS="-L/home/myuser/cross_lib/lib/libzlib/raspberry -lz" \ LDFLAGS="-L/home/myuser/cross_lib/libffi/lib -lffi -L/home/myuser/cross_lib/lib/libzlib/raspberry -lz" LIBFFI_CFLAGS=-I/home/myuser/cross_lib/libffi/lib/libffi-3.0.11/include \ LIBFFI_LIBS="-L/home/myuser/cross_lib/libffi/lib -lffi" \ ./configure –host=arm-bcm2708hardfp-linux-gnueabi glib_cv_stack_grows=yes \ glib_cv_uscore=yes ac_cv_func_posix_getpwuid_r=no \ ac_cv_func_posix_getgrgid_r=no –with-libiconv=no –without-pcre \ –enable-gtk-doc-html=no –enable-xattr=no –prefix=/home/cross_lib/glib23 你可以看到我禁用了iconv和pcre(这只是一个testing版本)。 configuration脚本是好的(这似乎是好的…)。 当开始构build过程时,它会持续一段时间(编译大量代码),然后在链接阶段进行search: /opt/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/../lib/gcc/arm-bcm2708hardfp-linux gnueabi/4.7.1/../../../../arm-bcm2708hardfp-linux-gnueabi/bin/ld: warning: libgthread-2.0.so.0, needed by ../gobject/.libs/libgobject-2.0.so, not found (try using -rpath or -rpath-link) /opt/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/../lib/gcc/arm-bcm2708hardfp-linux-gnueabi/4.7.1/../../../../arm-bcm2708hardfp-linux-gnueabi/bin/ld: warning: […]

为Linux 2.6.30 DMA API映射设备内存

我一直在努力与这一个,真的很感谢一些帮助。 我想使用我的At91sam9g45的内部SRAM(垫脚石 – 开机后不使用)来加速一些密集的计算,并遇到满足以下所有条件的麻烦: 内存可以从用户空间访问。 这很容易使用用户空间mmap() ,然后使用内核remap_pfn_range() 。 使用返回的指针,我的用户空间程序可以读/写SRAM。 使用内核DMA API调用dma_async_memcpy_buf_to_buf()使用DMA来执行memcpy。 在我的基本驱动程序中,我想调用这个操作来将DDR中的数据(用kmalloc()分配)复制到SRAM缓冲区中。 所以我的问题是我有用户空间和物理地址,但没有内核空间DMA API友好的映射。 我试过使用ioremap并使用提供给iotable_init()的固定的iotable_init()地址。 这些似乎都没有导致一个内核虚拟地址,可以使用像virt_to_bus (这对kmalloc地址,我认为是在DMA API中使用)的东西。 有办法,那只是手动使用物理地址触发DMA,但我想尝试解决这个问题。 我一直在阅读LDD3和谷歌search,但我看不到任何使用非kmalloc内存的DMA API(PCI总线除外)的例子。

Perforce奇怪的10s延迟/一些命令滞后

我正在尝试在cubieboard2(树莓-Pl克隆)上设置perforce服务器, 我已经为Linux ARM(2011.1)下载了p4d和p4, 我正在运行这样的服务器: p4d -d -r root_path -p 12345 -L log 直接在服务器上运行命令的统计信息(server ip 192.168.1.1) p4 -p 12345 users # it returns immediately p4 -p 127.0.0.1:12345 users # it returns immediately p4 -p localhost:12345 users # it returns immediately p4 -p 192.168.1.1:12345 users # it returns immediately p4 -p 12345 info # it returns immediately […]

为ARM编译ActiveMQ

免责声明:我在这里是新的,我已经尽我所能按照发布指南,所以请让我知道如果这需要任何额外的信息。 我也是比较新的Linux发展。 背景:我正在使用Linux上的ActiveMQ-cpp构build一个库。 我已经在主机Ubuntu PC上成功地创build和运行了它,但是试图为目标基于ARM的机器交叉编译它正在产生一些非常深奥的错误。 第一步是使用arm-linux-gcc编译器创buildAPR( http://apr.apache.org/ )。 经过一番研究之后,下面的命令运行configuration脚本时不用大惊小怪: CC=/usr/local/arm-linux/bin/arm-linux-gcc ./configure –prefix=/root/apr-arm –host=arm-linux cross_compiling=yes ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=no apr_cv_tcp_nodelay_with_cork=no apr_cv_process_shared_works=no 这允许下一步 – 运行makefile。 当前问题:在命令行上inputmake会过早退出,如下所示: […] /root/.local/share/Trash/files/apr-1.5.1/build/mkdir.sh include/private tools/gen_test_char > include/private/apr)escape_test_char.h /bin/bash: tools/gen_test_char: cannot execute binary file make[1]: *** [include/private/apr_escape_test_char.h] Error 126 make[1]: Leaving directory `/root/.local/share/Trash/files/apr-1.5.1' make: *** [all-recursive] Error 1 尝试修复:由提问者发布的以下问题的解决scheme未能奏效。 有可能我没有正确地执行这个过程( Apache Cross Compilation Error ./gen_test_char:无法执行二进制文件 […]

通过哪个指令在启动次CPU时触发次级核心

主CPU的引导是由主内核启动的。 并且在主CPU上完成了一些工作,并且在辅助CPU上完成了一些工作以完成cpu_up的热插拔操作。 我试图find在主CPU上执行的确切指令,触发辅助CPU启动,并进一步检查pen_releasevariables的值。 您能否介绍启动辅助CPU的过程,以及启用了SMP的Linux内核pen_release global的使用。

ARM环境下的裸机开发

目前,我正在学习做ARM裸机开发。 我使用的开发板是SAMA5D3x-EK。 我正在尝试构buildAtmel给出的示例代码(Atmel / sama5d3x-ek / examples / getting-started)。 IDE eclipse with GNU ARM plugin 链接器脚本 Atmel/sama5d3x-ek/libraries/libboard_sama5d3x-ek/resources/gcc/sama5d3x/sram.ld 启动代码 Atmel/sama5d3x-ek/libraries/libboard_sama5d3x-ek/source/board_cstartup_gnu.S c运行时库存根 Atmel/sama5d3x-ek/libraries/libboard_sama5d3x-ek/source/syscalls.c 我已经build立了libboard_sama5d3x_ek_gcc_dbg.a 。 而且我非常确定所有的存根函数都被封装到.a静态库中。 $ arm-none-eabi-nm libboard_sama5d3x_ek_gcc_dbg.a … syscalls.o: 00000000 T _close U DBGU_PutChar 00000000 T _exit 00000000 T _fstat 00000000 T _getpid U _heap 00000000 b heap.9035 U iprintf 00000000 T _isatty 00000000 T […]

在/ dev / mem访问上设置中断

有什么办法可以在ARM Linux的/ dev / mem中的特定物理地址上设置一个中断,如果一个应用程序试图写入选定的地址,而不是写操作,它会调用我的函数? 澄清 Sam在这里介绍的技术(write_mem()和read_mem())不起作用。 我会添加更多的细节,有人可以提供答案。 我想控制应用程序和物理地址之间的I / O通信。 不幸的是,应用程序直接控制I / O而不使用驱动程序(通过将物理内存映射到映射的内存,例如* value-in-mappedaddress = 0x1F)。 我想监视甚至改变应用程序写入物理内存的值。 我有三种方法可以做到这一点: 在物理内存中设置硬件断点(我无法debugging应用程序) 改变页表,所以每次应用程序请求一个映射的内存我发送它的写请求到别的地方。 通过在映射地址中设置软件断点来直接更改映射地址中的值(应用程序使用mmap2()映射应用程序) 所以现在我必须采用这种方式之一,到目前为止我还没有成功。

AM335x入门套件使用qemu模拟

我有http://www.ti.com/tool/tmdssk3358 ,但最近它并没有启动。 按下重置键后,电源指示灯不会发光(只有几分之一秒的时间),液晶屏显示灰色的白色显示,之后没有任何显示)。 同时,我已经做了一些自定义的应用程序来testing使用Linux的电路板。 想知道我是否可以使用qemu模拟器模拟/模拟电路板。 我做了这样的事情(现在使用了SD卡的Linux预制内核映像)。 因为这是Cortex A8,所以给了-M as realview -pb-a8。 尝试了这个命令的其他几个变种,但坚持这个错误。 请build议一个适当的命令来使用模拟器来testing/模拟电路板。 arm@ubuntu:~/ti-sdk-am335x-evm-05.05.00.00$ qemu-system-arm -M realview-pb-a8 -kernel board-support/prebuilt-images/uImage-am335x-evm.bin -serial stdio -append "root=/dev/nfs init=/sbin/init" oss: Could not initialize DAC oss: Failed to open `/dev/dsp' oss: Reason: No such file or directory oss: Could not initialize DAC oss: Failed to open `/dev/dsp' oss: Reason: No such […]

ARM Linux内存性能问题

我一直在寻找分配硬件可以写入的DMA缓冲区的方法,但是可以从CPU读取caching。 我开始使用Linux命令行选项mem = 896来为DMA缓冲区保留最后的128 MB RAM(是的,这是过度的)。 然后在我写的一个驱动程序中,我做了以下操作: void *srcBuf = NULL; void *dstBuf = NULL; dma_declare_coherent_memory(&gDev, BUFFER_ADDR, BUFFER_ADDR, 128*1024*1024, DMA_MEMORY_MAP); srcBuf = dma_alloc_coherent(&gDev, 10*1024*1024, &dmaSrcAddr, GFP_DMA); dstBuf = dma_alloc_coherent(&gDev, 10*1024*1024, &dmaDstAddr, GFP_DMA); 这在BUFFER_ADDR(物理RAM的末端)正确分配128 MB,然后从该区域获得两个10 MB缓冲区。 然后我做一些简单的memset,memcpy代码来testing带宽: start = ktime_get(); memset(srcBuf, 0x55, BUFFER_SIZE); stop = ktime_get(); printPerformance(start.tv64, stop.tv64, "Write performance to memory"); start = ktime_get(); memcpy(dstBuf, […]