>
首页 » 技术文章 » Clinux在MIPS上的移植

Clinux在MIPS上的移植

作者:成都电子科技大学通信与信息工程学院 马草飞  时间:2005-12-10 20:57  来源:本站原创

摘 要:本文描述了将Clinux移植到基于MIPS R3K处理器的目标板上的方法和过程,说明了如何搭建移植环境,并着重讨论了移植中需要注意的问题。
关键词:Clinux;MIPS;移植;ROMFS;BootLoader
引言
Clinux是标准Linux的一个分支,它继承了Linux的大部分优点,并能够实现对没有MMU的处理器的支持,所以被广泛地应用于嵌入式领域。本文将其移植到了基于MIPS R3K处理器的目标板上,处理器的工作频率为100MHz。目标板上的其它主要资源还包括:2个串口(16550A),波特率9600;网卡(RTL8019AS);512K ROM(AM29F040),以及64M SDRAM。开发板与主机的连接如图1所示。


图1 开发板与主机的连接示意图

Clinux的移植
交叉编译环境的建立
嵌入式开发环境一般由宿主PC和目标系统构成。宿主PC上先要建立开发编译工具,如binutils、gcc、glibc等。目标板是运行和调试的平台。宿主PC和目标板利用网络和串口建立连接,系统在目标板上运行时通过串口来反馈信息,并在宿主PC的超级终端上显示出来。
BootLoader的设计
BootLoader的作用类似于PC中的BIOS,它在系统启动时对硬件进行初始化操作,负责与宿主PC建立连接并引导操作系统启动。它必须被固化在目标板上,当系统启动时, MIPS处理器的CPU会从0xbfc0 0000中取出第一条指令执行,而虚拟地址0xbfc0 0000对应的物理地址就是ROM的起始地址00000,所以只需要把BootLoader程序烧写在ROM上就可以了。
在BootLoader中,首先要设置CPU的工作状态,包括Little Endian方式、使用CPU的ICache(16KB, 32/line)、DCache(8KB, 16/line)等,并设置异常及中断向量表。针对CPU的BEV位,异常有不同的入口地址。BEV=0主要用于当CPU的Cache、SDRAM初始化后,如果系统发生异常和中断时,其异常、中断入口地址可以通过Cache来访问,这样就加快了响应时间。在Clinux中操作系统的异常和中断处理的入口地址也要遵循这样的方式。
memcpy((void *)(KSEG0 + 0x80), &except_vec1_generic, 0x80);
memcpy((void *)(KSEG0 + 0x100), &except_vec2_generic, 0x80);
memcpy((void *)(KSEG0 + 0x180), &except_vec3_generic, 0x80);
其次,因为C代码中的变量(register类型除外)在调用函数时使用的堆栈指针SP等都需要使用可读写的存储介质SDRAM,因此需要对SDRAM进行初始化。在初始化SDRAM之前的代码都必须用汇编语言编写,初始化完成之后,就可以使用C语言来编写目标板上其他设备的相应初始化程序了。
最后,对串口、网络控制芯片进行初始化,然后等待宿主PC上发出命令进行相应的操作。
宿主PC编译好内核代码后,即会通过串口发出命令通知目标板准备接收,目标板在收到命令后就准备接收主机发送的数据,并将接收到的数据放到SDRAM相应的位置上。数据通过网络传输,传输协议使用的是TFTP协议。宿主PC上通过串口发送命令tftp 192.168.1.231 PUT d: \uClinux\linux,其中的192.168.1.231是目标板的IP地址,linux是编译生成的二进制文件。
内核代码的修改
由于不同的目标板上使用的CPU不同,所具有的板上设备也不同,因此,内核代码需要作一定的修改,改动主要集中在对异常、中断号,及其入口地址及设备地址的修改上。
首先,建立针对自己目标板的目录:D:\uc-linux\linux-2.4.19\arch\mipsnommu\r3k、D:\uc-linux\linux-2.4.19\include\asm-mipsnommu\r3k,并放入目标板的相应代码。同时要修改Makefile,将这两个目录里的文件编译进内核,去掉不必要的针对其他目标板、处理器目录的编译。
在D:\uc-linux\linux-2.4.19\arch\mipsnommu\r3k目录下,创建两个子文件夹comm和osprey。在r3k\comm目录下,主要存放以下文件:
int_handler.S、irq.c:针对MIP R3K处理器进行中断初始化和检测操作;
serial.c:针对目标板串口进行波特率设置,中断号及地址分配;
time.c:针对目标板的RTC进行初始化设置。
在r3k\osprey目录下主要存放以下文件:
prom.c,setup.c:进行目标板的初始化设置,包括串口、时间系统的一些初始化工作。
在D:\uc-linux\linux-2.4.19\include\asm-mipsnommu\r3k目录下主要有两个头文件:
irq.h:包括CPU的一些中断号的宏定义;
r3k.h:包括目标板上一些设备的中断号的宏定义,例如串口。
其次,要小心地修改操作系统的时钟中断(Timer Interrupt),否则移植的系统可能会永远停止在BogusMIPS calibration阶段,这是因为操作系统的“脉搏”jiffies的更新是在时钟中断里进行的。时钟中断的产生方式可以根据不同的目标系统而变化。对于MIPS R3K处理器,直接使用它的内部定时器,在CP0的STATUS寄存器中设置中断号,为IP7,需要修改的寄存器包括CP0的COMPARE和COUNT。此外也可以使用RTC来获得时钟中断,其中断号及中断允许位的设置根据目标板而异。涉及到的代码包括:D:\uc-linux\linux-2.4.19\arch\mipsnommu\r3k\common\ int_handler.S、D:\uc-linux\linux-2.4.19\arch\mipsnommu\r3k\common\ time.c、D:\uc-linux\linux-2.4.19\arch\mipsnommu\kernel\time.c。
然后,完成对串口的修改。串口在操作系统的移植在系统调试的过程中扮演了比较重要的角色。在系统运行的初期,它主要用于反馈调试信息。在作为控制台初始化后,它又起着和操作系统交互通信的作用。可是,在对控制台进行初始化以前,打印的调试信息都不能显示出来,这样不便于调试控制台初始化以前的程序。
要解决这个问题有几种方法,例如可以在D:\uc-linux\linux-2.4.19\kernel\printk.c中的printk()函数中添加目标板上串口的打印函数。另外,由于使用的目标板有两个串口,所以可以用串口1与操作系统通信,而串口2作为专用的调试信息输出口。这样的好处还包括可以将调试信息与操作系统的信息分开显示,避免超级终端显示混乱。要注意的是在利用串口显示调试信息时,串口工作在查询方式;而操作系统使用串口作为控制台工作时,串口工作在中断方式。串口工作在中断方式时,需要在CPU的STATUS寄存器和其他中断控制机制中打开相应的中断允许位,否则CPU不能接收到串口发出的中断请求信息。如果不能调试好串口的驱动程序,最后在超级终端上就看不到操作系统给出的信息。相关代码主要在D:\uc-linux\linux-2.4.19\ drivers\char\serial.c中。
最后,由于使用的是ROMFS文件系统,并已将内核代码和文件系统镜像编译到一个二进制文件中,因此,在操作系统运行后,需要告诉操作系统文件系统的地址,否则就会出现不能加载文件系统的错误。文件系统地址可以在D:\uc-linux\linux-2.4.19\arch\mipsnommu\ kernel的setup.c文件里直接指定。

