嵌入式Linux系统移植试题(时间:1个半小时)
一、选择题(每题2分,共50分,包括单选和多选,多选、少选均不得分)
1. 嵌入式linux系统移植包括( ABC )
[A] bootloader  [B] linux内核    [C] 根文件系统  [D] 应用程序
2. 一般情况下,在搭建嵌入式linux开发环境时主机需要安装的软件有( ABC )
[A] 串口通信软件  [B] tftp服务器  [C] nfs服务器  [D] http服务器
3. 下列选项中符合gcc的编译流程的是( A )
[A] 预处理->编译->汇编->连接  [B] 预处理->汇编->编译->连接  [C] 编译->预处理->汇编->连接  [D] 预处理->连接->汇编->编译
4. gcc使用下列哪个选项可以查看编译的详细过程(  B )
  [A] -o  [B] -v    [C] -E  [D]  -g 
5. 下列二进制工具哪个是丢弃目标文件的全部或者特定符号,减少文件体积的( D )
[A] size  [B] as    [C] nm  [D] strip
6. 下列二进制工具哪个是用来反汇编的( B )
  [A] nm  [B] objdump    [C] objcopy  [D] string
7. 下列二进制工具哪个是用来进行目标格式转换的( C )
  [A] nm  [B] objdump    [C] objcopy  [D] string
8. 下列二进制工具哪个是用来把程序地址转换为文件名和行号的( D )
[A] nm  [B] objdump    [C] objcopy  [D] addr2line
9. 下列二进制工具哪个是用来将目标文件生成静态库的( A )
[A] ar  [B] nm    [C] objcopy  [D] objdump
10. FSC1000开发平台上,linux要求bootloader将内核参数存储在什么位置( B )
[A] 0x20008000  [B] 0x20000100  [C] 0x20004000  [D] 0x27e0000
11. linux要求bootloader将平台号保存在( B )
[A] r0 [B] r1  [C] r2  [D] r3 
12. linux要求bootloader在运行内核前,让系统进入何种模式( B )
[A] user [B] svc  [C] system
13. bootloader向内核传参的方式有( AD )
  [A] param_struct  [B] cmd_tbl_t  [C] char *  [D] tag
14. u-boot的命令中,设置环境变量的命令是( A )
  [A] setenv  [B] printenv  [C] tftp  [D] bootm
15. u-boot中存放内核启动参数的环境变量是( C )
[A] bootcmd  [B] bootdelay    [C] bootargs  [D] ipaddr
16. 在内核配置时,哪个关键词是来包含下一级Kconfig ( B )
[A] menu  endmenu  [B] source    [C] choice  endchoice  [D] depends on
17. 内核启动过程中,如果终端出现”Error:a”错误,可能出现的原因是( B )
    [A] 内核不支持当前处理器 
[B] 内核不支持当前开发平台 
[C] 内核获取不到bootloader传递来的参数 
[D] 内核初始化终端出现错误
18. 内核启动过程中,如果终端出现”Error:p”错误,可能出现的原因是( A )
    [A] 内核不支持当前处理器 
[B] 内核不支持当前开发平台 
[C] 内核获取不到bootloader传递来的参数 
[D] 内核初始化终端出现错误
19. 下列函数适合在内核解压后,console初始化以前使用的是( B )
  [A] puts  [B] printascii  [C] printk  [D] printf
