其它硬件开发
我学习linux内核内部和在阅读“理解Linux内核”,相当多的内存相关的问题,让我吃惊。其中之一是,Linux内核如何处理内存映射如果只有512 MB安装我的系统上的物理内存的说。 当我读到,内核的地图 0(或16)MB-896MB 的物理内存为0xC0000000的线性地址,可直接解决这个问题。因此,在上述情况下,我只有512 MB: 如何可以在内核地图仅512 MB 896 MB?在
..
我有这个C驱动程序 的#include<&stdlib.h中GT; #包括LT&;&stdio.h中GT;EXTERN无效潜艇(的char *字符串,字符this_c,焦炭that_cr);INT主(INT ARGC,CHAR *的argv []) { 烧焦this_c ='E'; 烧焦that_c =“X”; 烧焦orgstr [] =“先生SID轻松调侃晕船海豹
..
这code编译GCC的就好,但使用LLVM(LLVM-GCC)的时候,它说“恒恩pression预期的”的与 LDR 行 问题的语法是:我如何指定我的数组的地方?我不想硬code以字节为单位的位移: LDR R7,[PC,#some_shift] 而是要用文字来保持code清洁和安全。 不知道如何使它工作? .globl FUNC_NAMEFUNC_NAME: 推{R4,R5,R
..
我怎样写,这将有一个标签被引用放入寄存器地址的指令? 解决方案 有四种方式,三处的 Sourceware的GNU汇编手册。我猜的标签是一样的东西, 目标: 。长0xfeadbeef ADR R0,目标 ADRL R0,目标 LDR R0,=目标 子R0,PC,#(。+ 8-目标) 前两个非常相似,生成子R0,PC,#偏移。 3 RD 把一个长期处
..
我试图编译ARM架构的一些文件与Autoconf配合。我编译它们在Ubuntu 12.04和目标系统是XM的BeagleBoard。 我运行下面的命令: ./配置主机=臂Linux的gnueabi - preFIX = $ {} CSTOOL_DIR / linux_arm_tool 和得到这样的结果:配置:警告:如果你想设置--build类型,不要使用 - 主机。 如果检测到一个交
..
有人能告诉我如何双precision转换成网络字节顺序。 我试过 uint32_t的htonl(uint32_t的hostlong); uint16_t htons(uint16_t hostshort); uint32_t的ntohl(uint32_t的netlong); uint16_t ntohs和(uint16_t netshort); 功能和他们的工作很好,但他们都不具有双重(
..
是否有可能编译原生GCC针对ARM(主机== ==目标ARM)使用code的Sourcery G ++? 如果这是不可能的,我可以使用的crosstool-NG构建交叉编译,然后使用这个编译原生ARM GCC? 感谢您, 编辑:至于为什么:我创造我自己的的BeagleBoard 发行... 解决方案 codeSourcery规定仅适用于Linux / x86平台和Windows pr
..
据我所知大多数编译器将乘以然后执行快速除法位右移。举例来说,如果你检查这个SO线程它说,当你问微软编译器执行除以10将通过0x1999999A乘被除数(即2 ^ 32/10),然后通过2 ^ 32(使用32向右移动)划分的结果。 到目前为止好。 在我使用GCC ARM的测试相同除以10,不过,编译器做了一些略有不同。首先,它通过0x66666667(2 ^ 34/10)乘以股息,然后除以2 ^
..
我会先说,我不是在该领域的专家和我的问题可能包含的误解,在这种情况下,如果你纠正我,我会很高兴,并附加资源,让我能学到更多细节。 我想弄清楚的方式,系统总线以及如何出现在移动设备中的各种设备(如传感器芯片,支持WiFi / BT系统级芯片,触摸屏等)由CPU处理(和其他MCU)。 在PC世界里,我们有总线仲裁这条路的命令/数据的设备,然后,据我所知,地址是硬连接在电路板(纠正我,如果我错了)。
..
我启用了MMU我S3C2440板(3G - 4G内存::故障属性),当我没读/写3G,一切都很好 - 4G内存。所以测试页面错误矢量,我写信给一个0xFF即3G地址,如我所料,我从FSR正确的价值,所以我在_do_page_fault()这样做,步骤是这样的: ..... //设置新的页面转换表 ..... invlidate_icache(); //明确ICACHE clr_dcache()
..
我想在原始的二进制数据链接。我想无论是把它放在一个特定的地址,或将其链接到一个符号(字符* MYDATA,例如)我在code定义。因为它不是一个OBJ文件,我不能简单地联系起来。 一个类似的职位(
..
我想一个ARM的CORTEX-A9一个简单的交叉编译(CC): 为了简单起见,多数民众赞成在C- code: 的#include<&stdio.h中GT; 诠释的main() { 的printf(的“Hello World \\ n!”); 返回0; } 在手臂上的本地编译工作正常,并开始与的gcc -o helloworld.c的HelloWorld ,而交叉编译开始与
..
编译Linux内核2.6.34.3对ARMv7(Cortex-A8的) 我看着内核code,它看起来像Linux内核设置上TTB1内核地址空间(一切都在为0xC0000000)上ttb0在硬件页表(转换表基地)和用户进程(一切为0xC0000000),它改变了每个进程上下文切换。它是否正确?我仍然困惑的MMU是如何知道看的翻译哪些TTB? 我读到,TTBCR(转换表基控制寄存器)决定当MVA找
..
ARM有一些所谓的TrustZone。 根据ARM的文档,它提供了一个进程可以在安全/非安全运行的世界。 什么安全/非安全世界意味着。 这是否与处理器上执行的模式或它关系到设定存储区域或其他什么东西的权限。 有ARM的7操作模式和安全/非安全世界没有任何关系。 如何启用ARM的TrustZone的。 从ARM的哪个版本是这样介绍。 是否必须使用此的TrustZone。 请问li
..
我有一个开机code的汇编语言编写的裸机ARM和我试图理解它是如何工作的。二进制是用一些外部闪光灯,并在启动时被复制自身的某些组件在RAM中。我仍然没有得到确切的搬迁概念在这种情况下,即使我读这维基百科进入。该RAM被映射到一个低地址窗口,并在高地址窗口闪光灯。为什么我们测试链接寄存器的值这里有人能解释一下吗? / *测试,如果我们从一个地址上运行,我们不会在*链接/ BL ch
..
在ARM的的TrustZone监控模式就能够在监控模式中止。监控模式总是执行在安全的世界或上下文。我们怎样才能知道是什么地址和原因引起了正常的世界发生故障时,陷阱监控模式的指令中止的和的数据故障的载体?
..
我使用飞思卡尔i.MX6(的ARM Cortex-A9)Linux内核3.0.35。运行到一个内核后OOPS我试图理解异常堆栈初始化。以下是我迄今发现的。 在 cpu_init()在 弓/ ARM /内核/ setup.c中的,我看到了异常堆栈初始化得到: 结构栈{ U32 IRQ [3]; U32生根粉[3]; U32 UND [3]; } ____cacheline
..
作为每个
..
什么是手臂的linux-gcc和臂无-Linux的gnueabi和手臂-Linux的gnueabi之间的区别 工具链? 他们是否编译不同? 解决方案 工具链有一个松散的命名约定如弓[-vendor] [ - OS] -abi 拱是架构:手臂 MIPS 86 的i686 ... 厂商是工具链的供应商:苹果 操作系统是操作系统:的Linux 无(裸机) ABI 是应用程序二进制
..
我工作的一个嵌入式程序在那里我有一个自定义链接脚本。该项目工程,但我注意到,有可能是一些不对劲与链接器如何放置两节在内存中。 下面是链接描述文件的相关部分: MEMORY { ROM(RX):ORIGIN = 0x00100000开始,长度为16K RAM(RWX):ORIGIN = 0x00200000开始,长度为4K }SECTIONS { / *其他部分去这里。
..