您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > linux系统移植答案
1嵌入式Linux系统移植试题(时间:1个半小时)一、选择题(每题2分,共50分,包括单选和多选,多选、少选均不得分)1.嵌入式linux系统一般由哪几部分组成(ABCD)[A]bootloader[B]linux内核[C]根文件系统[D]用户应用程序2.一般情况下,在搭建嵌入式linux开发环境的主要工作中,配置主机必须的软件有(A)[A]终端软件[B]tftp服务器[C]nfs服务器[D]usb3.下列选项中符合gcc的编译流程的是(A)[A]预处理-编译-汇编-连接[B]预处理-汇编-编译-连接[C]编译-预处理-汇编-连接[D预处理-连接-汇编-编译4.gcc使用下列哪个选项可以查看编译的详细过程(B)[A]-o[B]-v[C]-E[D]-g5.下列二进制工具哪个是丢弃目标文件的全部或者特定符号,减少文件体积的(D)[A]size[B]as[C]nm[D]strip6.下列二进制工具哪个是用来反汇编的(B)[A]nm[B]objdump[C]objcopy[D]string7.下列二进制工具哪个是用来进行目标格式转换的(C)[A]nm[B]objdump[C]objcopy[D]string8.下列二进制工具哪个是用来把程序地址转换为文件名和行号的(D)[A]nm[B]objdump[C]objcopy[D]addr2line9.下列二进制工具哪个是用来将目标文件生成静态库的(A)[A]ar[B]nm[C]objcopy[D]objdump10.FS2410开发板如果从nandflash启动,启动后(B)访问到norflash;如果从norflash启动,启动后(A)访问nandflash。[A]可以[B]不可以11.SMDK2410开发平台上,linux要求bootloader将内核参数存储在什么位置(B)[A]0x30008000[B]0x30000100[C]0x30004000[D]0x33f8000012.SMDK2410开发平台上,linux要求bootloader将平台号保存在(B)[A]r0[B]r1[C]r2[D]r313.SMDK2410开发平台上,linux要求bootloader在运行内核前,让系统进入何种模式(B)[A]user[B]svc[C]system14.u-boot所支持的命令中,哪个是来设置环境变量的(A)[A]setenv[B]mm[C]mtest[D]bootm15.u-boot支持的命令中,哪个是擦除norflash的命令(C)[A]nanderase[B]protect[C]erase[D]cp16.在内核配置时,哪个关键词是来包含下一级Kconfig(C)[A]menuendmenu[B]source[C]choiceendchoice[D]dependson17.内核启动过程中,如果终端出现”Error:a”错误,可能出现的原因是(B)2[A]内核不支持当前处理器[B]内核不支持当前开发平台[C]内核获取不到bootloader传递来的参数[D]内核初始化终端出现错误18.内核启动过程中,如果终端出现”Error:p”错误,可能出现的原因是(A)[A]内核不支持当前处理器[B]内核不支持当前开发平台[C]内核获取不到bootloader传递来的参数[D]内核初始化终端出现错误19.下列函数适合在内核解压后,console初始化以前使用的是(B)[A]puts[B]printascii[C]printk[D]printf20.当console初始化以后,一般最为简单的内核调试为(A)[A]printk[B]puts[C]bdi2000[D]kgdb21.下列哪些文件系统可以运行在nandflash上,并具有可读写特性(AB)(多选)[A]yaffs2[B]jffs2[C]cramfs[D]tmpfs[E]ramfs22.下列哪些文件系统可以运行在nandflash上,并具只读特性(C)[A]yaffs2[B]jffs2[C]cramfs[D]tmpfs[E]ramfs23.下列哪些文件系统不占用任何磁盘空间的文件系统是(DE)(多选)[A]yaffs2[B]jffs2[C]cramfs[D]tmpfs[E]ramfs24.在命令mknod/dev/ttyS0c464中,‘c’代表(A)[A]字符设备[B]块设备[C]网络设备25.在用busybox制作根文件系统时,对inittab文件的action,如果要求在程序执行前按enter键进入终端,符合的是(A)[A]askfirst[B]respawn[C]sysinit[D]wait二、简答题(前6题每题6分,后两题每题7分,共50分)1.简述搭建嵌入式linux开发环境所涉及的工作内容有哪些?1制作交叉编译工具链2配置超级终端3烧写bootloader到flash4下载内核映像到开发板(通过tftp)5制作文件系统2.什么是bootloader,linuxbootloader的作用是什么,列举几种嵌入式系统中常用的bootloader?1.BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。3嵌入式Linux系统中常用的bootloader有armboot、redboot、blob、u-boot等3.简述u-boot启动流程?大多数bootloader都分为stage1和stage2两大部分,uboot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1并且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。2.1stage1(start.s代码结构)uboot的stage1代码通常放在start.s文件中,它用汇编语言写成,其主要代码部分如下:(1)定义入口。由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。(2)设置异常向量(ExceptionVector)。(3)设置CPU的速度、时钟频率及中断控制寄存器。(4)初始化内存控制器。(5)将ROM中的程序复制到RAM中。(6)初始化堆栈。(7)转到RAM中执行,该工作可使用指令ldrpc来完成。2.2stage2C语言代码部分libarm/board.c中的startarmboot是C语言开始的函数,也是整个启动代码中C语言的主函数,同时还是整个uboot(armboot)的主函数,该函数主要完成如下操作:(1)调用一系列的初始化函数。(2)初始化Flash设备。(3)初始化系统内存分配函数。(4)如果目标系统拥有NAND设备,则初始化NAND设备。(5)如果目标系统有显示设备,则初始化该类设备。(6)初始化相关网络设备,填写IP、MAC地址等。(7)进入命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。4.简述在fs2410上移植linux-2.6.26内核的一般步骤和注意的事项?1.准备开发板和相关配件要清楚自己的开发板的配置(有那些外围设备等)2.下载内核源码、取得相关工具软件Kernel,gcc,jtag3.选定参考板选择一个内核中已经支持,且和自己的开发部相似的参考板为原型,进修修改4.修改开发板相关代码完成BSP的修改移植4如:arch/arm/mach-s3c2410/目录5.添加驱动先添加基本驱动代码(如:网卡)6.编译、调试、下载内核内核的配置注意事项arch/arm/mm/Kconfig:#ARM920TconfigCPU_ARM920TboolSupportARM920Tprocessor“arch/arm/mm/Makefileobj-$(CONFIG_CPU_ARM920T)+=proc-arm920.omakemenuconfigSystemType---[*]SupportARM920Tprocessor5.分析一下代码段。intdisable_interrupts(void){unsignedlongold,temp;__asm____volatile__(mrs%0,cpsr\norr%1,%0,#0xc0\nmsrcpsr_c,%1:=r(old),=r(temp)::memory);return(old&0x80)==0;}Old和temp作为输出变量,用寄存器方式而不是内存方式访问它们。old作为%0,temp作为%1,memory表示告诉编译器内存被修改过了,这段汇编将cpsr或上0xc0,检查以前的cpsr值,检查第7位,返回的是将第7位取反的结果。6.分析一下连接脚本内容,并大致画出内存分布图:OUTPUT_FORMAT(elf32-littlearm,elf32-littlearm,elf32-littlearm)/*OUTPUT_FORMAT(elf32-arm,elf32-arm,elf32-arm)*/OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS5{.=0x00000000;.=ALIGN(4);.text:{cpu/arm920t/start.o(.text)*(.text)}.=ALIGN(4);.rodata:{*(.rodata)}.=ALIGN(4);.data:{*(.data)}.=ALIGN(4);__u_boot_cmd_start=.;.u_boot_cmd:{*(.u_boot_cmd)}__u_boot_cmd_end=.;.=ALIGN(4);__bss_start=.;.bss:{*(.bss)}_end=.;}OUTPUT_FORMAT(elf32littlearm,elf32littlearm,elf32littlearm);指定输出可执行文件是elf格式,32位ARM指令,小端OUTPUT_ARCH(arm);指定输出可执行文件的平台为ARMENTRY(_start);指定输出可执行文件的起始代码段为_start.SECTIONS{.=0x00000000;从0x0位置开始.=ALIGN(4);代码以4字节对齐.text:;指定代码段{cpu/arm920t/start.o(.text);代码的第一个代码部分*(.text);其它代码部分}.=ALIGN(4).rodata:{*(.rodata)};指定只读数据段6.=ALIGN(4);.data:{*(.data)};指定读/写数据段.=ALIGN(4);.got:{*(.got)};指定got段,got段式是uboot自定义的一个段,非标准段__u_boot_cmd_start=.;把__u_boot_cmd_start赋值为当前位置,即起始位置.u_boot_cmd:{*(.u_boot_cmd)};指定u_boot_cmd段,uboot把所有的uboot命令放在该段.__u_boot_cmd_end=.;把__u_boot_cmd_end赋值为当前位置,即结束位置.=ALIGN(4);__bss_start=.;把__bss_start赋值为当前位置,即bss段的开始位置.bss:{*(.bss)};指定bss段_end=.;把_end赋值为当前位置,即bss段的结束位置}7.简述通过busybox制作根文件系统的步骤?1.下载busybox源码包2.解压源码包3.进入busybox的文件夹,使用makemenuconfig进入设置,配置需要的功能。4.安装建立busybox文件系统5.建立好自己的文件系统后,用NFS测试8.简述制作ramdisk文件系统的步骤?#ddif=/dev/zeroo
本文标题:linux系统移植答案
链接地址:https://www.777doc.com/doc-1386709 .html