针对硬件特点对源代码的修改,比如内核的启动部分、存储设备的大小、具体的驱动问题等等;另一方面是功能模块的裁剪,主要是对内核功能的配置,包括支持的文件类型、外设模块等等。
总体上讲,针对硬件的修改有两种方法:
(1)对一种全新的硬件平台开展移植工作时,需采用“自底向上”的设计方法从头设计,即从硬件的需求考虑逐步地采用分析、设计、编码、测试。
(2)大多数情况下,是在前人工作的基础上修改己有的代码。Linux己经可以在多种体系结构中运行,可以参考相近的体系结构的代码,修改与目标硬件平台不同的部分即可。
嵌入式Linux内核功能模块的裁剪主要有三种方法: (1)使用Linux自身的配置工具,编译定制内核。 (2)修改内核源代码,进行内核裁剪。 (3)基于系统调用关系,进行内核裁剪
7、如何使用Linux自身的配置工具编译定制内核?(P169)
答:配置完内核之后,内核仍然以源代码的方式存在,不能直接下载到嵌入式系统中运行,因此,必须对内核进行编译,生成最终在目标板上运行的可执行代码。
编译内核分以下三步进行:
(1)执行以下命令,正确设置编译内核所需的附属文件,进行依赖性编译:# make dep
(2)执行以下命令,清除以前构造内核时产生的所有目标文件、模块文件和一些临时文件:# make clean
(3)执行以下命令,生成新的可执行内核映像文件:# make zImage
完成上述命令之后,就会在/arch/arm/boot/下生成一个自己定制的内核映像文件了,系统文件名可以任意取,如zImage.rom。
8、什么是文件系统?常用的嵌入式文件系统有哪些?(P169~170)
答:文件系统是指在一个物理设备上的任何文件组织和目录,它构成了Linux系统上所有数据的基础,Linux程序、库、系统文件和用户文件都驻留其中,因此,它是系统中庞大复杂且又是最为基本和重要的资源。通常对于一个嵌入式系统,仅包含内核是不够的,还必须有文件系统的支持。
Linux支持的文件系统有很多种,比如ext2(LinuxExtended-2)、minix文件系统、msdos(最初的FAT文件系统)、ntfs(WindowsNT文件系统)、nfs(网络文件系统)、hpft(OS/2高性能文件系统)、ncpfs(NovellNetWare文件系统)、affs Amiga(快速文件系统)等等。
9、如何构建一个嵌入式Linux文件系统?(P172)
答:要构建一个小型的Linux文件系统,就需要决定文件系统中哪些部分要保留,哪些部分可以裁减。首先应该保留那些保证系统运行的最基本的文件和目录,再通过对系统功能的分析,决定哪些模块
是可以裁减的。
一个最小的文件系统必须包括以下的内容:程序函数库、库函数文件的链接、/bin/sh(shell)、最基本的设备文件。
但是,这些文件目录组成的最基本的文件系统只能运行shell,不能完成其它任何的应用程序。要完成一些基本的功能还需要以下的一些文件:init程序、系统启动设置、基本的应用程序、设备文件、显示系统信息的虚拟文件系统、其它文件系统挂载目录、系统启动时执行的脚本、压缩工具等。
第7章 linux下设备驱动程序的开发设计
1、设备驱动程序在大多数嵌入式系统中起着重要作用,因为它们提供了 应用程序 和 设备 之间的软件层。
2、设备驱动程序通常包含 中断处理程序 和 设备服务子程序 两部分。
3、嵌入式系统中_____A____、___C_______、_____D___等都属于字符设备,典型的块设备有_____B_____、____E______等。
A.按键 B.硬盘 C.触摸屏 D.手写板 E.CD-ROM
4、系统中不同的设备有_____A_____主设备号,主设备号 A 设备使用____A______驱动程序。 A.相同的 B.不同的
5、CS8900A有两种工作模式:MEMORY模式和IO模式。
6、如何理解设备管理的“设备无关性”概念?(P174)
答:在Linux/uclinux的框架结构中,和设备相关的处理可以分为两个层次——文件系统层和设备驱动层。设备驱动层屏蔽具体设备的细节,文件系统层则向用户提供一组统一的、规范的用户接口。在嵌入式操作系统下的设备驱动程序主要是控制和管理下层物理设备的硬件控制器,同时为上层应用提供统一的、与设备无关的系统调用服务,这种设备管理方法称为“设备无关性”。
7、按模块化设计,一个典型的Linux设备驱动程序应包含哪几部分?在Linux操作系统中如何实现一个驱动程序的开发?(P177)
答:一个典型的Linux设备驱动程序应包含以下几部分代码:驱动程序模块的注册与注销函数、设备的打开、关闭、读、写及需要的其他操作函数、设备的中断服务程序。
在Linux操作系统中实现一个驱动程序的开发,必须按照如下步骤进行:设备或模块的初始化;实现该文件操作接口;注册了设备中断;编写中断服务程序;文件读写操作。
8、Linux中的设备可以分为哪几类,各有何特点?(P177~179)
答:Linux中的设备可以分为三类:字符设备、块设备和网络设备。各自的特点是:字符设备是指数据处理以字节为单位按顺序进行的设备,它没有缓冲区,不支持随机读写。在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了。块设备是指那些在输入/输出时数据处理以块为单位的设备,它一般都采用了缓存技术,支持数据的随机读写。网络设备面向的上一层不是文件系统层而是网络协议层,设备节点只有在系统正确初始化网络控制器之后才能建立。内核和网络设备驱动程序间的通信,与字符设备驱动程序、块设备驱动程序与内核间的通信也是完全不一样的。在Linux中,整个网络接口驱动程序的框架可分为四层,从上到下分别为协议接口层、网络设备接口层、提供实际功能的设备驱动功能层、以及网络设备和网络媒介层。
9、如何理解驱动程序的设备文件接口?(P182) 答:略。
10、详细描述在Linux操作系统下CS8900A网络芯片驱动程序的实现。(P194)
答:Linux操作系统下CS8900A网络芯片驱动程序的实现按照如下步骤进行: