嵌入式Linux中文站

Linux设备驱动模型之platform总线深入浅出(加入设备树)

阅读(185)

在Linux2.6以后的设备驱动模型中,需关心总线,设备和驱动这三种实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。 对于依附在USB、PCI、I2C、SPI等物理总线来 这些都不是问题。但是在嵌入式系统里面,在Soc系统中集成的独立外设控制器,挂接在Soc内存空间的外设等却不依附在此类总线。基于这一背景,Linux发明了一种总线,称为platform。 相对于USB、PCI、I2C、SPI等物理总线来

嵌入式Linux设备驱动工作原理的研究

阅读(287)

摘要: 计算机软件和集成电路技术的发展,为嵌入式产业带来了巨大的机遇和挑战,Linux以其稳定、高效、易定制、硬件广泛支持等特点,迅速崛起为当今计算机领域的一匹黑马。文章通过对与嵌入式Linux设备驱动程序相关内核源码进行分析,从设备驱动的体系结构和内核环境两方面入手,对嵌入式Linux设备驱动程序的工作原理进行剖析和阐述。 关键词: Linux;嵌入式系统;设备驱动;内核环境 0. 引 言 设备驱动程序在Linux内核中占有极其重要的位置,它是内核用于完成对物理设备的控制操作的功能模块。除了CPU、内存

Linux IIC设备驱动剖析

阅读(263)

写在前面 由于IIC总线只需要两根线就可以完成读写操作,而且通信协议简单,一条总线上可以挂载多个设备,因此被广泛使用。但是IIC总线有一个缺点,就是传输速率比较低。本文基于Linux-2.6.36版本,说说IIC子系统在Linux中的实现。 IIC子系统框架分为3各部分: 1. I2C核心: I2C总线和I2C设备驱动的中间枢纽,它为 I2C总线和设备驱动 提供了注册、注销等方法。 2. I2C总线驱动(I2C控制器驱动): 对I2C硬件体系中适配器端的实现,控制器可以在CPU内部,也可以集成在CPU内部

linux内存管理之物理内存相关知识

阅读(261)

Linux内核采用页式存储管理,进程的地址空间被划分成固定大小的页面(page),物理内存同样被分为与页面大小相同的页帧(page frame),由MMU在运行时将虚拟地址映射成某个物理内存页帧上的地址,MMU一般内嵌在CPU上。 1NUMA(Non Uniform Memory Access) 在现代计算机,特别是在多核的CPU环境中,CPU访问内存的速度与两者之间的距离有关,导致访问不同内存区域的时间可能不同。如下图,是系统中有2个CPU(可以超过2个CPU)时,NUMA内存访问 模型。 下图是Int

Linux中的loop设备

阅读(159)

1. 什么是loop设备? loop设备是一种伪设备,是使用文件来模拟块设备的一种技术,文件模拟成块设备后, 就像一个磁盘或光盘一样使用。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。之所以叫loop设备(回环),其实是从文件系统这一层来考虑的,因为 这种被 mount 起来的镜像文件它本身也包含有文件系统,通过loop设备把它mount起来,

嵌入式Linux内核,文件系统的制作

阅读(284)

嵌入式Linux系统由 Linux内核 + 根文件系统 两部分组成 一个完整的嵌入式Linux系统组成:bootloader + boot parameters + kernel + root filesystem 嵌入式Linux系统使用的是Linux内核,制作方法基本和X86平台的Linux内核一致,下面介绍制作运行于micro2440开发板的内核和根文件系统。 嵌入式Linux内核的制作: 1,到www.kernel.org下载源代码,解压,进入内核源代码目录。 2,清除原有的配置与中间文件 x86

嵌入式Linux设备驱动编写原理

阅读(196)

驱动简介 Linux设备驱动程序是内核的一部分,它完成以下功能: 对设备初始化和释放 把数据从内核传送到硬件和从硬件读取数据 读取应用程序传送给设备文件的数据和回送应用程序请求的数据 检测和处理设备出现的错误。 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。Linux设备驱动程序为应用程序屏蔽了硬件细节,在应用程序看来,Linux硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。每个设备驱动程序都具有以下几个特性: 1. 具有一整套的

Linux内核字符设备驱动之写操作

阅读(199)

应用程序write函数的使用: char *p = hello,world; write(fd, p, 12); //将数据写入到设备 底层驱动write接口 struct file_operations { ssize_t ( *write ) (struct file *file , const char __user *buf , size_t count, loff_t *ppos );}; write 接口作用:用于写设备,将数据写入到设备中与应用程序 write 的调用关系:应用程序调用 wr