嵌入式Linux中文站

最新发布

内核驱动

Linux内核最新的连续内存分配器(CMA)——避免预留大块内存

阅读(175)

在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不用,但是一般的做法又必须先预留着。目前,Marek Szyprowski和Michal Nazarewicz实现了一套全新的Contiguous Memory Allocator。通过这套机制,我...

文件系统

Linux 文件系统扩展属性

阅读(167)

扩展属性(xattrs)提供了一个机制用来将《键/值》对永久地关联到文件,让现有的文件系统得以支持在原始设计中未提供的功能。扩展属性是文件系统不可知论者,应用程序可以通过一个标准的接口来操纵他们,此接口不因文件系统而异。每个扩展属性可以通过唯一的键来区分,...

内核驱动

深入分析Linux自旋锁

阅读(202)

一、自旋锁 spinlock 的由来 众所周知, 自旋锁最初就是为了 SMP 系统设计的,实现在多处理器情况下保护临界区。 所以 在 SMP 系统中,自旋锁的实现是完整的本来面目。 但是 对于 UP 系统,自旋锁可以说是 SMP 版本的阉割版。因为只有 在 SMP 系统中的自旋锁才需要真正...

新手入门

哈佛结构和冯·诺依曼结构的区别

阅读(210)

哈佛结构 (英语: Harvard architecture )是一种将程序指令储存和数据储存分开的存储器结构。中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行)。程序指令储存和数据储存分开...

系统开发

Linux Makefile 中的陷阱

阅读(170)

前言 每个编写过Makefile的程序员都可能遇见过Makefile中内含的陷阱,本博文旨在展现陷阱,提醒自己,也供大家一起学习。 本博文会随所遇见的Makefile陷阱有关的问题而进行后续的更新。 陷阱一:在定义变量的语句后面空格之后使用了#注释符 结果:导致变量的值并不是你...

系统开发

Linux Makefile 编译速度的优化

阅读(78)

前言 如何提高 Makefile 的编译速度呢?既然是提高,那肯定是对于大项目而言,因为小项目本身源文件不多,Makefile 优化与否,对于编译速度而言,影响并不大。当然对于那些追求速度达到极致的人而言,就另当别论了。废话不多说了,切入主题! 本博文会随着所遇见的Makef...

系统开发

linux中结构体对齐

阅读(187)

linux中定义对齐字节 typedef struct sdk_handler { char comm_ver[10]; char name[20]; char reserve[20]; }PACKED sdk_handler_t; #define PACKED //__attribute__((aligned(1),packed)) // 一字节对齐 首先我们先看看下面的C语言的结构体: [cpp] view plaincopy typ...

系统开发

虚拟地址转换为物理地址

阅读(126)

应用程序只能提供一个虚拟地址,也可以通过如下方法获取物理地址,当然得调用驱动。 Linux采用页表的概念来管理虚拟空间,内核在处理虚拟地址时都必须将其转换为物理地址,然后处理器才能够访问。虚拟地址可以通过Linux的页表操作宏逐层查找到物理地址,简单来说需要将...

系统开发

GCC制作动态库导出符号表

阅读(141)

GCC制作动态链接库时默认会将所有的函数及变量都导出到符号表,这里的函数及变量指的是没有使用static修饰的,使用static修饰的函数及变量不会导出。正常情况下所有符号均导出是不会有问题的,但是有时会有问题,在下边的例子中会说明。为了避免这种情况,就需要定制符...

系统开发

GCC 符号表小结

阅读(143)

1) 如何生成不含符号表的目标文件 ? #一个方式是编译的时候使用 选项 s root@root2768:~/test_cgcc -s test1.c root@root2768:~/test_c objdump -t a.out a.out: file format elf64-x86-64 SYMBOL TABLE: no symbols # 另外一个方式是,生成目标文件以后,使用strip命...

系统开发

Linux 指定运行时动态库路径

阅读(60)

众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/ lib 。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序...

系统开发

Linux动态库的编译与使用

阅读(83)

Linux下的动态库以.so为后缀,我也是初次在Linux下使用动态库,写一点入门步骤,以便以后能方便使用。第一步:编写Linux程序库文件1.动态库接口文件 // 动态库接口文件getmaxlen.h #ifndef _GETMAXLEN_H_ #define _GETMAXLEN_H_ int getMaxLen( int *sel, int N); #endi...

新手入门

ARMCC和GCC编译ARM代码的软浮点和硬浮点问题

阅读(106)

本文介绍了ARM代码编译时的软浮点(soft-float)和硬浮点(hard-float)的编译以及链接实现时的不同。从VFP浮点单元的引入到软浮点(soft-float)和硬浮点(hard-float)的概念,然后是在GCC和ARMCC RVCT工具链下的具体编译参数。 VFP (vector floating-point) 从ARMv5开始,就...

内核驱动

Linux内存分配小结--malloc、brk、mmap

阅读(111)

Linux 的虚拟内存管理有几个关键概念: 1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址; 2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物理地址进行映射,获得真正物理地址; 3、如果虚拟地址对应物理地址不在物理...

新手入门

AMBA总线协议AHB、APB、AXI对比分析

阅读(190)

一、AMBA概述 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) ...