基于S3C2410的启动代码的研究

时间:2022-09-30 11:30:15

基于S3C2410的启动代码的研究

摘要:描述了将启动代码移植到基于S3C2410处理器目标板上的方法与过程。首先介绍了目标平台和Linux,接着介绍了交叉编译环境的建立原理,着重介绍了BootLoader的架构和功能,给出了启动代码vivi的配置和编译过程。

关键词:嵌入式;S3C2410;Linux;交叉编译;启动代码vivi

中图分类号:TP338文献标识码:A文章编号:1009-3044(2008)27-1876-03

The Research of Startup-code Based on the Processor of S3C2410

XIONG Jie, WEI Yong

(Yangtze University, Electronic Information Institute, Jingzhou 434023, China)

Abstract: This paper introduces the method and procedure of making startup-code onto the target board based on the processor of S3C2410. Fist it says the target board and Linux, then describesthe theory of the cross compiler,focusing on the framework and functionality of Bootloader , introduces the config of vivi and the proces of compiler.

Key words: embedded; s3c2410; linux; cross compiler; vivi

1 引言

嵌入式系统就是以应用为中心、以计算机技术为基础,采用可剪裁软硬件,适用于对功能、可靠性、成本、体积、功耗等严格要标的专用计算机系统。ARM嵌入式芯片是一种高性能、低功功耗的RISC芯片。

Linux是开放源代码的,操作系统的一切对用户来说都是透明的;现在人们需要的是一个便宜、成熟并且提供高端嵌入式系统所必需特性的操作系统,嵌入式Linux操作系统以价格低廉、功能强大又易于移植而被广泛采用,成为新兴的力量,所以众多厂家纷纷转向了嵌入式Linux。

2 开发环境

本文中使用的目标平台S3C2410是SamSung公司使用ARM920T处理器内核开发的一款嵌入式处理器。该芯片包括有16KB一体化的Cache/MMU,这一特性使开发人员能够将Linux移植到基于该处理器的目标系统中。

文中使用的Linux开发环境是cygnus solutions公司开发的cygwin, cygwin是一个在Windows平台上运行的Unix模拟环境,它对于学习Unix/Linux操作环境,或者从Unix到Windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在Windows上进行嵌入式系统开发,非常有用。

3 交叉编译环境的建立

基于Linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主机所构成。目标硬件开发板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和高度则需要通过宿主机来完成(所以称为交叉编译)。双方之间一般通过串口,并口或以太网接口。在宿主机上建立ARM的交叉编译环境,主要用到的开发工具包括三个部分:binutils、gcc、glibc。其中,binutils是二进制文件的处理工具;gcc是编译工具;glibc是链接和运行库。所有需要用到的工具既可以下载源码自行编译,也可以直接下载已经编译好的二进制工具。

4 Bootloader的架构和功能实现

4.1Bootloader介绍

在嵌入式系统中,BootLoader的作用与PC机上的BIOS类似,通过BootLoader可以完成对系统板上的主要部件进行初始化.其主要完成的功能:

1)初始化CPU的主频、SDRAM、中断、串口等硬件;2)启动Linux内核并提供一个RAMDISK; 3)通过串口下载内核或RAMDISK到目标板上;4)将修改过的内核或RAMDISK写入到FLASH内;5)为用户提供一个命令接口。

4.2 BootLoader启动流程

BootLoader的实现除了依赖于CPU的体系统机构,还依赖于目标板的设置,本系统的BootLoader引导程序分为stage1和stage2两个阶段。依赖于CPU的体系机构的代码,比如设备初始化等,放在stage1中,采用ARM汇编语言来实现,这样可以达到短小精悍的目的。Stage2用C语言来实现,可以实现复杂的功能,同时代码具有更好的可读性和可移植性。

4.3BootLoader具体在S3C2410实现

常用的BootLoader有以下几种:VIVI、Blob、U-BOOT等,本文着重介绍VIVI的移植过程。VIVI是由韩国MiZi公司开发的一种BootLoader,适合于ARM9处理器。VIVI两种工作模式,即启动加载和下载模式。

为了使移植工作更加快捷,本文选择vivi-20030929版本。它不仅提供对ARM-920T内核的支持,而且直接提供了对于S3C2410x的板级支持,这使移植工作量相对减少。

