电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章arm嵌入式关于嵌入式设备上的Linux 系统开发

关于嵌入式设备上的Linux 系统开发

11-20 15:52:47 | http://www.5idzw.com | arm嵌入式 | 人气:998
标签:arm嵌入式系统,arm系统,arm开发,http://www.5idzw.com 关于嵌入式设备上的Linux 系统开发,http://www.5idzw.com

  输入设备驱动程序

  可触摸板是用于嵌入式设备的最基本的用户交互设备之一 ― 小键盘、传感器和滚动轮也包含在许多不同设备中以用于不同的用途。

  触摸板设备的主要功能是随时报告用户的触摸,并标识触摸的坐标。这通常在每次发生触摸时,通过生成一个中断来实现。

  然后,这个设备驱动程序的角色是每当出现中断时就查询触摸屏控制器,并请求控制器发送触摸的坐标。一旦驱动程序接收到坐标,它就将有关触摸和任何可用数据的信号发送给用户应用程序,并将数据发送给应用程序(如果可能的话)。然后用户应用程序根据它的需要处理数据。

  几乎所有输入设备 ― 包括小键盘 ― 都以类似原理工作。

  闪存 MTD 驱动程序

  MTD 设备是象闪存芯片、小型闪存卡、记忆棒等之类的设备,它们在嵌入式设备中的使用正在不断增长。

  MTD 驱动程序是在 Linux 下专门为嵌入式环境开发的新的一类驱动程序。相对于常规块设备驱动程序,使用 MTD 驱动程序的主要优点在于 MTD 驱动程序是专门为基于闪存的设备所设计的,所以它们通常有更好的支持、更好的管理和基于扇区的擦除和读写操作的更好的接口。Linux 下的 MTD 驱动程序接口被划分为两类模块:用户模块和硬件模块。

  用户模块

  这些模块提供从用户空间直接使用的接口:原始字符访问、原始块访问、FTL(闪存转换层,Flash Transition Layer ― 用在闪存上的一种文件系统)和 JFS(即日志文件系统,Journaled File System ― 在闪存上直接提供文件系统而不是模拟块设备)。用于闪存的 JFS 的当前版本是 JFFS2(稍后将在本文中描述)。

  硬件模块

  这些模块提供对内存设备的物理访问,但并不直接使用它们。通过上述的用户模块来访问它们。这些模块提供了在闪存上读、擦除和写操作的实际例程。

  MTD 驱动程序设置

  为了访问特定的闪存设备并将文件系统置于其上,需要将 MTD 子系统编译到内核中。这包括选择适当的 MTD 硬件和用户模块。当前,MTD 子系统支持为数众多的闪存设备 ― 并且有越来越多的驱动程序正被添加进来以用于不同的闪存芯片。

  有两个流行的用户模块可启用对闪存的访问: MTD_CHAR 和 MTD_BLOCK 。

  MTD_CHAR 提供对闪存的原始字符访问,而 MTD_BLOCK 将闪存设计为可以在上面创建文件系统的常规块设备(象 IDE 磁盘)。与 MTD_CHAR 关联的设备是 /dev/mtd0、mtd1、mtd2(等等),而与 MTD_BLOCK 关联的设备是 /dev/mtdblock0、mtdblock1(等等)。由于 MTD_BLOCK 设备提供象块设备那样的模拟,通常更可取的是在这个模拟基础上创建象 FTL 和 JFFS2 那样的文件系统。

  为了进行这个操作,可能需要创建分区表将闪存设备分拆到引导装载程序节、内核节和文件系统节中。样本分区表可能包含以下信息:

  清单 5. MTD 的简单闪存设备分区

  struct mtd_partition sample_partition = {

  {

  /* First partition */

  name : bootloader,             /* Bootloader section */

  size    : 0x00010000,          /* Size  */

  offset  : 0,          /* Offset from start of flash- location 0x0*/

  mask_flags : MTD_WRITEABLE     /* This partition is not writable */

  },

  {                                    /* Second partition */

  name : Kernel,                 /* Kernel section */

  size    :  0x00100000,         /* Size */

  offset : MTDPART_OFS_APPEND,   /* Append after bootloader section */

  mask_flags : MTD_WRITEABLE     /* This partition is not writable */

  },

  {                                    /* Third partition */

  name : JFFS2,                  /* JFFS2 filesystem */

  size    :  MTDPART_SIZ_FULL,   /* Occupy rest of flash */

  offset :  MTDPART_OFS_APPEND   /* Append after kernel section */

  }

  }

  上面的分区表使用了 MTD_BLOCK 接口对闪存设备进行分区。这些分区的设备节点是:

  简单闪存分区的设备节点

  User      device node         Major number    Minor number

  Bootloader    /dev/mtdblock0          31              0

  Kernel        /dev/mtdblock1          31              1

  Filesystem    /dev/mtdblock2          31              2

  在本例中,引导装载程序必须将有关 root 设备节点(/dev/mtdblock2)和可以在闪存中找到文件系统的地址(本例中是 FLASH_BASE_ADDRESS + 0x04000000 )的正确参数传递到内核。一旦完成分区,闪存设备就准备装入或挂装文件系统。

  Linux 中 MTD 子系统的主要目标是在系统的硬件驱动程序和上层,或用户模块之间提供通用接口。硬件驱动程序不需要知道象 JFFS2 和 FTL 那样的用户模块使用的方法。所有它们真正需要提供的就是一组对底层闪存系统进行 read 、 write 和 erase 操作的简单例程。

  嵌入式设备的文件系统

  系统需要一种以结构化格式存储和检索信息的方法;这就需要文件系统的参与。Ramdisk(请参阅 参考资料)是通过将计算机的 RAM 用作设备来创建和挂装文件系统的一种机制,它通常用于无盘系统(当然包括微型嵌入式设备,它只包含作为永久存储媒质的闪存芯片)。

  用户可以根据可靠性、健壮性和/或增强的功能的需求来选择文件系统的类型。下一节将讨论几个可用选项及其优缺点。

  第二版扩展文件系统(Ext2fs)

  Ext2fs 是 Linux 事实上的标准文件系统,它已经取代了它的前任 ― 扩展文件系统(或 Extfs)。Extfs 支持的文件大小最大为 2 GB,支持的最大文件名称大小为 255 个字符 ― 而且它不支持索引节点(包括数据修改时间标记)。Ext2fs 做得更好;它的 优点是:

  Ext2fs 支持达 4 TB 的内存。

  Ext2fs 文件名称最长可以到 1012 个字符。

  当创建文件系统时,管理员可以选择逻辑块的大小(通常大小可选择 1024、2048 和 4096 字节)。

  Ext2fs 了实现快速符号链接:不需要为此目的而分配数据块,并且将目标名称直接存储在索引节点(inode)表中。这使性能有所提高,特别是在速度上。

  因为 Ext2 文件系统的稳定性、可靠性和健壮性,所以几乎在所有基于 Linux 的系统(包括台式机、服务器和工作站 ― 并且甚至一些嵌入式设备)上都使用 Ext2 文件系统。然而,当在嵌入式设备中使用 Ext2fs 时,它有一些 缺点:

上一页  [1] [2] [3] [4] [5]  下一页

,关于嵌入式设备上的Linux 系统开发
关于《关于嵌入式设备上的Linux 系统开发》的更多文章