Posted in 面试题 onOctober 04, 2016
1.嵌入式系统的定义
以应用为中心,以计算机技术为基础的,并且软件硬件是可剪裁的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标的严格要求的专用计算机系统。它可以实现对其他设备的控制、监视或管理等功能。
2.嵌入式系统的特点?
1系统内核小。2专用性强。3系统精简。4高实时性的系统软件(OS)是嵌入式软件的基本要求。而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。 5嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。6嵌入式系统开发需要开发工具和环境7 硬件与软件的互相依赖性强8采用专用的嵌入式微处理器9 多种技术间结合更加紧密10 系统对用户透明11系统资源有限12 应用方面广泛
3.嵌入式系统有哪几个组成部分?
嵌入式系统通常由嵌入式处理机、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件等几大部分组成。一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等),中间层包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。系统软件层由实时多任务操作系统、文件系统、图形用户接口、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。
4.试说明嵌入式操作系统与通用的计算机系统的区别?
1.面向特定应用,一般都有实时要求
2.集先进的计算机技术、半导体工艺、电子技术和通信网络技术于一体的并且在不断创新的知识 集成系统。
3.嵌入式系统是和具体应用对象有机地结合在一起,因而其升级换代也是和具体的产品同步进行的。
4.嵌入式系统的软硬件设计着重于高效率性。在最大限度满足应用需求的前提下,降低成本是必需要考虑的主要问题。
5.嵌入式系统软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。
6.嵌入式系统通常是面向特定应用的嵌入式CPU与通用型的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密。
7.嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。
8.嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。
5.RTOS实时操作系统中强调的实时是什么概念?
RTOS,实时系统(Real-time operating system),实时系统能够在指定或者确定的时间内完成系统功能和外部或内部、同步或异步时间做出响应的系统。它的正确性不仅依赖系统计算的逻辑结果,还依赖于产生这个结果的时间。因此实时系统应该在事先定义的时间范围内识别和处理离散事件的能力;系统能够处理和储存控制系统所需要的大量数据。根据操作系统的工作特性,实时是指物理进程的真实时间。实时操作系统具有实时性,能从硬件方面支持实时控制系统工作的操作系统。其中实时性是第一要求,需要调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求,实时指的是特定操作所消耗的时间(以及空间)的上限是可预知的。操作系统能够在规定响应时间内完成客户服务程序
???6.Linux指的是什么,有什么区别?
Linux是指由Linux本人维护并不断更新的内核 。一个嵌入式Linux系统指的是一个基于Linux内核的,但不包含有关这个内核的任何专业的库或是用户工具的嵌入式系统。Linux最初是专门为基于Intel处理器的个人计算机而设计的。Linux的前身指的是由Linus Torvald维护开发的开放源代码的类Unix操作系统的内核。目前大多数人用它来表示以Linux内核为基础的整个操作系统。从这种意义讲,Linux指的是源码开放,包含内核和系统工具、完整的开发环境和应用的类Unix操作系统。
7.为什么要采用Linux内核来构建嵌入式操作系统?
内核本身小而且简单,易于理解,易于维护。各种特殊的模块(如文件系统等)、设备驱动乃至中断处理程序,都可以作为独立的进程开发,既简单又容易调试,并且容易在其他环境下模拟。系统的配置也变得更方便灵活。以微内核为基础的系统的扩充就比较灵活、方便,或者说可裁减性较好。程度代码是可以获取的;有完整的源码,软件丰富并且免费;得到众多硬件生产家的广泛支持;包括cpu、计算机外围设备;完善的通信协议、软件标准和文件管理机制;提供完全免费且优秀的开发工具;广泛的社群支持;无需购买licence,是免费的;不依赖特定厂商、供应商;成本相对低廉。
8.简要说明linux内核的基本构成?(结构模块表示)
MMU:内存管理单元,完成地址映射(应用虚拟地址方式)
VFS:虚拟文件管理系统,提供了统一管理计算机资源的途径。使统一规范计算机资源的使用格式成为可能,方便传输
SCHED:进程调用单元。支持多任务运行。利用软件中断的特点,将CPU 的时间线划分给各个任务,完成多任务管理
IPC:进程间通信单元。实现多个不同程序在运行时可以进行数据交换、通信。
NET:网络。网络不做为通用设备,以特定工作单元存在。负责计算机系统与其他计算机相互通信的接口。
???9.试简要叙述嵌入式Linux系统的类型
10.通常可采用哪几种方式来开发嵌入式Linux系统?给出连接示意图。
方式有:
(1)连接型(宿主机/目标板链接开发)
(2)可移动连接型(利用可移动的存储器作为宿主机/目标板之间的中介)
(3)标准化(在开发板上进行独立开发)
11.试简要说明Linux系统在目标板上的启动过程?
用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动,接着启动设备上安装的引导程序lilo或grub开始引导Linux,Linux首先进行内核的引导,接下来执行init程序,init程序调用了rc.sysinit和rc等程序,rc.sysinit和rc,当完成系统初始化和运行服务的任务后,返回init;init启动了mingetty后,打开了终端供用户登录系统,用户登录成功后进入了Shell,这样就完成了从开机到登录的整个启动过程。
12.试解释建立交叉开发平台的必要性?
嵌入式系统的硬件一般有很大的局限性,或者处理器频率很低,或者存储空间很小,或者没有键盘、鼠标设备,所以一般不可能在这种嵌入式目标硬件平台上直接编译构建Linux系统,因此开发者提出了交叉开发环境模型。它满足兼容性要求;目标系统对其可用的编译工具没有本地设置;主机资源比目标系统快的多,或具有多得多的可用资源也是其建立的原因。
13.GNU提供的开发工具链有哪些工具程序,试举出2、3例
编辑器: vi,emacs
代码打补丁工具: diff & patch:
项目构建工具: make(Makefile),autotool(包括Autoconf, Automake 和 Libtool)
版本控制工具: cvs,subversion,GNU Arch:GNU,git:
C库: glibc,uclibc,newlib,diet libc
二进制和目标文件处理工具: binutils
编译器: gcc
源代码调试器: gdb
内存管理检查器: valgrind
调用跟踪器: strace,ltrace:,truss
性能分析器: gprof,qprof,oprofile
(编译开发工具:即能够把一个源程序编译生成一个可执行程序的软件,如gcc等。
调试工具:即能够对执行程序进行源码或汇编级调试的软件,如gdb等。
软件工程工具:用于协助多人开发或大型软件项目的管理的软件,如make、cvs等。)
14.为什么要配置内核?为何要重新编译内核?
内核,是个操作系统的核心。他负责管理系统的进程、内存、设备驱动程式、文件和网络系统,决定着系统的性能和稳定性,Linux不同发行版、甚至同发行版但不同内核之间的驱动都很难兼容。根据用户需求量体裁衣、使内核更小,而且更稳定、更高效。
Linux。内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身制定一个更高效,更稳定的内核,就需要重新编译内核。通常,更新的内核会支持更多的硬件,具有更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。支持新硬件,解决bug,提升效率,支持新功能,主要面向网络、开发、服务应用的。
15什么是根文件系统?在构建嵌入式Linux系统时,其根文件系统必须包含哪些目录?
Linux引导启动时,默认使用的文件系统是根文件系统,是Linux系统的安装点,它是一种目录结构,包括Linux启动时所必须的目录和关键性的文件。其中一般都包括这样一些子目录: /etc, /dev,/proc,/lib, /usr,/bin,/sbin, /var,/tmp;等。
16VFS指的是什么?它在Linux内核中的主要作用是什么?
Virtual File System虚拟文件系统,也称为虚拟文件系统开关(Virtual Filesystem Switch).,Linux档案系统对外的接口,是物理文件系统与服务之间的接口层,任何要使用档案系统的程序都必须经由这层接口来使用它。
通过VFS,可以为访问文件系统的系统调用提供一个统一的抽象接口。VFS的作用就是采用标准的Linux系统调用读写位于不同物理介质上的不同文件系统。在Linux下,通过VFS,一个抽象的通用访问接口屏蔽了底层文件系统和物理介质的差异性,记录可用的文件系统类型,将设备同对应的文件系统联系起来,处理一些面向文件的通用操作,涉及到针对文件系统的操作时,VFS把它们影射到与控制文件、目录以及inode。使统一规范计算机资源的使用格式成为可能,方便传输。
17.试解释根文件目录中/bin和/sbin及/usr/bin和/usr/sbin的区别?
用户和管理员必备的二进制文件,就会放在/bin。系统管理员必备,但是一般用户根本不会用到的二进制文件,就会放在/sbin。相对而言,不是用户必备的二进制文件,多半会放在/usr/bin;如果不是系统管理员必备的工具,多半会放在/usr/sbin. /bin里面一般是普通可执行程序,而/sbin里多为系统管理程序和服务程序,后者是给超级用户或者系统管理员进行系统维护使用的,普通用户没有使用它们的权限,二者区别关键还是在于他们的权限不同。
???18.Linux内核中的设备驱动程序的一般编程模式是什么?
模块编程模式
#include //所有模块都需要的头文件
#include // init&exit相关宏
MODULE_LICENSE(“GPL”);
static int __init hello_init (void)
{
printk(“Hello module init\n”);
return 0;
}
static void __exit hello_exit (void)
{
printk(“Hello module exit\n”);
}
module_init(hello_init);
module_exit(hello_exit);
???19根文件系统可按几种类型分类?
链接库、内核模块、内核映像、设备文件、主要系统应用程序、定制用户应用程序
20.bootloader是什么?试解释它的主要作用?
BootLoader就是在操作系统内核运行之前运行的一段小程序,是与系统硬件环境高度相关的初始化软件。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,它担负着初始化硬件和引导操作系统的双重责任,它负责完成硬件初始化、操作系统引导和系统配制等。Bootloader移植是在特定硬件平台上操作系统移植至关重要的一步。Linux系统是通过Bootloader引导启动的。一上电,就要执行Bootloader来初始化系统。
以应用为中心,以计算机技术为基础的,并且软件硬件是可剪裁的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标的严格要求的专用计算机系统。它可以实现对其他设备的控制、监视或管理等功能。
2.嵌入式系统的特点?
1系统内核小。2专用性强。3系统精简。4高实时性的系统软件(OS)是嵌入式软件的基本要求。而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。 5嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。6嵌入式系统开发需要开发工具和环境7 硬件与软件的互相依赖性强8采用专用的嵌入式微处理器9 多种技术间结合更加紧密10 系统对用户透明11系统资源有限12 应用方面广泛
3.嵌入式系统有哪几个组成部分?
嵌入式系统通常由嵌入式处理机、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件等几大部分组成。一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等),中间层包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。系统软件层由实时多任务操作系统、文件系统、图形用户接口、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。
4.试说明嵌入式操作系统与通用的计算机系统的区别?
1.面向特定应用,一般都有实时要求
2.集先进的计算机技术、半导体工艺、电子技术和通信网络技术于一体的并且在不断创新的知识 集成系统。
3.嵌入式系统是和具体应用对象有机地结合在一起,因而其升级换代也是和具体的产品同步进行的。
4.嵌入式系统的软硬件设计着重于高效率性。在最大限度满足应用需求的前提下,降低成本是必需要考虑的主要问题。
5.嵌入式系统软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。
6.嵌入式系统通常是面向特定应用的嵌入式CPU与通用型的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密。
7.嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。
8.嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发。
5.RTOS实时操作系统中强调的实时是什么概念?
RTOS,实时系统(Real-time operating system),实时系统能够在指定或者确定的时间内完成系统功能和外部或内部、同步或异步时间做出响应的系统。它的正确性不仅依赖系统计算的逻辑结果,还依赖于产生这个结果的时间。因此实时系统应该在事先定义的时间范围内识别和处理离散事件的能力;系统能够处理和储存控制系统所需要的大量数据。根据操作系统的工作特性,实时是指物理进程的真实时间。实时操作系统具有实时性,能从硬件方面支持实时控制系统工作的操作系统。其中实时性是第一要求,需要调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求,实时指的是特定操作所消耗的时间(以及空间)的上限是可预知的。操作系统能够在规定响应时间内完成客户服务程序
???6.Linux指的是什么,有什么区别?
Linux是指由Linux本人维护并不断更新的内核 。一个嵌入式Linux系统指的是一个基于Linux内核的,但不包含有关这个内核的任何专业的库或是用户工具的嵌入式系统。Linux最初是专门为基于Intel处理器的个人计算机而设计的。Linux的前身指的是由Linus Torvald维护开发的开放源代码的类Unix操作系统的内核。目前大多数人用它来表示以Linux内核为基础的整个操作系统。从这种意义讲,Linux指的是源码开放,包含内核和系统工具、完整的开发环境和应用的类Unix操作系统。
7.为什么要采用Linux内核来构建嵌入式操作系统?
内核本身小而且简单,易于理解,易于维护。各种特殊的模块(如文件系统等)、设备驱动乃至中断处理程序,都可以作为独立的进程开发,既简单又容易调试,并且容易在其他环境下模拟。系统的配置也变得更方便灵活。以微内核为基础的系统的扩充就比较灵活、方便,或者说可裁减性较好。程度代码是可以获取的;有完整的源码,软件丰富并且免费;得到众多硬件生产家的广泛支持;包括cpu、计算机外围设备;完善的通信协议、软件标准和文件管理机制;提供完全免费且优秀的开发工具;广泛的社群支持;无需购买licence,是免费的;不依赖特定厂商、供应商;成本相对低廉。
8.简要说明linux内核的基本构成?(结构模块表示)
MMU:内存管理单元,完成地址映射(应用虚拟地址方式)
VFS:虚拟文件管理系统,提供了统一管理计算机资源的途径。使统一规范计算机资源的使用格式成为可能,方便传输
SCHED:进程调用单元。支持多任务运行。利用软件中断的特点,将CPU 的时间线划分给各个任务,完成多任务管理
IPC:进程间通信单元。实现多个不同程序在运行时可以进行数据交换、通信。
NET:网络。网络不做为通用设备,以特定工作单元存在。负责计算机系统与其他计算机相互通信的接口。
???9.试简要叙述嵌入式Linux系统的类型
10.通常可采用哪几种方式来开发嵌入式Linux系统?给出连接示意图。
方式有:
(1)连接型(宿主机/目标板链接开发)
(2)可移动连接型(利用可移动的存储器作为宿主机/目标板之间的中介)
(3)标准化(在开发板上进行独立开发)
11.试简要说明Linux系统在目标板上的启动过程?
用户打开PC的电源,BIOS开机自检,按BIOS中设置的启动设备(通常是硬盘)启动,接着启动设备上安装的引导程序lilo或grub开始引导Linux,Linux首先进行内核的引导,接下来执行init程序,init程序调用了rc.sysinit和rc等程序,rc.sysinit和rc,当完成系统初始化和运行服务的任务后,返回init;init启动了mingetty后,打开了终端供用户登录系统,用户登录成功后进入了Shell,这样就完成了从开机到登录的整个启动过程。
12.试解释建立交叉开发平台的必要性?
嵌入式系统的硬件一般有很大的局限性,或者处理器频率很低,或者存储空间很小,或者没有键盘、鼠标设备,所以一般不可能在这种嵌入式目标硬件平台上直接编译构建Linux系统,因此开发者提出了交叉开发环境模型。它满足兼容性要求;目标系统对其可用的编译工具没有本地设置;主机资源比目标系统快的多,或具有多得多的可用资源也是其建立的原因。
13.GNU提供的开发工具链有哪些工具程序,试举出2、3例
编辑器: vi,emacs
代码打补丁工具: diff & patch:
项目构建工具: make(Makefile),autotool(包括Autoconf, Automake 和 Libtool)
版本控制工具: cvs,subversion,GNU Arch:GNU,git:
C库: glibc,uclibc,newlib,diet libc
二进制和目标文件处理工具: binutils
编译器: gcc
源代码调试器: gdb
内存管理检查器: valgrind
调用跟踪器: strace,ltrace:,truss
性能分析器: gprof,qprof,oprofile
(编译开发工具:即能够把一个源程序编译生成一个可执行程序的软件,如gcc等。
调试工具:即能够对执行程序进行源码或汇编级调试的软件,如gdb等。
软件工程工具:用于协助多人开发或大型软件项目的管理的软件,如make、cvs等。)
14.为什么要配置内核?为何要重新编译内核?
内核,是个操作系统的核心。他负责管理系统的进程、内存、设备驱动程式、文件和网络系统,决定着系统的性能和稳定性,Linux不同发行版、甚至同发行版但不同内核之间的驱动都很难兼容。根据用户需求量体裁衣、使内核更小,而且更稳定、更高效。
Linux。内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身制定一个更高效,更稳定的内核,就需要重新编译内核。通常,更新的内核会支持更多的硬件,具有更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。支持新硬件,解决bug,提升效率,支持新功能,主要面向网络、开发、服务应用的。
15什么是根文件系统?在构建嵌入式Linux系统时,其根文件系统必须包含哪些目录?
Linux引导启动时,默认使用的文件系统是根文件系统,是Linux系统的安装点,它是一种目录结构,包括Linux启动时所必须的目录和关键性的文件。其中一般都包括这样一些子目录: /etc, /dev,/proc,/lib, /usr,/bin,/sbin, /var,/tmp;等。
16VFS指的是什么?它在Linux内核中的主要作用是什么?
Virtual File System虚拟文件系统,也称为虚拟文件系统开关(Virtual Filesystem Switch).,Linux档案系统对外的接口,是物理文件系统与服务之间的接口层,任何要使用档案系统的程序都必须经由这层接口来使用它。
通过VFS,可以为访问文件系统的系统调用提供一个统一的抽象接口。VFS的作用就是采用标准的Linux系统调用读写位于不同物理介质上的不同文件系统。在Linux下,通过VFS,一个抽象的通用访问接口屏蔽了底层文件系统和物理介质的差异性,记录可用的文件系统类型,将设备同对应的文件系统联系起来,处理一些面向文件的通用操作,涉及到针对文件系统的操作时,VFS把它们影射到与控制文件、目录以及inode。使统一规范计算机资源的使用格式成为可能,方便传输。
17.试解释根文件目录中/bin和/sbin及/usr/bin和/usr/sbin的区别?
用户和管理员必备的二进制文件,就会放在/bin。系统管理员必备,但是一般用户根本不会用到的二进制文件,就会放在/sbin。相对而言,不是用户必备的二进制文件,多半会放在/usr/bin;如果不是系统管理员必备的工具,多半会放在/usr/sbin. /bin里面一般是普通可执行程序,而/sbin里多为系统管理程序和服务程序,后者是给超级用户或者系统管理员进行系统维护使用的,普通用户没有使用它们的权限,二者区别关键还是在于他们的权限不同。
???18.Linux内核中的设备驱动程序的一般编程模式是什么?
模块编程模式
#include //所有模块都需要的头文件
#include // init&exit相关宏
MODULE_LICENSE(“GPL”);
static int __init hello_init (void)
{
printk(“Hello module init\n”);
return 0;
}
static void __exit hello_exit (void)
{
printk(“Hello module exit\n”);
}
module_init(hello_init);
module_exit(hello_exit);
???19根文件系统可按几种类型分类?
链接库、内核模块、内核映像、设备文件、主要系统应用程序、定制用户应用程序
20.bootloader是什么?试解释它的主要作用?
BootLoader就是在操作系统内核运行之前运行的一段小程序,是与系统硬件环境高度相关的初始化软件。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,它担负着初始化硬件和引导操作系统的双重责任,它负责完成硬件初始化、操作系统引导和系统配制等。Bootloader移植是在特定硬件平台上操作系统移植至关重要的一步。Linux系统是通过Bootloader引导启动的。一上电,就要执行Bootloader来初始化系统。
Linux常见面试题
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Tags in this post...
Reply on: @reply_date@
@reply_contents@