Tag: embedded linux

使用__asm__ __volatile__(“”:::“memory”)

基本上__asm__ __volatile__ ()是做什么的,ARM架构的"memory"意义是什么?

测量TLB对Cortex-A9的影响

阅读以下文章后,我想尝试一个作者的testing,即测量效果TLB在最后的执行时间。 我正在研究embeddedCortex-A9的三星Galaxy S3。 根据文件: 我们在L1中有两个用于指令和数据caching的微型TLB( http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0388e/Chddiifa.html ) 主TLB位于L2( http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0388e/Chddiifa.html ) 数据微型TLB有32个入口(指令微型TLB有32或64个入口) L1'大小= 32千字节 L1caching行== 32字节 L2'大小== 1MB 我写了一个小程序,用N个条目分配一个结构数组。 每个条目的大小是== 32字节,所以它适合在caching线。 我执行几个读取访问,并测量执行时间。 typedef struct { int elmt; // sizeof(int) == 4 bytes char padding[28]; // 4 + 28 = 32B == cache line size }entry; volatile entry ** entries = NULL; //Allocate memory and init to […]

linux内核如何pipe理小于1GB的物理内存?

我正在学习linux内核的内部知识,在阅读“理解Linux内核”的同时,还碰到了很多与内存有关的问题。 其中之一是,如果我的系统上安装了只有512MB的物理内存,Linux内核如何处理内存映射。 就像我读的那样,内核映射0(或16)MB-896MB物理内存到0xC0000000的线性地址并且可以直接对它进行寻址。 所以,在上面描述的情况下,我只有512 MB: 内核如何从仅512 MB映射896 MB? 在所描述的scheme中,内核进行设置,以便每个进程的页表将从0xC0000000到0xFFFFFFFF(1GB)的虚拟地址直接映射到从0x00000000到0x3FFFFFFF(1GB)的物理地址。 但是,当我只有512 MB物理RAM时,如何映射虚拟地址从0xC0000000-0xFFFFFFFF到物理0x00000000-0x3FFFFFFF? 点是我有一个物理范围只有0x00000000-0x20000000。 在这种情况下用户模式进程呢? 每篇文章只解释了情况,当你安装了4GB内存,内核将1GB映射到内核空间,用户进程使用剩余的RAM。 我会感谢任何帮助提高我的理解。 谢谢..!

为embedded式Linux设备实现更新/升级系统

我有一个在embedded式Linux设备上运行的应用程序,偶尔也会对根文件系统甚至已安装的内核进行更改。 在当前的更新系统中,旧的应用程序目录的内容被简单地删除,新的文件被复制。 当对根文件系统进行更改时,新文件将作为更新的一部分进行传送,并简单地复制到旧文件中。 现在,目前的方法有几个问题,我正在寻找方法来改善这种情况: 用于创build文件系统映像的目标的根文件系统没有版本化(我认为我们甚至没有原始的rootfs)。 进入更新的rootfs文件是手动select的(而不是diff) 更新不断增长,并成为皮塔饼。 升级包含更大的rootfs更改的升级/升级之间现在是分开的。 我有这样的印象,即一旦更新的一致性检查是相当脆弱的,如果在所有的实施。 要求是: 应用程序更新程序包不应太大,并且必须能够在修改已完成的情况下更改根文件系统。 升级可能会更大,只包含进入根文件系统的内容(如新库,内核等)。 更新可能需要升级才能安装。 升级包含整个根文件系统,只需在目标的闪存驱动器上做一个dd ? 创build更新/升级包应尽可能自动。 我绝对需要一些方法来对根文件系统进行版本控制。 这必须以某种方式完成,我可以从中计算一些diff ,用来更新目标设备的rootfs。 我已经看过Subversion,因为我们使用它来源代码,但是这对Linux根文件系统(文件权限,特殊文件等)是不合适的。 我现在创build了一些shell脚本,可以给我一些类似于svn diff shell脚本,但是我真的很想知道是否已经存在一个工作和testing的解决scheme。 使用这样的diff ,我想升级将成为一个包含基于已知根文件系统状态的增量更新的包。 你对此有什么想法和想法? 你将如何实施这样一个系统? 我更喜欢一个简单的解决scheme,可以在不太多的时间内实现。

学习内核编程

我想学习linux内核编程。 那会是什么起点呢? 什么可能是一些更简单的问题的目标? 提前致谢

图像vs zImage vs uImage

他们有什么区别? 我知道u-boot需要uImage格式的内核。 我使用的系统首先从阶段1的装载机启动,然后调用u-boot。 我想丢弃u-boot,并直接从第一阶段加载程序启动。 我必须使用哪种types的内核映像?