嵌入式Linux系统移植试题(时间:1个半小时)
一、选择题(每题2分,共50分,包括单选和多选,多选、少选均不得分)
1. 嵌入式linux系统一般由哪几部分组成(ABCD)
[A] bootloader [B] linux内核 [C] 根文件系统 [D]用户应用程序
2. 一般情况下,在搭建嵌入式linux开发环境的主要工作中,配置主机必须的软件有(A)
[A] 终端软件 [B] tftp服务器 [C] nfs服务器 [D]usb
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. FS2410开发板如果从nand flash启动,启动后(B)访问到nor flash;如果从nor flash启动,启动后(A)访问nand flash。
[A] 可以 [B] 不可以
11. SMDK2410开发平台上,linux要求bootloader将内核参数存储在什么位置(B)
[A] 0x30008000 [B] 0x30000100 [C ] 0x30004000 [D ] 0x33f80000
12. SMDK2410开发平台上,linux要求bootloader将平台号保存在(B)
[A] r0 [B] r1 [C ] r2 [D ] r3
13. SMDK2410开发平台上,linux要求bootloader在运行内核前,让系统进入何种模式(B)
[A] user [B] svc [C ] system
14. u-boot所支持的命令中,哪个是来设置环境变量的(A)
[A] setenv [B] mm [C ] mtest [D ] bootm
15. u-boot支持的命令中,哪个是擦除nor flash的命令( C )
linux内核文件放在哪[A] nand erase [B] protect [C ] erase [D ] cp
16. 在内核配置时,哪个关键词是来包含下一级Kconfig (C)
[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]ramfs
22. 下列哪些文件系统可以运行在nand flash上,并具只读特性(C )
[A] yaffs2 [B] jffs2 [C ] cramfs [D ] tmpfs [E]ramfs
23. 下列哪些文件系统不占用任何磁盘空间的文件系统是( DE )(多选)
[A] yaffs2 [B] jffs2 [C ] cramfs [D ] tmpfs [E]ramfs
24. 在命令mknod /dev/ttyS0 c 4 64中,‘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到flash
4 下载内核映像到开发板(通过tftp)
5 制作文件系统
2. 什么是bootloader,linux bootloader的作用是什么,列举几种嵌入式系统中常用的bootloader?
1.Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
嵌入式Linux系统中常用的bootloader有armboot、redboot、blob、u-boot等
3.简述u-boot启动流程?
大多数bootloader都分为stage1和stage2两大部分,uboot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1并且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。
2.1 stage1 (start.s代码结构)
uboot的stage1代码通常放在start.s文件中,它用汇编语言写成,其主要代码部分如下:
(1)定义入口 。由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。
(2)设置异常向量(ExceptionVector)。
(3)设置CPU的速度、时钟频率及中断控制寄存器。
(4)初始化内存控制器 。
(5)将ROM中的程序复制到RAM中。
(6)初始化堆栈 。
(7)转到RAM中执行,该工作可使用指令ldrpc来完成。
2.2 stage2 C语言代码部分
lib arm/board.c中的start armboot是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,jtag
3.选定参考板
选择一个内核中已经支持,且和自己的开发部相似的参考板为原型,进修修改
4.修改开发板相关代码
完成BSP的修改移植
如:arch/arm/mach-s3c2410/ 目录
5.添加驱动
先添加基本驱动代码 (如:网卡)
6.编译、调试、下载内核
内核的配置注意事项
arch/arm/mm/Kconfig:
# ARM920T
config CPU_ARM920T
bool "Support ARM920T processor“
arch/arm/mm/Makefile
obj-$(CONFIG_CPU_ARM920T) += proc-arm920.o
make menuconfig
System Type ---> [*] Support ARM920T processor
5.分析一下代码段。
int disable_interrupts (void)
{
unsigned long old,temp;
__asm__ __volatile__("mrs %0, cpsr\n"
"orr %1, %0, #0xc0\n"
"msr cpsr_c, %1"
: "=r" (old), "=r" (temp)
:
: "memory");
return (old & 0x80) == 0;
}
Old和temp作为输出变量,用寄存器方式而不是内存方式访问它们。old 作为%0,temp作为%1,memory表示告诉编译器内存被修改过了,这段汇编将cpsr或上0xc0,检查以前的cpsr值,检查第7位,返回的是将第7位取反的结果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论