
Linux设备模型(2)_Kobject
Kobject是Linux设备模型的基础,同时也是设备模型中最难理解的一部分(参见Documentation/kobject.txt)。因此,在深入探讨Linux设备模型之前,有必要先对Kobject进行分析。

详解Linux设备模型(1)_基本概念
在“Linux内核的整体架构”一文中,蜗蜗提到了Linux内核支持世界上几乎所有的不同功能硬件设备,这也是Linux的一个优点。然而,这也导致了Linux内核中一半的代码是设备驱动程序,而随着硬件设备的快速升级换代,设备驱动程序的代码量也在迅速增长。我认为,这种现象破坏了“简洁即美”的理念,使得Linux内核显得非常臃肿、杂乱且难以维护。然而,蜗蜗也明白,这并非Linux的过错,因为Linux是一个宏内核,必须面对设备多样性并实现对应的驱动程序。

Lnux自带i2c工具使用
I2C总线已成为一个全球标准,被1000多个来自50多个公司的ICs所使用。此外,I2C总线与许多不同的控制总线兼容,例如SMBus(系统管理总线)、PMBus(电源管理总线)、IPMI(智能平台管理总线)、DDC(显示数据通道)以及ATCA(高级电信架构)。如果我没有记错的话,Linux中的I2C框架完全支持SMBus。同时,图中显示了Linux自带的I2C工具的使用情况。

详解Linux内核中的内存屏障
我之前阅读了一篇关于顺序一致性和缓存一致性的讨论文章,对于这两个概念的区别和联系有了更加清晰的认识。在Linux内核中,有很多同步和屏障机制,我想在此做一些总结。

详解Linux MTD层次
MTD(memory technology device内存技术设备)是Linux中的一个子系统,用于访问memory设备(如ROM、flash)。MTD的主要目的是简化新memory设备的驱动开发,为此,它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码都在/drivers/mtd子目录下。CFI接口的MTD设备可以分为四层(从设备节点直到底层硬件驱动),这四层从上到下分别为:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。

Linux内核初始化过程中的调用顺序
所有的__init函数被保存在.initcall.init区段中,同时也保存了一份函数指针。在内核初始化时,内核通过这些函数指针调用这些__init函数指针。整个初始化完成后,包括.init.text和.initcall.init在内的整个init区段都会被释放。

Syscall系统调用Linux内核跟踪
在Linux用户空间中,我们常常需要调用系统调用。下面我们以Linux2.6.37版本为例,跟踪一下read系统调用的实现。不同版本的Linux系统调用实现可能会有所不同。

对Linux的进程内核栈的认识
当我重新阅读《LDD3》时,我发现了一个曾经忽略的句子:“内核具有非常小的栈,它可能只有像一个4096字节大小的页那样小。” 针对这句话,我简单地学习了一下进程的“内核栈”。

Linux USB 驱动开发(一)—— USB设备基础概念
对于终端用户而言,USB设备能够为主机提供各种附加功能,例如文件传输和声音播放等。然而对于USB主机而言,它与所有USB设备的接口都是一致的。一个USB设备由三个功能模块组成:USB总线接口、USB逻辑设备和功能单元。