嵌入式Linux中文站

Linux IIC设备驱动剖析

阅读(147)

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

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

阅读(212)

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

Linux中的loop设备

阅读(139)

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

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

阅读(160)

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

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

阅读(151)

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

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

阅读(181)

应用程序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

Linux内核源码分析--内核启动命令行的传递过程

阅读(148)

Linux内核在启动的时候需要一些参数,以获得当前硬件的信息或者启动所需资源在内存中的位置等等。这些信息可以通过bootloader传递给内核,比较常见的就是cmdline。以前我在启动内核的时候习惯性的通过uboot传递一个cmdline给内核,没有具体的分析这个过程。最近在分析内核启动过程的时候,重新看了一下内核启动参数的传递过程,彻底解决一下在这方面的疑惑。 一、bootloader与内核的通讯协议 内核的启动参数其实不仅仅包含在了cmdline中,cmdline不过是bootloader传递给内核

Linux内核源码分析方法

阅读(163)

一、内核源码之我见 Linux内核代码的庞大令不少人望而生畏,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内。如果要扩展自己知识的广度,我们需要多接触其他人编写的代码,尤其是水平比我们更高的人编写的代码。通过这种途径,我们可以跳出自己知识圈的束缚,进入他人的知识圈,了解更多甚至我们一般短期内无法了解到