Articles of arm

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

我想学习它像开发一些设备驱动程序等,并使用QEMU这一点,因为我没有ARM的硬件板如beagle板。 你们有什么build议? 我可以使用Qemu模拟器学习ARM内核上的Linux内核吗? 或者我应该尝试的其他选项?

旧的ARM32二进制文件可以在AARCH64内核上运行吗?

我很好奇在AARCH64-Linux机器上运行旧的ARM32-Linux程序的可行性,我进行了一些实验: 写一个程序“Hello,World!” 并用arm-none-linux-gnueabi-gcc和aarch64-linux-gnu-gcc静态编译。 静态构build并使用busybox和aarch64编译器创build一个虚拟硬盘。 把2“你好,世界!” 程序(在ARM32和AARCH64中)到ramdisk。 用vexpress_defconfig和aarch64编译器构build一个简单的AARCH64-Linux内核。 使用qemu-system-aarch64运行内核和ramdisk。 (包括ramdisk中的busybox在内的所有二进制文件都是静态编译的。) 结果: “你好,世界!” 程序在AARCH64被成功执行。 “你好,世界!” 程序在ARM32不能运行,但显示消息: 第1行:语法错误:意外的词(期待“)”) 有解决上述问题的build议或专业知识吗?

如何在使用GDB生成核心转储文件时限制核心转储文件的大小

我正在ARM9主板上运行一个embedded式应用程序,总闪存容量仅为180MB。 我能够运行gdb ,但是当我这样做 (gdb) generate-core-dump 我得到一个错误 warning: Memory read failed for corefile section, 1048576 bytes at 0x4156c000. warning: Memory read failed for corefile section, 1048576 bytes at 0x50c00000. Saved corefile core.5546 The program is running. Quit anyway (and detach it)? (y or n) [answered Y; input not from terminal] Tamper Detected **********OUTSIDE ifelse 0********* length […]

I2C在Linux Kernel中写入确认轮询

这里平淡无奇的回答使我想到这一点 。 我已经背负了一个器件(Analog Devices 525x) (从数据手册第16页): 在内部[EEPROM]写周期内禁用I2C接口。 这看起来不公平,比如“ 现在我正在下沙发,所以不要用了一会儿,因为我在座垫上放了一个裂口 ”。 老实说,为什么这是我的问题呢? 无论如何,数据表build议确认轮询是答案 – 进入Linux内核… Linux GPIO位的bashed I2C驱动程序提供了一个机制来做到这一点? 主要发送一个地址与写入位设置,并继续这样做,直到出现一个ACK。 我使用2.6.14在一个ARM上,带有后端的GPIO位打包驱动(我认为从2.6.19开始)。

ARM汇编“retne”指令

我目前正在理解Linux内核启动的过程。 我正在浏览Linux内核源代码树,特别是ARM架构,直到我偶然发现arch / arm / kernel / hyp-stub.S中的这个汇编指令retne lr 从概念上讲,很容易理解的是,如果Z标志为0,则指令将返回到存储在链接寄存器中的地址。我正在寻找的是这个ARM汇编指令的实际logging。 我在“ ARM体系结构参考手册”ARMv7-A和ARMv7-R版本 A8.8中进行了search,找不到指令说明。 剔除源代码,看看它是否是一个ARM特定的GNU AS扩展,并没有特别的说明。 一个谷歌search与查询“臂大会ret指令”,“arm返回指令”和类似的东西沿线没有什么有用的。 当然,我必须在错误的地方寻找,否则我一定会错过一些东西。 任何澄清将不胜感激。

用UCLIBC交叉编译PHP

这是一个REPOST,以前的岗位GOTclosures,搬到SERVERFAULT和再次closures。 我认为这个post是一个有效的stackoverflow问题,因为我认为它是由一些automake /编译/链接错误引起的。 这是一个编程问题,而不是服务器pipe理员问题。 交叉编译PHP https://serverfault.com/questions/418521/cross-compile-php 开始发布 我已经下载了PHP 5.4.0源代码,将其解压缩并移入源文件夹。 我做了一个configuration: ./configure –build=x86_64-unknown-linux-gnu –host=arm-linux-uclibcgnueabi –prefix=/usr/arm/www CC="arm-linux-uclibcgnueabi-gcc –sysroot=/toolchains/gnu_cortex-a9_tools/" –disable-libxml –disable-dom –without-iconv –without-openssl –disable-simplexml –disable-xml –disable-xmlreader –disable-xmlwriter –without-pear –without-sqlite3 –disable-pdo –without-pdo-sqlite –disable-phar –with-config-file-path=/etc/ 其次是 make 没有错误,一切运行良好。 接下来我做一个make install。 make install 再次,一切运行良好。 我将它移动到目标平台并运行 /usr/arm/www/bin/php -v PHP 5.4.0 (cli) (built: Aug 15 2012 16:07:41) Copyright (c) 1997-2012 The PHP Group […]

