嵌入式Linux中文站

Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别

阅读(331)

我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。 那么,在内核空间中如何申请内存呢?一般我们会用到 kmalloc()、kzalloc()、vmalloc() 等,下面我们介绍一下这些函数的使用以及它们之间的区别。 kmalloc() 函数原型: void *kmalloc(size_t size, gf

Device Tree机制

阅读(370)

1. 设备树(DeviceTree)基本概念及作用 在内核源码中,存在大量对板级细节信息描述的代码。这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录,对内核而言这些platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data绝大多数纯属垃圾冗余代码。为了解决这一问题,ARM内核版本3.x之后引入了原先在PowerPC等其他体系架构已经使用的FlattenedDeviceTree。 Ad

Linux信号集、信号屏蔽字和捕捉信号

阅读(293)

一. 阻塞信号 1. 信号的常见其他概念 实际执行信号的处理动作(3种)称为信号递达; 信号从产生到递达之间的状态,叫做信号未决; 进程可以选择阻塞某个信号; 被阻塞的信号产生时,将保持在未决状态,直至进程取消对该信号的阻塞,才执行递达的动作; 注意:阻塞和忽略是不同的。只要信号阻塞就不会被递达;而忽略是信号在递达之后的一种处理方式。 2. 在内核中的表示 信号在内核中的表示示意图: 每个信号都有两个标志位分别表示阻塞(block)和未决(pending),还有一个函数指针(handler)表示处理动作。

MIPI协议学习总结(一)

阅读(317)

一、MIPI 简介: MIPI(移动行业处理器接口)是 Mobile Industry Processor Interface 的缩写。MIPI是MIPI联盟发起的为移动应用处理器制定的开放标准。 已经完成和正在计划中的规范如下: 二、MIPI DSI规范: 1、名词解释 DCS ( Display Command Set ):DCS是一个标准化的命令集,用于命令模式的显示模组。 DSI, CSI ( Display Serial Interface,Camera Serial Interface ) D

Linux设备树语法详解

阅读(288)

概念 Linux内核从3.x开始引入设备树的概念,用于实现 驱动代码与设备信息相分离 。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,驱动开发者只需要修改设备树文件信息,不需要改写驱动代码。比如在ARM Linux内,一个 .dts(device tree source)文件 对应一个ARM的machine,一般放置在内

Linux V4L2驱动要点

阅读(239)

首先来看Read/Write,如果VIDIOC_QUERYCAP调用返回的v4l2_capability参数中,V4L2_CAP_READWRITE被设置成真了的话,就说明支持Read/Write I/O。这是最简单最原始的方法,它需要进行数据的拷贝(而不是像memory map那样只需要进行指针的交换),而且不会交换元数据(比如说帧计数器和时间戳之类的可用于识别帧丢失和进行帧同步),虽然它是最原始的方法,但因为其简单,所以对于简单的应用程序比如只需要capture静态图像是很有用的。 如果使用Read/

SPI总线协议及SPI时序图详解

阅读(202)

SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。 上升沿发送、下降沿接收、高位先发送。 上升沿到来的时候

内核探测工具systemtap简介

阅读(243)

systemtap是内核开发者必须要掌握的一个工具,本文我将简单介绍一下此工具,后续将会有系列文章介绍systemtap的用法。 什么是systemtap 假如现在有这么一个需求:需要获取正在运行的 Linux 系统的信息,如我想知道系统什么时候发生系统调用,发生的是什么系统调用等这些信息,有什么解决方案呢? 最原始的方法是,找到内核系统调用的代码,加上我们需要获得信息的代码、重新编译内核、安装、选择我们新编译的内核重启。这种做法对于内核开发人员简直是梦魇,因为一遍做下来至少得需要1个多小时,不仅破坏了原