编译内核
在完成对Makefile的少量修改后就可以编译内核了,主要步骤包括:
Make menuconfig:其中包括选择使用的CPU及目标板,串口的使用等;
Make dep:检查代码的完整性和依存关系;
Make:包括编译内核,生成ROMFS镜像文件。
  
下载二进制镜像文件
在宿主PC上发出TFTP命令,在目标板上利用BootLoader接收数据,并将代码和ROMFS文件系统依次放置到相应的地址。BootLoader在完成这些工作后会将控制权交给Clinux系统,然后操作系统开始启动。在完成对目标板设备的初始化、中断的建立以及文件系统的加载后,系统执行/bin/init,最后出现一个等待输入命令的提示符#。这样,也就完成了对Clinux的移植工作。

结语
本文讨论了Clinux在MIPS R3K处理器上的移植过程和关键技术,并简要介绍了BootLoader的设计,以及串口在移植中的运用。■

参考文献
1 毛德操,胡希明. Linux内核源代码情景分析[M]. 杭州:浙江大学出版社, 2001
2 陈莉君. Linux操作系统内核分析[M]. 北京:人民邮电出版社, 2000
3 赵炯. Linux内核完全注释. 北京:机械工业出版社, 2004
4 Gerry Kane, Joe Heinrich. MIPS RISC ARCHITECTURE [M]. Prientice Hall PTR, 2000

相关推荐

MIPS收购拉开四国演义序幕 处理器或将大融合

MIPS  处理器  Cortex  2012-11-19

两大对手瓜分MIPS 谁赢谁输

MIPS  处理器  移动设备  2012-11-09

MIPS推出新一代Aptiv处理器 提供三种不同的性能水平

MIPS  处理器  2012-05-21

中国官方主导着手开发自有处理器架构

MIPS  处理器架构  2012-04-26

四联微电子采用MIPS处理器开发新款机顶盒芯片

MIPS  处理器  2012-04-23

MWC 2012:如果你搭好台,就有人来唱戏!

MIPS  Android  2012-04-19
在线研讨会
焦点