一、选择题(每题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 )
1
[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 )
2
[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.分析以下代码段(逐行分析)。 int disable_interrupts (void) {
unsigned long old,temp; 定义变量 old, temp
__asm__ __volatile__( 声明内嵌汇编,通知编译器不用优化
\"mrs %0, cpsr\\n\" 读取cpsr寄存器的值到参数1
3
\"orr %1, %0, #0xc0\\n\" 参数1的值和0xc0按位或操作后保存到参数2 \"msr cpsr_c, %1\" 参数2的值写入cpsr_c
: \"=r\" (old), \"=r\" (temp) 定义内嵌汇编的输出部分:old是参数1,temp是参数2,均通过寄存器参与运算 :
: \"memory\"); 通知编译器内嵌汇编代码会修改内存
return (old & 0x80) == 0; 判断在原先的状态寄存器中是否开启了中断 }
5.分析以下链接脚本内容,并大致画出内存分布图:
OUTPUT_FORMAT(\"elf32-littlearm\ 指定输出的可执行文件是elf格式,32位ARM指令,小端
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
4
. = ALIGN(4); .bss : {
__bss_start = .; 把当前地址赋值给__bss_start,即bss段的开始位置 *(.bss) } 定义bss段
__bss_end__ = .;把当前地址赋值给__bss_end__,即bss段的结束位置 }
6. 回答以下内核相关问题:
⑴ 分别编译内核镜像和模块的命令是什么?
make zImage make modules
⑵ 以SMDKC100平台为例,第一次配置内核时,应使用的缺省内核配置文件是什么?
arch/arm/configs/s5pc100_defconfig
⑶ 以SMDKC100平台为例,存放平台代码的文件是什么(完整路径)?
arch/arm/mach-s5pc100/mach-smdkc100.c
⑷ 内核解压后的入口在哪个文件?
arch/arm/kernel/start.S
⑸ printk支持几种打印级别?
8种(0~7)
5
因篇幅问题不能全部显示,请点此查看更多更全内容