Embedded Linux 技术与概念解析
,将整个root filesystem包装成1个映像档(image file)。根据目标装置的不同,我们可以将映像档包装成ROM fs、Compress ROM fs、ext2fs或是compress RAM fs。 ROM file system ROM file system(romfs)是1种只读的档案系统,在Embedded Linux里的主要应用为制作romfs格式的档案系统映像文件。我们将root filesystem制作成romfs filesystem的imagen。开机后,整个filesystem仅能读取。要使用romfs filesystem必须将Linux kernel里的CONFIG_ROMFS_FS功能选项打开。制作ROM fs映像档所使用的工具为genromfs。 Compressed ROM file system Compressed ROM file system(cromfs)即是压缩过的ROM file system,其制作方式相当简单,只要使用gzip将ROM file system的映像档压缩即可。 制作ext2fs映像档 制作ext2fs映像档的方式有2种。1种是使用dd指令产生1个空白的映像档,接着再将此映像档以mkfs.ext2指令格式化成ext2的格式。制作好的空白映像档再以loopback mount方式挂载到1个目录下,再将root filesystem整个复制到此目录下,即可完成ext2fs映像档的制作。 另外1种建立ext2fs映像档的方式是使用genext2fs工具,此工具的好处是,当我们需要在root filesystem里预先建立(pre-built)装置文件时(device file),只需要编写1个装置文件表格,genext2fs工具会在打包映像档时,自动在root filesystem里建立装置文件。 Initial RAM disk(initrd) RAM disk是存在于内存中的虚拟磁盘,也就是将RAM拿来当成磁盘使用。在Embedded Linux的应用中,我们通常会将ramdisk当成暂存目录来使用。例如将/dev/ram1附挂到/tmp目录,以便能让应用程序存放暂时性档案。/dev/ram?为ramdisk的device file。由于整个root filesystem是从真正的储存装置读取并加载至ramdisk,因此有1个重要的特性是对file system所做的任何修改,都不会影响到真正root filesystem的内容。 initrd全名为initialize RAM disk,是1个特殊的RAM disk。bootloader会将initrd载至内存,Linux kernel则可在/dev/ram0找到initrd。initrd会在Linux kernel开机前就加载,initrd正式的用途是用来存放开机时所需要的驱动程序(因root filesystem尚未mount进来)。在Embedded Linux应用上,我们会利用initrd来存放整个档案系统(root filesystem),也就是将root filesystem制作成ext2或romfs格式(或其它档案系统)的映像文件,并在开机时由bootloader加载内存,initrd均位于/dev/ram0。要使用RAM disk与initrd,必须将Linux kernel的CONFIG_BLK_DEV_RAM以及CONFIG_BLK_DEV_INITRD)。 使用initrd做为root filesystem装置 将initial RAM disk当成root filesystem来使用,是在Embedded Linux应用上是相当常见的技巧,如果我们想将initial RAM disk当成存放root filesystem的装置来使用,在开机时,只需要配合root=的kernel开机参数即可。 initramfs Linus本人在Linux 2.6时代所提出的 initramfs ,是1种更好的 root= 做法。简单来说,initramfs就是kernel 2.6 的 initrd,initramfs是属于1种compressed ramfs(ram filesystem)的映像档。 C链接库 在C链接库方面,除了标准的glibc也被广泛应用在嵌入式系统领域外,也有一些专门针对嵌入式系统应用所发展的C链接库,像是uClibc以及Diet libc。但是由于现在的ARM9处理器计算效能都很快,平台也多搭载大容量NAND闪存,所以许多实作都直接使用libc来实作root filesystem。 Linux驱动程序 由于嵌入式系统整体来看,除了软件开发外,也包含硬件客制化,因此驱动程序在嵌入式系统技术领域中,占了举足轻重的地位。学习驱动程序需要确实了解硬件的规格与微处理器架构,并且工程师还要能分得清楚哪些东西是接口(interfacing),也就是与硬件无关的程序(machine-independent);以及哪些是站在第一线做硬件控制的程序(machine-dependent)。各种软件硬接口与汇流排也都要精通。 了解Linux驱动程序的架构,是进入嵌入式Linux领域的重点功课,因为许多针对ARM9平台的驱动程序都是参考框架、或是针对特定开发板的实作,因此必须了解Linux驱动程序的架构,并进行修改,以符合自己的开发板与外围规格。 Linux驱动程序,采取严谨的分层式架构设计(layered architecture),利用分层的架构设计来彻底区分generic device driver(machine independent)与machine dependent driver。 Linux驱动程序透过注册与回呼的机制来清楚区分每1层的关系。分层架构的实作必须在下层将自己注册给上层,上层再回
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
