典型嵌入式linux软件部分由哪些模块组成?他们的功能及相互联系? Bootloader分为哪两阶段?分
二、典型嵌入式linux软件部分由哪些模块组成?他们的功能及相互联系?三、Bootloader分为哪两阶段?分别实现了那些功能?四、简述嵌入式文件系统的种类和管理机制。五...
二、 典型嵌入式linux软件部分由哪些模块组成?他们的功能及相互联系? 三、 Bootloader分为哪两阶段?分别实现了那些功能? 四、 简述嵌入式文件系统的种类和管理机制。 五、 如何理解消费类的电子开发产品的可剪裁性和可移植性,并以linux系统为例说明。 六、 详细描述嵌入式linux软件开发的编译开发环境和编译开发工具。 七、 基于S3C2410的嵌入式linux开发的逻辑空间和物理空间如何对应?详细描述之
展开
5个回答
展开全部
典型的嵌入式系统,软件部分从下到上,分别是boot,kernel,rootfs,fsimg和上层应用。
起到的作用分别是,引导内核,启动内核,挂载根文件系统,挂载实际文件系统,开启上层应用主循环。
你问的这些问题,每一点都可以单独拿出来,长篇大论的讲很久了。建议去网上先看相关的资料。贪多求快是不好的,一个知识点一个知识点的掌握。
起到的作用分别是,引导内核,启动内核,挂载根文件系统,挂载实际文件系统,开启上层应用主循环。
你问的这些问题,每一点都可以单独拿出来,长篇大论的讲很久了。建议去网上先看相关的资料。贪多求快是不好的,一个知识点一个知识点的掌握。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
从软件硬件设计特点简单描述嵌入式产品开发设计流程。
项目论证阶段:项目的可行性分析并形成可行性研究报告。
系统方案阶段:对产品需求加以分析、细化,并抽象出需要完成的功能列表,明确定义所要完成的任务。
系统设计阶段:软件开发部分完成软件需求分析,形成软件总体设计方案,软件开发接口规范等;硬件部分完成硬件总体设计方案,接口定义及说明等。
产品详细设计阶段:完成软/硬件的详细设计,编制代码,形成软件各模块的设计说明;硬件部分各单板的原理图,PCB和料单,同时完成产品的结构设计。
制造联试阶段:完成产品的系统调试和可靠性测试,并形成相应的系统调试报告和可靠性测试报告。
典型嵌入式Linux软件部分由哪些模块组成?它的功能和相互关系是什么?
Bootloader、嵌入式Linux内核、嵌入式文件系统组成。Bootloader完成硬件设备的初始化以及引导内核加载,内核通过文件系统来管理对整个系统中的所有的数据和文件。
BootLoader分为哪两个阶段?分别实现了哪些功能?
stage1和stage2两个阶段。
完成的工作:
硬件设备初始化。
为加载Bootloader的stage2准备RAM空间。
拷贝Bootloader的stage2到RAM空间中。
设置堆栈。
跳转到stage2的C入口点。
stage2完成的工作:
初始化本阶段要使用到的硬件设备。
监测系统内存映射。
将内核映像和根文件系统映像从Flash设备上复制到RAM空间中。
设置内核启动参数。
调用启动内核。
简述嵌入式文件系统的种类和管理机制。
Ext2fs文件系统 2.基于Flash的文件系统 3.基于RAM的文件系统 4.网络文件系统。
Linux引入了虚拟文件系统vfs(virtual file system),为各类文件系统提供一个统一的应用编程接口。
如何理解消费类电子产品开发的可裁剪性和可移植性,并以Linux系统为例进行说明。
Linux来说,假如我们用不到以太网设备,我们可以将该设备的驱动程序以及相关库文件等都去掉以缩小体积。
Linux可以在不同架构的CPU平台上运行。
详细描述嵌入式Linux软件开发的编译开发环境和编译开发工具。
开发环境:首先宿主机上需要安装Linux操作系统。需要为这个Linux系统安装以下三个部分:
函数库(glibc):是Linux下C语言的主要函数库。
编译器(gcc):可以将C,C++,汇编源程序和目标程序编译、链接成可执行文件。
系统头文件(glibc_header):系统相关功能的头文件集合。
编译开发工具:编辑器有Vi和Emacs;编译器为GCC,是GUN推出的功能强大、性能优越的多平台编译器;调试器为GDB,可以方便的设置断点、单步跟踪等调试功能;项目管理器“make”,用来控制编译或者重复编译,自动管理软件编译内容、方式和时机。
基于S3C2410嵌入式Linux的开发的逻辑空间和物理空间如何对应?详细描述之。
在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB的物理内存根据不同需求映射到整个4GB的虚拟存储空间中。
n 物理存储空间布局
Linux的物理存储空间布局与处理器相关,详细情况可以从处理器用户手册的存储空间分布表(memory map)相关章节中查到,我们这里只列出嵌入式处理器平台Linux物理内存空间的一般布局,如图18-4所示。
图18-4 Linux物理内存空间一般布局示意图
说明:
1)最大node号n不能大于MAX_NUMNODES-1。
2)MAX_NUMNODES表示系统支持的最多node数。在ARM系统中,Sharp芯片最多支持16个nodes,其他芯片最多支持4个nodes。
3)numnodes是当前系统中实际的内存node数。
4)在不支持CONFIG_DISCONTIGMEM选项的系统中,只有一个内存node。
5)最大bank号m不能大于NR_BANKS-1。
6)NR_BANKS表示系统中支持的最大内存bank数,一般等于处理器的RAM片选数。在ARM系统中,Sharp芯片最多支持16个banks,其他芯片最多支持8个banks。
7)mem_init()函数会将所有节点的页帧位码表所占空间、孔洞页描述符空间及空闲内存页都释放掉。
n虚拟存储空间布局
在支持MMU的系统中,当系统做完硬件初始化后就使能MMU功能,这样整个系统就运行在虚拟存储空间中,实现虚拟存储空间到物理存储空间映射功能的是处理器的MMU,而虚拟存储空间与5路存储空间的映射关系则是由Linux内核来管理的。32位系统中物理存储空间占4GB空间,虚拟存储空间同样占4GB空间,Linux把物理空间中实际存在的远远小于4GB的内存空间映射到整个4GB虚拟存储空间中除映射I/O空间之外的全部空间,所以虚拟内存空间远远大于物理内存空间,这就说同一块物理内存可能映射到多处虚拟内存地址空间上,这正是Linux内存管理职责所在。图18-5列出了Linux内核中虚拟内存空间的一般布局(其实I/O空间也在其中,通常占用高端内存空间,在此未标出)。
图18-5 Linux系统虚拟内存空间一般布局示意图
说明:
1)线性地址空间:是指Linux系统中从0x00000000到0xFFFFFFFF整个4GB虚拟存储空间。
2)内核空间:内核空间表示运行在处理器最高级别的超级用户模式(supervisor mode)下的代码或数据,内核空间占用从0xC0000000到0xFFFFFFFF的1GB线性地址空间,内核线性地址空间由所有进程共享,但只有运行在内核态的进程才能访问,用户进程可以通过系统调用切换到内核态访问内核空间,进程运行在内核态时所产生的地址都属于内核空间。
3)用户空间:用户空间占用从0x00000000到0xBFFFFFFF共3GB的线性地址空间,每个进程都有一个独立的3GB用户空间,所以用户空间由每个进程独有,但是内核线程没有用户空间,因为它不产生用户空间地址。另外子进程共享(继承)父进程的用户空间只是使用与父进程相同的用户线性地址到物理内存地址的映射关系,而不是共享父进程用户空间。运行在用户态和内核态的进程都可以访问用户空间。
4)内核逻辑地址空间:是指从PAGE_OFFSET(3G)到high_memory(物理内存的大小,最大896)之间的线性地址空间,是系统物理内存映射区,它映射了全部或部分(如果系统包含高端内存)物理内存。内核逻辑地址空间与图18-4中的系统RAM内存物理地址空间是一一对应的(包括内存孔洞也是一一对应的),内核逻辑地址空间中的地址与RAM内存物理地址空间中对应的地址只差一个固定偏移量(3G),如果RAM内存物理地址空间从0x00000000地址编址,那么这个偏移量就是PAGE_OFFSET。
5)低端内存:内核逻辑地址空间所映射物理内存就是低端内存(实际物理内存的大小,但是小于896),低端内存在Linux线性地址空间中始终有永久的一一对应的内核逻辑地址,系统初始化过程中将低端内存永久映射到了内核逻辑地址空间,为低端内存建立了虚拟映射页表。低端内存内物理内存的物理地址与线性地址之间的转换可以通过__pa(x)和__va(x)两个宏来进行,#define __pa(x) ((unsignedlong)(x)-PAGE_OFFSET) __pa(x)将内核逻辑地址空间的地址x转换成对应的物理地址,相当于__virt_to_phys((unsigned long)(x)),__va(x)则相反,把低端物理内存空间的地址转换成对应的内核逻辑地址,相当于((void *)__phys_to_virt((unsigned long)(x)))。
6)高端内存:低端内存地址之上的物理内存是高端内存(物理内存896之上),高端内存在Linux线性地址空间中没有没有固定的一一对应的内核逻辑地址,系统初始化过程中不会为这些内存建立映射页表将其固定映射到Linux线性地址空间,而是需要使用高端内存的时候才为分配的高端物理内存建立映射页表,使其能够被内核使用,否则不能被使用。高端内存的物理地址于现行地址之间的转换不能使用上面的__pa(x)和__va(x)宏。
7)高端内存概念的由来:如上所述,Linux将4GB的线性地址空间划分成两部分,从0x00000000到0xBFFFFFFF共3GB空间作为用户空间由用户进程独占,这部分线性地址空间并没有固定映射到物理内存空间上;从0xC0000000到0xFFFFFFFF的第4GB线性地址空间作为内核空间,在嵌入式系统中,这部分线性地址空间除了映射物理内存空间之外还要映射处理器内部外设寄存器空间等I/O空间。0xC0000000~high_memory之间的内核逻辑地址空间专用来固定映射系统中的物理内存,也就是说0xC0000000~high_memory之间空间大小与系统的物理内存空间大小是相同的(当然在配置了CONFIG_DISCONTIGMEMD选项的非连续内存系统中,内核逻辑地址空间和物理内存空间一样可能存在内存孔洞),如果系统中的物理内存容量远小于1GB,那么内核现行地址空间中内核逻辑地址空间之上的high_memory~0xFFFFFFFF之间还有足够的空间来固定映射一些I/O空间。可是,如果系统中的物理内存容量(包括内存孔洞)大于1GB,那么就没有足够的内核线性地址空间来固定映射系统全部物理内存以及一些I/O空间了,为了解决这个问题,在x86处理器平台设置了一个经验值:896MB,就是说,如果系统中的物理内存(包括内存孔洞)大于896MB,那么将前896MB物理内存固定映射到内核逻辑地址空间0xC0000000~0xC0000000+896MB(=high_memory)上,而896MB之后的物理内存则不建立到内核线性地址空间的固定映射,这部分内存就叫高端物理内存。此时内核线性地址空间high_memory~0xFFFFFFFF之间的128MB空间就称为高端内存线性地址空间,用来映射高端物理内存和I/O空间。896MB是x86处理器平台的经验值,留了128MB线性地址空间来映射高端内存以及I/O地址空间,我们在嵌入式系统中可以根据具体情况修改这个阈值,比如,MIPS中将这个值设置为0x20000000B(512MB),那么只有当系统中的物理内存空间容量大于0x20000000B时,内核才需要配置CONFIG_HIGHMEM选项,使能内核对高端内存的分配和映射功能。什么情况需要划分出高端物理内存以及高端物理内存阈值的设置原则见上面的内存页区(zone)概念说明。
8)高端线性地址空间:从high_memory到0xFFFFFFFF之间的线性地址空间属于高端线性地址空间,其中VMALLOC_START~VMALLOC_END之间线性地址被vmalloc()函数用来分配物理上不连续但线性地址空间连续的高端物理内存,或者被vmap()函数用来映射高端或低端物理内存,或者由ioremap()函数来重新映射I/O物理空间。PKMAP_BASE开始的LAST_PKMAP(一般等于1024)页线性地址空间被kmap()函数用来永久映射高端物理内存。FIXADDR_START开始的KM_TYPE_NR*NR_CPUS页线性地址空间被kmap_atomic()函数用来临时映射高端物理内存,其他未用高端线性地址空间可以用来在系统初始化期间永久映射I/O地址空间。
http://blog.21ic.com/user1/8499/archives/2012/90535.html
项目论证阶段:项目的可行性分析并形成可行性研究报告。
系统方案阶段:对产品需求加以分析、细化,并抽象出需要完成的功能列表,明确定义所要完成的任务。
系统设计阶段:软件开发部分完成软件需求分析,形成软件总体设计方案,软件开发接口规范等;硬件部分完成硬件总体设计方案,接口定义及说明等。
产品详细设计阶段:完成软/硬件的详细设计,编制代码,形成软件各模块的设计说明;硬件部分各单板的原理图,PCB和料单,同时完成产品的结构设计。
制造联试阶段:完成产品的系统调试和可靠性测试,并形成相应的系统调试报告和可靠性测试报告。
典型嵌入式Linux软件部分由哪些模块组成?它的功能和相互关系是什么?
Bootloader、嵌入式Linux内核、嵌入式文件系统组成。Bootloader完成硬件设备的初始化以及引导内核加载,内核通过文件系统来管理对整个系统中的所有的数据和文件。
BootLoader分为哪两个阶段?分别实现了哪些功能?
stage1和stage2两个阶段。
完成的工作:
硬件设备初始化。
为加载Bootloader的stage2准备RAM空间。
拷贝Bootloader的stage2到RAM空间中。
设置堆栈。
跳转到stage2的C入口点。
stage2完成的工作:
初始化本阶段要使用到的硬件设备。
监测系统内存映射。
将内核映像和根文件系统映像从Flash设备上复制到RAM空间中。
设置内核启动参数。
调用启动内核。
简述嵌入式文件系统的种类和管理机制。
Ext2fs文件系统 2.基于Flash的文件系统 3.基于RAM的文件系统 4.网络文件系统。
Linux引入了虚拟文件系统vfs(virtual file system),为各类文件系统提供一个统一的应用编程接口。
如何理解消费类电子产品开发的可裁剪性和可移植性,并以Linux系统为例进行说明。
Linux来说,假如我们用不到以太网设备,我们可以将该设备的驱动程序以及相关库文件等都去掉以缩小体积。
Linux可以在不同架构的CPU平台上运行。
详细描述嵌入式Linux软件开发的编译开发环境和编译开发工具。
开发环境:首先宿主机上需要安装Linux操作系统。需要为这个Linux系统安装以下三个部分:
函数库(glibc):是Linux下C语言的主要函数库。
编译器(gcc):可以将C,C++,汇编源程序和目标程序编译、链接成可执行文件。
系统头文件(glibc_header):系统相关功能的头文件集合。
编译开发工具:编辑器有Vi和Emacs;编译器为GCC,是GUN推出的功能强大、性能优越的多平台编译器;调试器为GDB,可以方便的设置断点、单步跟踪等调试功能;项目管理器“make”,用来控制编译或者重复编译,自动管理软件编译内容、方式和时机。
基于S3C2410嵌入式Linux的开发的逻辑空间和物理空间如何对应?详细描述之。
在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同。Linux运行在虚拟存储空间,并负责把系统中实际存在的远小于4GB的物理内存根据不同需求映射到整个4GB的虚拟存储空间中。
n 物理存储空间布局
Linux的物理存储空间布局与处理器相关,详细情况可以从处理器用户手册的存储空间分布表(memory map)相关章节中查到,我们这里只列出嵌入式处理器平台Linux物理内存空间的一般布局,如图18-4所示。
图18-4 Linux物理内存空间一般布局示意图
说明:
1)最大node号n不能大于MAX_NUMNODES-1。
2)MAX_NUMNODES表示系统支持的最多node数。在ARM系统中,Sharp芯片最多支持16个nodes,其他芯片最多支持4个nodes。
3)numnodes是当前系统中实际的内存node数。
4)在不支持CONFIG_DISCONTIGMEM选项的系统中,只有一个内存node。
5)最大bank号m不能大于NR_BANKS-1。
6)NR_BANKS表示系统中支持的最大内存bank数,一般等于处理器的RAM片选数。在ARM系统中,Sharp芯片最多支持16个banks,其他芯片最多支持8个banks。
7)mem_init()函数会将所有节点的页帧位码表所占空间、孔洞页描述符空间及空闲内存页都释放掉。
n虚拟存储空间布局
在支持MMU的系统中,当系统做完硬件初始化后就使能MMU功能,这样整个系统就运行在虚拟存储空间中,实现虚拟存储空间到物理存储空间映射功能的是处理器的MMU,而虚拟存储空间与5路存储空间的映射关系则是由Linux内核来管理的。32位系统中物理存储空间占4GB空间,虚拟存储空间同样占4GB空间,Linux把物理空间中实际存在的远远小于4GB的内存空间映射到整个4GB虚拟存储空间中除映射I/O空间之外的全部空间,所以虚拟内存空间远远大于物理内存空间,这就说同一块物理内存可能映射到多处虚拟内存地址空间上,这正是Linux内存管理职责所在。图18-5列出了Linux内核中虚拟内存空间的一般布局(其实I/O空间也在其中,通常占用高端内存空间,在此未标出)。
图18-5 Linux系统虚拟内存空间一般布局示意图
说明:
1)线性地址空间:是指Linux系统中从0x00000000到0xFFFFFFFF整个4GB虚拟存储空间。
2)内核空间:内核空间表示运行在处理器最高级别的超级用户模式(supervisor mode)下的代码或数据,内核空间占用从0xC0000000到0xFFFFFFFF的1GB线性地址空间,内核线性地址空间由所有进程共享,但只有运行在内核态的进程才能访问,用户进程可以通过系统调用切换到内核态访问内核空间,进程运行在内核态时所产生的地址都属于内核空间。
3)用户空间:用户空间占用从0x00000000到0xBFFFFFFF共3GB的线性地址空间,每个进程都有一个独立的3GB用户空间,所以用户空间由每个进程独有,但是内核线程没有用户空间,因为它不产生用户空间地址。另外子进程共享(继承)父进程的用户空间只是使用与父进程相同的用户线性地址到物理内存地址的映射关系,而不是共享父进程用户空间。运行在用户态和内核态的进程都可以访问用户空间。
4)内核逻辑地址空间:是指从PAGE_OFFSET(3G)到high_memory(物理内存的大小,最大896)之间的线性地址空间,是系统物理内存映射区,它映射了全部或部分(如果系统包含高端内存)物理内存。内核逻辑地址空间与图18-4中的系统RAM内存物理地址空间是一一对应的(包括内存孔洞也是一一对应的),内核逻辑地址空间中的地址与RAM内存物理地址空间中对应的地址只差一个固定偏移量(3G),如果RAM内存物理地址空间从0x00000000地址编址,那么这个偏移量就是PAGE_OFFSET。
5)低端内存:内核逻辑地址空间所映射物理内存就是低端内存(实际物理内存的大小,但是小于896),低端内存在Linux线性地址空间中始终有永久的一一对应的内核逻辑地址,系统初始化过程中将低端内存永久映射到了内核逻辑地址空间,为低端内存建立了虚拟映射页表。低端内存内物理内存的物理地址与线性地址之间的转换可以通过__pa(x)和__va(x)两个宏来进行,#define __pa(x) ((unsignedlong)(x)-PAGE_OFFSET) __pa(x)将内核逻辑地址空间的地址x转换成对应的物理地址,相当于__virt_to_phys((unsigned long)(x)),__va(x)则相反,把低端物理内存空间的地址转换成对应的内核逻辑地址,相当于((void *)__phys_to_virt((unsigned long)(x)))。
6)高端内存:低端内存地址之上的物理内存是高端内存(物理内存896之上),高端内存在Linux线性地址空间中没有没有固定的一一对应的内核逻辑地址,系统初始化过程中不会为这些内存建立映射页表将其固定映射到Linux线性地址空间,而是需要使用高端内存的时候才为分配的高端物理内存建立映射页表,使其能够被内核使用,否则不能被使用。高端内存的物理地址于现行地址之间的转换不能使用上面的__pa(x)和__va(x)宏。
7)高端内存概念的由来:如上所述,Linux将4GB的线性地址空间划分成两部分,从0x00000000到0xBFFFFFFF共3GB空间作为用户空间由用户进程独占,这部分线性地址空间并没有固定映射到物理内存空间上;从0xC0000000到0xFFFFFFFF的第4GB线性地址空间作为内核空间,在嵌入式系统中,这部分线性地址空间除了映射物理内存空间之外还要映射处理器内部外设寄存器空间等I/O空间。0xC0000000~high_memory之间的内核逻辑地址空间专用来固定映射系统中的物理内存,也就是说0xC0000000~high_memory之间空间大小与系统的物理内存空间大小是相同的(当然在配置了CONFIG_DISCONTIGMEMD选项的非连续内存系统中,内核逻辑地址空间和物理内存空间一样可能存在内存孔洞),如果系统中的物理内存容量远小于1GB,那么内核现行地址空间中内核逻辑地址空间之上的high_memory~0xFFFFFFFF之间还有足够的空间来固定映射一些I/O空间。可是,如果系统中的物理内存容量(包括内存孔洞)大于1GB,那么就没有足够的内核线性地址空间来固定映射系统全部物理内存以及一些I/O空间了,为了解决这个问题,在x86处理器平台设置了一个经验值:896MB,就是说,如果系统中的物理内存(包括内存孔洞)大于896MB,那么将前896MB物理内存固定映射到内核逻辑地址空间0xC0000000~0xC0000000+896MB(=high_memory)上,而896MB之后的物理内存则不建立到内核线性地址空间的固定映射,这部分内存就叫高端物理内存。此时内核线性地址空间high_memory~0xFFFFFFFF之间的128MB空间就称为高端内存线性地址空间,用来映射高端物理内存和I/O空间。896MB是x86处理器平台的经验值,留了128MB线性地址空间来映射高端内存以及I/O地址空间,我们在嵌入式系统中可以根据具体情况修改这个阈值,比如,MIPS中将这个值设置为0x20000000B(512MB),那么只有当系统中的物理内存空间容量大于0x20000000B时,内核才需要配置CONFIG_HIGHMEM选项,使能内核对高端内存的分配和映射功能。什么情况需要划分出高端物理内存以及高端物理内存阈值的设置原则见上面的内存页区(zone)概念说明。
8)高端线性地址空间:从high_memory到0xFFFFFFFF之间的线性地址空间属于高端线性地址空间,其中VMALLOC_START~VMALLOC_END之间线性地址被vmalloc()函数用来分配物理上不连续但线性地址空间连续的高端物理内存,或者被vmap()函数用来映射高端或低端物理内存,或者由ioremap()函数来重新映射I/O物理空间。PKMAP_BASE开始的LAST_PKMAP(一般等于1024)页线性地址空间被kmap()函数用来永久映射高端物理内存。FIXADDR_START开始的KM_TYPE_NR*NR_CPUS页线性地址空间被kmap_atomic()函数用来临时映射高端物理内存,其他未用高端线性地址空间可以用来在系统初始化期间永久映射I/O地址空间。
http://blog.21ic.com/user1/8499/archives/2012/90535.html
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-12-23
展开全部
闷农雪
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-12-23
展开全部
捉腾歪
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-12-23
展开全部
菠脱失
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询