嵌入式工具复习汇总(1)

2019-07-13 05:48发布

2、 嵌入式Linux和通用Linux有哪些区别,Linux中哪些因素/特性会对嵌入式软件开发影响较大。 嵌入式Linux内核 - 为特殊的硬件配置、或为了支持特别的应用而经过特别的裁剪的修改过的Linux内核。嵌入式Linux系统就是利用Linux自身的许多特点,把它应用到嵌入式系统里,利用Linux开放源代码、Linux的内核小、效率高,内核的更新速度很快、Linux是免费的OS,在价格上极具竞争力以及Linux适应于多种CPU和多种硬件平台,是一个跨平台的系统。到目前为止,它可以支持二三十种CPU。而且性能稳定,裁剪性很好,开发和使用都很容易的特点。
4、软硬件方式交叉调试各有何特点,分别举例说明。 软件方式交叉调试的特点: 适用于应用程序开发,是应用程序开发的常用工具。 不适合内核代码及启动代码调试,因为软件调试只能在目标机系统初始化完毕、调试通信端口初始化完成后才起作用! 调试环境不同于实际目标环境,如操作系统需要一定的修改,从而派生了产品调试版。 硬件方式交叉调试的特点: 硬件方式交叉调试和软件方式交叉调试相比调试能力更加强大,调试性能更优!但通常,成本也会更高! 通过仿真硬件的执行过程来完成。 5、为什么需要使用Makefile?解释Makefile的工作原理和工作流程。Autotool基本功能 为什么需要使用makefile:可以根据时间戳自动发现更新过的文件  自动编译管理器,大大提高工作效率 Makefile的工作原理:检查规则中依赖条件是否存在。检查规则中的目标是否更新。 Autotool基本功能:自动生成Makefile,为程序开发管理提供了更方便、更高效的工具,同时提供了更多的功能 6、gdb调试器有哪些常用功能?列举至少5个。 设置断点   监视、修改变量   单步执行   显示寄存器的值   修改寄存器的值 堆栈查看  远程调试
8、描述建立gcc交叉编译环境的基本步骤。 一、准备工作:安装Linux操作系统,下载交叉编译文件包。 二、建立交叉编译环境目录。 三、安装交叉编译环境。 四、配置环境变量。   3、描述嵌入式系统初始化的基本流程。 硬件初始化 实时系统初始化应用初始化   4、Bootloader的功能和启动过程。 系统加电后,先执行 第一段汇编代码,进行相应的内部硬件初始化(寄存器、内存等),将第二阶段C代码复制到RAM地址bloc-abs-base,然后跳转到第二阶段开始执行; 第二阶段中,从汇编代码跳转到C的main()函数,继续如下工作:外围硬件初始化(串口,usb等);将flash中的kernel加载到SDRAM的kernel区域; 将Flash中的ramdisk加载到SDRAM的ramdisk区域; 根据用户的选择,进入命令模块或启动kernel。 5、Explain  image executes  scenarios: ROM+RAMROM=>RAM Host  =>RAM.Loader加载可执行程序的3种方式) 6、Linux  Virtual File  System的功能及结构。 (1)、提供对不同文件系统的封装,提供统一的文件操作界面。 (2)、当系统需要挂载多种文件系统时,方便编程。 (3)、虚拟文件系统本身不含有文件,也不直接管理文件,不需要保存在永久介 质中! (4)、VFS是系统启动时由内核在内存中创建的。 VFS 结构:依靠4 个主要的数据结构和一些辅助的数据结构来描述其结构信息,这些数据结构表现得就像是对象;每个主要对象中都包含由操作函数表构成的操作对象,这些操作对象描述了内核针对这几个主要的对象可以进行的操作。 超级块对象:存储一个已安装的文件系统的控制信息,代表一个已安装的文件系统; 索引节点对象:存储了文件的相关信息,代表了存储设备上的一个实际的物理文件。 目录项对象:的概念主要是出于方便查找文件的目的。 文件对象:是已打开的文件在内存中的表示,主要用于建立进程和磁盘上的文件的 对应关系。 7、什么是Linux根文件系统,一般都包含哪些内容。 Linux 启动时第一个必须挂载的就是根文件系统,一般包含的内容有:程序库,内核模块,内核影像,设备文件,主要系统应用程序,定制应用程序,系统初始化。 8、在目标板创建文件系统的基本步骤。  9、文件系统都有哪些特性,如何根据这些特性选择文件系统。  10、描述EXT2文件系统的特点。 11、描述Cramfs文件系统的特点。 12、描述JFFS2文件系统的特点。 13、描述YAFFS2文件系统的特点。  14、Ext2文件系统的物理结构(Physical Structure) 15、什么是NFS-MountedFile System,有何用途。 16、什么是Port-mapped  I/OMemorymapped  I/O,各有什么特点。 Memory-mapped I/O  I/O设备的寄存器和内存被映射到CPU的内存地址空间 CPU访问I/O设备的方式和操作普通内存的方式是一样的。这样简化了I/O操作。  I/O设备和普通内存共享相同的总线信号(地址、数据、控制)  因为I/O操作要比内存操作慢,所以这种方式,会降低总线的速率,造成内存操作的性能下降  由与此类型的CPU架构采用了单独的地址空间,所以CPU的逻辑、设计都变的简单了,CPU的运行速度变快了,RISC计算机就是采取这种设计方式。 port I/O 有单独的指令来进行I/O访问,在intel架构中,通过in/out指令完成 有单独的I/O地址空间, 有单独的I/O总线    17、Linux有哪些文件类型?如何找到并区分这些不通的文件类型? 18、解释Linux里的用户空间和核心空间 在操作系统中,虚拟内存通常会被分成用户空间(英语:User space,又译为使用者空间),与核心空间(英语:Kernel space,又译为内核空间)这两个区段。 这是存储器保护机制中的一环。内核、核心扩充(kernel extensions)、以及驱动程序,运行在核心空间上。而其他的应用程序,则运行在用户空间上。所有运行在用户空间的应用程序,都被统称为用户级(userland)。 19、解释mmap(内存映射)的功能。  内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,相反,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间<---->用户空间两者之间需要大量数据传输等操作的话效率是非常高的。   1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;  2、将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;  3、为无关联的进程提供共享内存空间,一般也是将一个普通文件映射到内存中   20、What  is  Flat  Memory Management(MM)  in embedded  Linux.虚拟内存管理的区别; 21、什么是基于文件描述符(File  Descriptor)的文件操作,有何特点。 22、什么是基于文件指针(File  Pointer)的文件操作,有何特点。 23、I/O 系统的组成以及I/OSubsystem(I/O子系统)的作用与常用功能。 24、设备驱动的主要功能。 设备初始化 设备启动/停止 设备控制与管理,如 内核与设备间的数据传送(读写操作) 应用程序与设备间的数据传送(读写操作) 25、Linux设备驱动的主要特点。 设备驱动以设备文件的形式进行管理。 驱动程序运行在内核态,其代码(模块)一旦加载到内核,便成为内核的一部分,可以使用内核服务,如内存分配、中断服务等。 设备驱动可以在配置和编译内核时直接集成到内核中。所以有内核加载和模块加载之分。 对于模块加载方式,设备驱动长时间不用时可以卸载。 由于设备驱动是内核的一部分,要求代码具有和其它内核代码一样或更优的质量。 26、描述Linuxfile_operations的结构和常用选项,设备接口定义的目的。 27、描述Block  Devices, Character Devices, Network Devices的特点和用途。 28、描述Linux环境编写驱动的基本过程。  29、Linux内核调试技术有哪些。  30、什么是Lightweight  processes,主要用途。 轻量级进程(LWP)是建立在内核之上并由内核支持的用户线程 轻量级进程作用:继承内核的资源,连接用户线程。 31、什么是Copy  On Write技术,主要用途。 vfork()创建的进程各有何特点并描述创建子进程后的内存映像。    Fork():单调用,双返回函数 1、在一个父进程基础上创建一个子进程或新进程。 通过拷贝当前进程创建一个子进程。 2、根据fork()的返回值确定执行父进程还是子进程代码! 理解:子进程是父进程的一个拷贝。具体说,子进程从父进程那得到了数据段和堆栈段,但不是与父进程共享而是单独分配内存。fork函数返回后,子进程和父进程都是从fork函数的下一条语句开始执行。
由于子进程与父进程的运行是无关的,父进程可先于子进程运行,子进程也可先于父进程运行。   Vfork(): 1、 在一个父进程基础上创建一个子进程,但并不把父进程的映像全部复制到子进程中,而只是用复制指针的方法使它们实现资源共享。 2、为避免发生父子进程间数据操作冲突,vfork()保证子进程先于父进程被运行,在子进程调用execve()或exit()后,父进程才有机会被调度运行! 3、用vfork()创建的子进程虽然在名称上仍叫做进程,但实质上它是一个线程 理解:vfork创建新进程的主要目的在于用exec函数执行另外的程序,实际上,在没调用exec或exit之前子进程的运行中是与父进程共享数据段的。在vfork调用中,子进程先运行,父进程挂起,直到子进程调用exec或exit,在这以后,父子进程的执行顺序不再有限制。   两者区别:
 1、fork()用于创建一个新进程。由fork()创建的子进程是父进程的副本。即子进程获取父进程数据空间,堆和栈的副本。父子进程之间不共享这些存储空间的部分。而vfork()创建的进程并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec (或exit)于是也就不会存放该地址空间。相反,在子进程调用exec或exit之前,它在父进程的空间进行。
 2、vfork保证子进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec或exit之后父进程才可能被调度运行。  3、vfork保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。