20. 当console初始化以后,一般最为简单的内核调试方式为 ( A )
[A] printk  [B] puts  [C] bdi2000  [D] kgdb
21. 下列哪些文件系统可以运行在nand flash上,并具有可读写特性( AB )
[A] yaffs2  [B] jffs2  [C] cramfs  [D] tmpfs  [E] ios9660
22. 下列哪些文件系统可以运行在nand flash上,并具只读特性( C )
[A] yaffs2  [B] jffs2  [C] cramfs  [D] tmpfs 
23. 下列不占用任何磁盘空间的文件系统是( D )
[A] yaffs2  [B] jffs2  [C ] cramfs  [D] tmpfs 
24. 在命令mknod /dev/ttySAC0  c  4  64中,‘c’代表( A )
[A] 字符设备  [B] 块设备  [C] 网络设备
25. 在用busybox制作根文件系统时,对inittab文件中的action,如果要求在程序执行前按enter键进行确认的是( A )
[A] askfirst  [B] respawn  [C ] sysinit  [D] wait
二、简答题(前5题每题8分,最后一题10分,共50分)
1. 简述嵌入式linux系统移植的主要内容有哪些?
1> 搭建交叉开发环境
  2> 移植bootloader
  3> 移植linux内核
  4> 制作根文件系统
2. 什么是bootloader,其作用是什么? 列举三种ARM平台常用的bootloader
  bootloader是系统加电或复位时首先运行的一段代码,其作用是对系统的软硬件做相应
的初始化,为操作系统的加载运行做好准备。
  u-boot  redboot  blob  vivi
3.描述u-boot启动流程
u-boot启动分为两个阶段:
第一个阶段用汇编实现。设置中断向量表->设置SVC模式、中断和时钟 ->
关闭看门狗、mmu和cache->初始化内存控制器->自搬移->设置堆栈、清空bss段
第二个阶段用C实现。调用一系列初始化函数->初始化Flash设备和环境变量->
初始化网络设备->进入循环
4.分析以下代码段(逐行分析)。
linux内核文件放在哪
int disable_interrupts (void)
{
    unsigned long old,temp;      定义变量 old, temp
    __asm__  __volatile__(      声明内嵌汇编,通知编译器不用优化
"mrs %0, cpsr\n"    读取cpsr寄存器的值到参数1
                "orr %1, %0, #0xc0\n"  参数1的值和0xc0按位或操作后保存到参数2
                "msr cpsr_c, %1"    参数2的值写入cpsr_c
                : "=r" (old), "=r" (temp)  定义内嵌汇编的输出部分:old是参数1temp是参数2,均通过寄存器参与运算
                :
                : "memory");  通知编译器内嵌汇编代码会修改内存
    return (old & 0x80) == 0;  判断在原先的状态寄存器中是否开启了中断
}
5.分析以下链接脚本内容,并大致画出内存分布图:
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
 指定输出的可执行文件是elf格式,32ARM指令,小端
OUTPUT_ARCH(arm)    指定输出的可执行文件的平台为ARM
ENTRY(_start)    指定输出的可执行文件的入口为_start
SECTIONS
{
        .  =  0x00000000  0x0位置开始
        .  =  ALIGN(4)  4字节对齐
        .text  :    定义代码段
        {
              arch/arm/cpu/armv7/start.o  (.text)    代码段的第一部分
              *(.text)    其它代码部分
        }
        .  =  ALIGN(4)
        .rodata : { *(.rodata*) }  定义只读数据段
        .  =  ALIGN(4)
        .data : {  *(.data)  }  定义数据段
        .  =  ALIGN(4)
    .  =  .
         __u_boot_cmd_start  =  .  把当前地址赋值给__u_boot_cmd_start
        .u_boot_cmd : {  *(.u_boot_cmd)  }    定义u_boot_cmd,把所有的uboot命令放在该段
        __u_boot_cmd_end  =  .  把当前地址赋值给__u_boot_cmd_end
        . = ALIGN(4)
        .bss : {
__bss_start  =  .  把当前地址赋值给__bss_start,即bss段的开始位置
*(.bss) }  定义bss
__bss_end__  =  .;把当前地址赋值给__bss_end__,即bss段的结束位置
}
6. 回答以下内核相关问题:
1 分别编译内核镜像和模块的命令是什么?
make  zImage
make  modules
2 以SMDKC100平台为例,第一次配置内核时,应使用的缺省内核配置文件是什么?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。