4.3.1 配置及编译vivi

1)vivi中与软件相关的修改(vivi/Makefile):

vivi作为Linux系统的启动代码,所以在编译配置时需要用到函数库,包括交叉编译库和头文件,交叉编译开关选项设置,还包括Linux内核代码中的库和头文件,所以通常需要修改vivi工程管理文件Makefile。

首先从网站下载vivi-20030929.tar.bz2源代码,对于本文使用的EduKit2410,需要对下面几处进行修改:

交叉编译器库和头文件:

① 修改原Makefile文件中有关编译器路径设置:

CROSS_COMPILE=/opt/host/armv4l/bin/armv4l-unknown-linux-

修改为CROSS_COMPIEL=/usr/bin/arm-linux-

② 修改增加链接时使用的标准库文件路径设置:

新增ARM_C_LIBS=/usr/arm-linux/lib

ARM_GCC_LIBS = /opt/host/armv4l/lib/gcc-lib/armv4l-unknown-linux/2.95.2

修改为 ARM_GCC_LIBS = /usr/lib/gcc-lib/armv4l-unknown-linux/2.95.3

③ 增加编译时头文件搜索路径设置:

LIBC_INCLUDE_DIR = /usr/arm-linux/include

Linux内核包含文件

修改Linux头文件所在路径:

LINUX_INCLUDE_DIR =/opt/host/armv4l/include/

修改为:

LINUX_INCLUDE_DIR = /usr/local/src/edukit2410/kernel/include

编译开关选项

修改链接开关选项设置:

CLIBS = -L$(ARM_GCC_LIBS) Clgcc Clc

修改为:

CLIBS = -L$(ARM_C_LIBS) -L$(ARM_GCC_LIBS) -lgcc -lc

4.3.2 vivi中与硬件相关的初始化(vivi/arch/s3c2410)

与具体运行在哪一个处理器平台上相关的文件都存放在vivi/arch/目录下,本系统中使用S3C2410X对应的目录为S3C2410。其中head.S文件是vivi启动配置代码,加电复位运行的代码就是从这里开始的。由于该文件中对处理器的配置均用外部定义常数或宏来实现,所以针对不同的平台,只要是S3C2410X处理器,几乎不用修改,只要修改外部定义的初始值即可。这部分初始值都在vivi/include/platform/smdk2410.h文件中定义,包括处理器时钟、存储器初始化、通用IO口初始化以及vivi初始配置等等。

4.3.3 编译、烧写vivi映像

$>cd/usr/local/src/edukit-2410/vivi 注:进入vivi文件夹

$>make clean 注:清除旧的编译结果

$>make menuconfig注:在配置时,本系统中选择的是smdk-amd即Nor Flash中烧写

$>make 注:编译

编译完成后生成名为vivi的文件,用英蓓特公司提供的Embest Online Flash Programmer软件,本系统中make menuconfig 时选择配置文件为SMDK2410-AMD,编译输出的映像文件为Nor Flash上运行,需要烧写到系统核心子板上的2MB Nor Flash中的第1到第5个扇区中,如图1所示。

4.3.4 实验结果

烧写vivi后,然后用上面的软件烧写内核镜像文件,开发箱通过串口与PC机相连,在PC上打开Windows自带的超级终端,然后再次启动开发箱电源,在超级终端上如果观察到下面如图2所示的字符串,则表示vivi烧写成功。

图2 结果分析

5 结束语

总之,在ARM程序设计中,启动代码是至关重要的。它是Linux内核移植,文件系统移植的基础。本文通过介绍启动代码,详细讲述了一种快速、简单、通用性强的ARM9启动代码的编写。

参考文献:

[1] 田泽.ARM9嵌入式Linux开发实验与实践[M].北京:北京航空航天大学出版社, 2006.

[2] 徐英慧,马忠梅.ARM9嵌入式系统设计-基于S3C2410与Linux[M].北京:北京航空航天大学出版社,2007.

[3] 杨宗德.嵌入式ARM系统原理与实例开发[M].北京:北京大学出版社,2007.

上一篇:锁相环中无源滤波器的设计 下一篇:基于范例的汉语主谓短语的自动标注