电平触发中断处理和嵌套中断

[GIC v2更新的问题有3个寄存器ACK,EOIR,DIR] 这是我需要别人澄清和说明以下顺序是正确的最基本的问题。 在下面的曲拱中, [Core] —– [ Interrupt Controller ] –Level Triggered — [Device] 一个。 设备提高水平并通知中断控制器 湾 中断控制器触发中断的核心。 (假设核心的中断被允许) C。 假设中断控制器是GIC(与ARM一起使用)并且有3个寄存器 – 中断禁用(GICC_DIR) – 中断ACK(返回IRQ号),(GICC_IAR) – 中断寄存器结束(GICC_EOIR) 注意:在GICv2实现中,将GICC_CTLR.EOImode设置为1会分离优先级丢弃和中断禁用操作。 参考:3中断处理和优先级(ARM IHI 0048B.b ID072613) 现在需要确认的几点, d。 直到核心没有确认中断获得IRQ,中断保持挂起,并且设备中断线路到中断控制器电平高 即 核心禁止其中断。 核心ACK是否得到IRQ,中断线没有改变。 现在可以有两种情况。 A.核心屏蔽GIC上的特定中断,但在设备上什么都不做,这将清除设备上的中断。 核心启用其中断 B.内核设置GICC_EOImode = 1,并将中断ID写入EOIR。 核心启用其中断 基于(A)或(B) Q1。 中断是否会从中断控制器再次提升到核心? 现在怎么会在这种情况下中断嵌套工作呢?

如何安装交叉编译杯到目标板?

我交叉编译杯子1.7.0 for sitara arm linux 6 我跟着 ./configure –host=arm-linux-gnueabihf –disable-gssapi –prefix=/media/rootfs make make install 所有的杯子相关的文件都会自动保存在SD卡中,但是在inputcupsd命令时显示错误,而不是启动cups服务器 cupsd: Child exited on signal 1. 在检查/etc/cups/cupsd.conf时,configuration文件中有几个path /media/rootfs/var/run/cups/cups.sock 代替 /var/run/cups/cups.sock 1)如何安装这个编译的杯子目标板没有 – 前缀? 2)交叉编译是否有缺失的步骤? 任何帮助将是感恩。 这是Makefile # # "$Id: Makefile 11107 2013-07-08 13:47:51Z msweet $" # # Top-level Makefile for CUPS. # # Copyright 2007-2013 by Apple Inc. # Copyright […]

交叉编译glibc为arm,得到了一些unwind函数的undefined引用

现在我需要为我们的armv7 soc平台构buildglic-2.15。 我按照以下步骤来构build它: 从http://ftp.gnu.org/gnu/libc/下载并解压glibc-2.15和glibc-ports mkdir build-glibc cd build-glibc echo "CFLAGS += -D__ARM_ARCH_7__ -D__LINUX_ARM_ARCH__=7 -march=armv7 -U_FORTIFY_SOURCE -fno-stack-protector" > configparms PATH={toolchain}/bin BUILD_CC={build}/bin/gcc CC={toolchain}/bin/arm-linux-gnueabihf-gcc AR={toolchain}/bin/arm-linux-gnueabihf-ar RANLIB={toolchain}/bin/arm-linux-gnueabihf-ranlib ../glibc-2.15/configure –prefix=/linaro-toolchain/ \ –exec-prefix=/linaro-toolchain/ \ –host=arm-linux-gnueabihf \ –build=i686-pc-linux-gnu \ –disable-profile –enable-add-ons=ports,nptl \ –enable-kernel=2.4.0 –with-tls –with-__thread \ –without-gd –without-cvs \ –with-headers=/linaro-toolchain/arm-linux-gnueabihf/libc/usr/include \ –disable-multilib –enable-shared \ libc_cv_forced_unwind=yes \ libc_cv_c_cleanup=yes \ lic_cv_gnu89_inline=yes lic_cv_ssp=no \ libc_cv_ctors_header=yes […]

ARM inline asm:退出从内存中读取值的系统调用

问题 我想在ARM中使用内联汇编在Linux Android设备上执行退出系统调用,并且我希望从内存中的位置读取退出值。 例 没有提供这个额外的参数,这个调用的macros看起来像: #define ASM_EXIT() __asm__("mov %r0, #1\n\t" \ "mov %r7, #1\n\t" \ "swi #0") 这很好。 接受一个论点,我把它调整到: #define ASM_EXIT(var) __asm__("mov %r0, %0\n\t" \ "mov %r7, #1\n\t" \ "swi #0" \ : \ : "r"(var)) 我用它来调用它: #define GET_STATUS() (*(int*)(some_address)) //gets an integer from an address ASM_EXIT(GET_STATUS()); 错误 无效“asm”:操作数超出范围 我无法解释为什么我得到这个错误,因为我在上面的代码片段(%0 / var)中使用一个inputvariables。 此外,我已经尝试了一个正则variables,仍然有相同的错误。