嵌入式Linux中文站

开发专区

USB设备被识别流程

USB设备被识别流程

阅读(242)

USB模块包括usb core,host,hub,device驱动,其中hub会启动一个内核线程名曰:khubd(hub_events一直在查询(hub使用的是中断传输), 当usb 设备连接在 hub 的某个端口上,hub检测到有设备连接了进来,hub会去调用hub_port_status函数去获取hub端口状态,要是真有设备了,会调用hub_port_connect_change函数会调用usb_alloc_dev函数为设备分配一个struct usb_device结构的对象并初始化,这个初始化将us...

用户态与内核态 & 文件流与文件描述符

用户态与内核态 & 文件流与文件描述符

阅读(137)

用户态和内核态 程序代码的依赖和调用关系如下图所示: Lib :标准ASCI C函数,几乎所有的平台都支持该库函数,因此依赖该库的程序可移植性好; System Function :系统调用函数,与系统内核进行交互,不同平台具备不同的函数接口,因此可移植性较差 区分用户态和内核态主要是由于系统资源的有限性,不能无限制的随意分配给用户使用,必须由系统进行统一管理 User mode :不能直接对系统资源进行访问,如果要操作系统资源,必须转化为内核态 Kernel mode :管理系统资源,可直接对系统资源进...

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

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

阅读(185)

在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不用,但是一般的做法又必须先预留着。目前,Marek Szyprowski和Michal Nazarewicz实现了一套全新的Contiguous Memory Allocator。通过这套机制,我们可以做到不预留内存,这些内存平时是可用的,只有当需要的时候才被分配给Camera,HDMI等设备。下面分析它的基本代码流程。 声明连续内存 内核启动过程中arch/arm/mm/...

Linux 文件系统扩展属性

Linux 文件系统扩展属性

阅读(173)

扩展属性(xattrs)提供了一个机制用来将《键/值》对永久地关联到文件,让现有的文件系统得以支持在原始设计中未提供的功能。扩展属性是文件系统不可知论者,应用程序可以通过一个标准的接口来操纵他们,此接口不因文件系统而异。每个扩展属性可以通过唯一的键来区分,键的内容必须是有效的UTF- 8 ,格式为namespace.attribute,每个键采用完全限定的形式。 需要注意的是这里的值可以是任意字节的数组,未必是字符存,而且最后可能不是null,这样在访问的时候必须知道值的大...

深入分析Linux自旋锁

深入分析Linux自旋锁

阅读(208)

一、自旋锁 spinlock 的由来 众所周知, 自旋锁最初就是为了 SMP 系统设计的,实现在多处理器情况下保护临界区。 所以 在 SMP 系统中,自旋锁的实现是完整的本来面目。 但是 对于 UP 系统,自旋锁可以说是 SMP 版本的阉割版。因为只有 在 SMP 系统中的自旋锁才需要真正自旋。 二、自旋锁的目的 自旋锁的实现是为了保护一段短小的临界区操作代码,保证这个临界区的操作是原子的,从而避免并发的竞争冒险。在 Linux 内核中,自旋锁通常用于包含内核数据结构的操作,你可以看到在许多内核数据结构中...

Linux Makefile 中的陷阱

Linux Makefile 中的陷阱

阅读(181)

前言 每个编写过Makefile的程序员都可能遇见过Makefile中内含的陷阱,本博文旨在展现陷阱,提醒自己,也供大家一起学习。 本博文会随所遇见的Makefile陷阱有关的问题而进行后续的更新。 陷阱一:在定义变量的语句后面空格之后使用了#注释符 结果:导致变量的值并不是你所赋值的,而是把值与注释符之间的空格一起赋值给了变量,使得执行违背自己的意愿,而不容易察觉。 实例说明如下(Makefile版本:GNU MAKE 3.81): TmpDir = /Source #此处随意定义了一个目录, #为了验...

Linux Makefile 编译速度的优化

Linux Makefile 编译速度的优化

阅读(84)

前言 如何提高 Makefile 的编译速度呢?既然是提高,那肯定是对于大项目而言,因为小项目本身源文件不多,Makefile 优化与否,对于编译速度而言,影响并不大。当然对于那些追求速度达到极致的人而言,就另当别论了。废话不多说了,切入主题! 本博文会随着所遇见的Makefile编译速度有关的问题而持续更新。 1. 赋值运算符的影响 := 和 = 两个赋值运算符是如何影响编译速度的呢?这其中的奥妙就在于它们的本质含义,若是理解透彻了也就不会心存疑惑了,博主也是苦思了很久,并且搜索了很多网络资料,最后被该...

linux中结构体对齐

linux中结构体对齐

阅读(199)

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 typedef structMemAlign { inta; charb[...