我必须将我的设备从Linux 2.6.38转换到非常深的低功耗模式,因此有必要暂停所有组件,包括CPU和DDR2。 我发现到目前为止,我必须将核心汇编程序的function复制到处理器的内部存储器,并从那里执行它。 基本上,它看起来像这样: cpaddr = iram_alloc(SZ_1K, &iram_addr); if(!cpaddr) return -ENOMEM; suspend_iram_base = __arm_ioremap(iram_addr, SZ_1K, MT_HIGH_VECTORS); memcpy(suspend_iram_base, cpu_v6_sdram_off, SZ_1K); flush_icache_range(suspend_iram_base, suspend_iram_base + SZ_1K); flush_cache_all(); __asm__ __volatile__( "ldr r0, %0\n" "ldr r1, %1\n" "ldr r2, %2\n" "blx r2\n" "nop\n" : : "m" (esdctl_addr), "m" (csd0_addr), "m" (suspend_iram_base)); 到目前为止,一切都按预期工作,我可以使用JTAGdebugging器从内部存储器(在虚拟地址空间中)validation代码执行。 如果我理解正确的话,我必须在IRAMfunction中做到以下几点: 禁用中断和caching 将SDRAM控制器设置为预充电断电模式 执行预充电全部命令并访问A10高位(例如0x400)的存储器以有效closures所有存储区 通过执行WFI指令将CPU置于待机状态 之后重新启用一切(在下面的源代码中省略) 对应的代码如下所示: ENTRY(cpu_v6_sdram_off) […]
我希望以下程序在我的Ubuntu x86_64桌面和Raspberry Pi上的行为相同,不包括对platform.machine()的调用。 test.py: from pyparsing import QuotedString import platform print platform.machine() string = QuotedString("'", escChar='\\') print string.parseString(r"'abcd\\'") 在Ubuntu x86_64桌面上: $ cat /etc/issue Ubuntu 12.04.4 LTS $ python –version Python 2.7.3 $ python test.py x86_64 ['abcd\\'] 在树莓派上: $ cat /etc/issue Raspbian GNU/Linux 7 $ python –version Python 2.7.3 $ python test.py armv6l ['abcd\\\\'] 谢谢。
我正在尝试为Openwrt交叉编译一个.c文件。 我下载了Openwrt,并在软件包目录中添加了我的文件,并为其创build了Makefile,但在编译时跳过了。 我不知道什么是错的 这个Makefile: * include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=gav PKG_VERSION:=1 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk define Package/gav SECTION:=utils CATEGORY:=Base system TITLE:=gaurav endef define Package/gav/description This package contains an utility useful to upgrade from other firmware or older OpenWrt releases. endef define Build/Prepare mkdir -p $(PKG_BUILD_DIR/) $(CP) ./src/* $(PKG_BUILD_DIR)/ endef define Package/gav/install $(INSTALL_DIR) $(1)/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/gav $(1)/sbin/ […]
我正在使用2.6.35.3内核的embedded式Linux系统。 在设备内部,我们需要一个4MB + 192kB连续的DMAcaching器用于我们的数据采集驱动器之一。 驱动程序使用SPI传输将数据复制到此缓冲区。 用户空间应用程序发出一个mmap系统调用,将缓冲区映射到用户空间,然后直接读取可用数据。 使用“alloc_bootmem_low_pages”调用来分配缓冲区,因为使用其他方法(如kmalloc)不可能分配超过4 MB的缓冲区。 但是,由于最近的升级,我们需要增加缓冲空间到22MB + 192kB。 据我所知,Linux内核只有16MB的DMA内存。 因此,理论上这是不可能的,除非有办法调整这个设置。 如果有谁知道如何执行此操作,请让我知道? 这是一个好主意,还是会使系统不稳定?
我在我旁边有一个ARM工具包,在我的机器上有一个Xenomai补丁的Linux内核源代码。 我知道我可以通过USB电缆和一个(基于Windows的软件)软件将数据发送到工具包,但我很难确定我应该发送什么东西 ,使工具包运行Linux。 (澄清从评论:这是一个Atmel AT91SAM9260-EK工具包,它使用SAM-BA和SAM-PROG通过串行或USB电缆加载和卸载数据。
背景 迟到了,我发现自己越来越着迷于更好地理解Linux。 此外,我也想玩,以了解它的细微差别。 我不是一个很好的Linux黑客。 我知道C,C ++等,我已经在ARM和其他处理器的程序集中进行了编程,在理论上我对OS的工作原理略知一二,Linux在很小程度上是如何构造的(单片内核等)。 在这种情况下,我越来越感兴趣的是如何将特定的内核移植到基于ARM的机器中。 所以我的问题是: 开发人员需要采取什么步骤将内核移植到基于ARM的机器上。 应该怎样发展,也就是说,硬件应该先做,还是应该同时开发硬件和软件。 如果任何人有这样一个devise基于ARM的机器(或任何其他基于芯片的机器)的努力的“logging”链接,然后将内核移植到它上面,请分享它。
我有一个标准的应用程序,我正在评估一个C ++框架。 我正在寻找时间和内存消耗。 在linux上,为了获得当前程序占用的内存,我正在使用getrusage函数。 它在我的机器上完美运行。 当我将这个应用程序交叉编译为一个arm架构,并在我的embedded式设备(也运行linux)上运行我的代码时,会出现问题,内存函数返回0.应用程序在embedded式设备上运行良好,只是内存函数返回给我0。 任何想法可能是什么可能的解决办法呢?
ARM Linux引导手册说,寄存器r0应该是零。 为什么寄存器r0应该是zer0? http://www.arm.linux.org.uk/developer/booting.php CPU register settings r0 = 0. r1 = machine type number discovered in (3) above. r2 = physical address of tagged list in system RAM. 我浏览了arch / arm / kernel / head.S,但找不到原因。
我正在为我的项目使用PIC微控制器。 现在我想转移到基于ARM的控制器。 我想用Linux启动ARM(使用C)。 但我不知道如何开始使用Linux。 哪个编译器是最好的,我需要学习的东西就像很多混乱。 你们能帮我吗? 我的项目通常包括UART,IIC,LCD等等。 我没有使用任何RTOS。 你们能帮我吗? 对不起,我的英语不好
我正在构buildbeagleboard-xm上的一个linux内核(下面的教程 – 我在步骤10)。 我一直需要大量的带有前缀arm-linux-gnueabi的交叉编译工具。 唯一能够安装的是arm-linux-gnueabi-gcc ,现在我需要arm-linux-gnueabi-ld 。 我的问题是: 如果我在运行它的同一台计算机上构build内核,是否需要使用这样的交叉编译工具? 我如何安装这些交叉编译工具? 我疯狂searcharm-linux-gnueabi ,结果很less。