Chinaunix首页 | 论坛 | 博客
  • 博客访问: 306981
  • 博文数量: 79
  • 博客积分: 1480
  • 博客等级: 上尉
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-11 15:29
文章分类

全部博文(79)

文章存档

2012年(1)

2011年(5)

2010年(19)

2009年(54)

我的朋友

分类: LINUX

2010-06-21 14:33:31

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并返回用户模式

阅读(520) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~