1、MIPS
MIPS是世界上很流行的一种RISC处理器。MIPS的意思是“无内部互锁流水级的”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。
MIPS技术公司则是一家设计制造高性能、高档次及嵌入式32位和64位处理器的厂商。在通用方面,MIPS R系列微处理器用于构建SGI的高性能工作站、服务器和超级计算机系统。在嵌入式方面,MIPS K系列微处理器是目前仅次于ARM的用得最多的处理器之一。
2、超标量和超流水线超标量是通过内置多条流水线来同时执行多个处理器,其实质是以空间换取时间。而超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至多个操作,其实质是以时间换取空间。
3、创建最小系统
创建最小系统分为两步:首先我们创建一个不依赖于主系统的全新工具链(包括编译器,汇编器,连接器和库文件),然后用它来编译其他重要工具
- 首先安装 Binutils 是因为 GCC 和 Glibc 在运行./configure 脚本的时候,会针对汇编器和连接器做种种测试,以决定打开或关闭某些功能。Binutils 安装汇编器和连接器在两个目录下:/tools/bin 和 /tools/$TARGET_TRIPLET/bin。一个路径下的工具很难连接到另一个路径下。另一个连接器的特性是库文件搜索顺序。用 ld 命令加上 --verbose 参数可以得到详细信息。比如:'ld --verbose | grep SEARCH' 会告诉你当前的搜索路径和它们的顺序。
- 下一个安装的软件包是GCC,在运行./configure的时候,你将看见类似下面的内容:
checking what assembler to use... /tools/i686-pc-linux-gnu/bin/as
checking what linker to use... /tools/i686-pc-linux-gnu/bin/ld |
这也很重要。它证明GCC的configure脚本不是靠搜索$PATH目录来决定使用什么工具的。 在gcc的实际运行中,搜索路径可能用不到。- 下一个软件包是 Glibc. 编译 Glibc 时最重要的是编译器,二进制工具和内核头文件。编译器通常没什么问题,因为Glibc总是使用$PATH目录里找到的 gcc。二进制工具和内核头文件就有点麻烦了,因此我们采用保险的方法,使用可用的configure开关来强制特定选择。在运行./configure后,你可以检查一下config.make 文件的内容,它在glibc-build目录里,有很多重要细节。你会发现一些有趣的细节,比如用CC="gcc -B/tools/bin/"来控制使用哪一个二进制工具,用 -nostdinc 和 -isystem 参数来控制编译器的头文件搜索路径。这些都强调了glibc软件包的一个重要特征:在编译时,它是相当自给自足的,不太依赖于工具链的缺省值。
4、请写出bootloader的简单流程
bootloader 是嵌入式系统上的启动首先执行的一段程序,一般分为stage1和stage2两个阶段:
stage1 :
(1) 配置本阶段需要用的硬件设备。
(2) 为bootloader的stage2阶段分配需要的内存空间。
(3) 拷贝bootloader的stage2到RAM空间中。
(4) 初始化堆栈。
(5) 跳转到C语言的入口。
stage2 :
(1) 初始化本阶段需要的硬件设备。
(2) 检测系统内存映射(memory map)。
(3) 将kernel映像和根文件系统映像从flash中读到RAM空间中。
(4) 为内核设置启动参数。
(5) 调用内核。
请给出你所知道的嵌入式开发中的所有调试方法?
(1) 用LED闪灯的亮灭代表特定的信息。
(2) 完成串口驱动, 调用printf()来打印特定的输出信息。
(3) 用AXD 实时的跟踪。
(4) 调试内核时用printk()。
(5) 查看/proc文件系统的特定的信息, 例如:cat /proc/devices cat /proc/interrupts.
(6) 用示波器来查看硬件上输出的波形是否正确。
(7) 查看芯片的特定的读写信号线,和控制信号线
5、实时操作系统
实时操作系统所遵循的最重要的设计原则是:采用各种算法和策略,始终保证系统行为的可预测性predictability)
与通用操作系统不同,实时操作系统注重的不是系统的平均表现,而是要求每个实时任务在最坏情况 下都要满足其实时性要求,也就是说,实时操作系统注重的是个体表现,更准确地讲是个体最坏情况表现。
几个主要差别的地方:
(1)任务调度策略不同。
(2)内存管理方式不同。
(3)中断处理方式。
(3)系统管理方式不同。
6、Linux 启动过程详解
用户开机启动 Linux 过程总体上是这样的:
首先当用户打开 PC 的电源时,CPU 将自动进入实模式,并从地址 0xFFFF0 开始自
动执行程序代码,这个地址通常是 ROM-BIOS 中的地址。这时 BIOS 进行开机自检,并
按 BIOS 中设置的启动设备(通常是硬盘)进行启动,接着启动设备上安装的引导程序
lilo 或 grub 开始引导 Linux(也就是启动设备的第一个扇区) ,这时,Linux 才获得了启
动权。
接下来的第二阶段,Linux 首先进行内核的引导,主要完成磁盘引导、读取机器系统数
据、实模式和保护模式的切换、加载数据段寄存器以及重置中断描述符表等。
第三阶段执行 init 程序 (也就是系统初始化工作) init 程序调用了 rc.sysinit 和 rc 等程序 ,
而 rc.sysinit 和 rc 在完成系统初始化和运行服务的任务后,返回 init。
之后的第四阶段,init 启动 mingetty,打开终端供用户登录系统,用户登录成功后进入了
Shell,这样就完成了从开机到登录的整个启动过程。
7、系统调用
整个系统调用的过程可以总结如下:
1. 执行用户程序(如:fork)
2. 根据glibc中的函数实现,取得系统调用号并执行int $0x80产生中断。
3. 进行地址空间的转换和堆栈的切换,执行SAVE_ALL。(进行内核模式)
4. 进行中断处理,根据系统调用表调用内核函数。
5. 执行内核函数。
6. 执行RESTORE_ALL并返回用户模式
阅读(564) | 评论(0) | 转发(0) |