嵌入式Linux中文站

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

阅读(281)

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

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

阅读(192)

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

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

阅读(197)

应用程序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内核源码分析--内核启动命令行的传递过程

阅读(201)

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

Linux内核源码分析方法

阅读(197)

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

Linux inotify功能及实现原理

阅读(160)

1. inotify主要功能 它是一个内核用于通知用户空间程序 文件系统变化 的机制。 众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、udev 和 inotify 就是这种需求催生的。Hotplug 是一种内核向用户态应用通报关于热插拔设备一些事件发生的机制,桌面系统能够利用它对设备进行有

linux内核空间和用户空间详解

阅读(180)

linux驱动程序一般工作在内核空间,但也可以工作在用户空间。下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们。 Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间。而将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为用户空间)。因为每个进程可以通过

Linux内核定时器的使用

阅读(150)

LINUX内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于linux/timer.h和kernel/timer.c文件中。 被调度的函数肯定是异步执行的,它类似于一种软件中断,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则: 1)没有current指针、不允许访问用户空间。因为没有进程上下文,相关代码和被中断的进程没有任何联系。 2)不能执行休眠(或可能引起休眠的函数)和调度。 3)任何被访问的数据结构都应该针对并发访问进行保护,以防止竞争条件