U-Boot在S5PV210上的分析及移植

2016-09-20 08:14冯宝祥邓人铭
现代计算机 2016年21期
关键词:开发板内核命令

冯宝祥,邓人铭

(广州粤嵌通信科技股份有限公司,广州 510663)

U-Boot在S5PV210上的分析及移植

冯宝祥,邓人铭

(广州粤嵌通信科技股份有限公司,广州 510663)

U-Boot是一种在嵌入式平台上使用非常广泛的Bootloader,而S5PV210微处理器的启动过程比较复杂。以GEC210为实验平台,分析U-Boot的启动过程,并提出在GEC210平台上的移植方法。应用结果表明,U-Boot在GEC210开发板上运行良好,可以成功地引导Linux2.6.35.7内核。

U-Boot;S5PV210;GEC210;移植

0 引言

U-Boot是一种通用的Bootloader,是遵循GPL条款的开放源码项目,由德国DENX小组开发。U-Boot支持多种架构的CPU,如X86、ARM、PowerPC、MIPS等;也支持Linux、VxWorks、WinCE等多种嵌入式操作系统。U-Boot代码开源、稳定、可配置性及可移植性强,所以在嵌入式平台中是一种应用比较广泛的启动代码。

1 GEC210启动过程概述

GEC210是广州粤嵌通信科技股份有限公司开发的一款基于ARM架构Cortex-A8内核的开发平台,该硬件平台采用三星公司的S5PV210微处理器作为主控芯片,S5PV210是一款高效率、高性能、低功耗的32位RISC微处理器,主频可以工作在1GHz,而且带有丰富的外围接口。GEC210开发板的硬件框架见图1。

在GEC210平台上加载启动嵌入式Linux系统主要分成5个步骤:

①上电自启动执行S5PV210芯片内部iROM中固化的BL0引导程序;

②BL0将Nand Flash中U-Boot的第一阶段代码BL1拷贝到S5PV210内部的iRAM中,并跳转到iRAM中执行BL1,BL1初始化了DDR2内存;

③BL1将Nand Flash中的U-Boot第二阶段代码BL2拷贝到DDR2内存中,并跳转到DDR2内存中执行BL2;

④BL2将Nand Flash中的Linux内核映像拷贝到DDR2内存中,并在DDR2内存中解压及启动内核;

⑤内核加载完毕后,挂载根文件系统,并启动执行默认的Linux应用程序。

图1 GEC210开发板的框架图

2 S5PV210内部BL0的启动过程

S5PV210 CPU内部自带一个64KB的iROM和一个96KB的iRAM,芯片出厂时在iROM中已经固化了一个基本的启动代码,即BL0,BL0不需要用户修改。S5PV210支持多种启动方式,如:Nor Flash、Nand Flash、One Nand,Uart、USB、SD卡等。启动方式通过S5PV210的外部引脚设定,本文讲述的U-Boot移植和分析选择Nand Flash启动方式。S5PV210上电启动时运行BL0,并由BL0判断启动方式。BL0的主要工作内容如下:

①关闭看门狗定时器(watchdog timer)。

②初始化I cache(Instruction cache)。

③初始化iRAM中的栈和堆,注册异常向量表等。

④初始化系统时钟PLL。

⑤判断启动设备。

⑥检查BL1的校验和,如果正确,就从Nand Flash中拷贝U-Boot前16kB的BL1到iRAM中。

⑦执行iRAM中的BL1代码。

3 U-Boot的第一阶段代码BL1

U-Boot代码一般分成两个部分,分别为stage1,即BL1和 stage2即 BL2。其中 BL1源码文件为/cpu/ s5pc11x/start.S和/board/samsung/smdkc110/lowlevel_init. S。BL1是使用ARM汇编语言编写的源代码,主要完成CPU级的初始化工作,如:

①关闭看门狗和中断。②初始化系统时钟。

③初始化DDR2内存。

④初始化DDR2内存中的stack。⑤初始化串口。⑥将BSS段清0。

⑦将Nand Flash中的BL2拷贝到DDR2内存。

⑧跳转到DDR2内存中,执行BL2中的start_armboot()函数。

将BL2拷贝到DDR2内存后,在/cpu/s5pc11x/start. S源文件中调用start_armboot()函数,进入U-Boot的第二阶段。BL1跳转到BL2的代码如下:

ldr pc,_start_armboot_start_armboot:.word start_armboot

4 U-Boot第二阶段代码BL2

BL2代码的源文件是/lib_arm/board.c,start_armboot()函数是BL2的入口。主要完成板级的初始化,如:

①初始化U-Boot的两个结构体gd_t和bd_t,用来存放U-Boot的全局信息和GEC210开发板信息。

②初始化网卡。

③初始化LCD显示屏。

④初始化I2C总线接口。

⑤进入main_loop()循环,接收用户输入U-Boot命令,并根据命令进行相应的处理。

⑥用户不输入U-Boot命令,则在默认计时等待时刻到来后执行bootcmd命令,将Linux内核映像uImage 从Nand Flash拷贝到DDR2内存,并解压启动内核。

在include/configs/smdkv210single.h头文件中,设置U-Boot的默认启动命令bootcmd:

#define CONFIG_BOOTCOMMAND "nand read 0x30008000 0x600000 0x500000;bootm 0x30008000"

该bootcmd命令的主要作用是将Nand Flash中0x600000地址开始的uImage(大小不超过5M Byte)拷贝到DDR2内存的0x30008000地址,并启动该地址上的uImage。在U-Boot源码的main_loop()循环中,获取bootcmd命令参数并执行,最后启动uImage。代码如下:

s=getenv("bootcmd");//读取启动命令

run_command(s,0);//执行bootcmd

5 U-Boot的移植过程

针对GEC210开发板的U-Boot移植采用三星官方提供的SMDKV210开发平台源码包,移植过程的主要方法是比较GEC210和SMDKV210平台之间的差异,对源代码进行修改。

5.1 配置U-Boot源码

修改U-Boot源码顶层的Makefile文件,设置CPU的架构和交叉工具链:

ifeq($(ARCH),arm)

CROSS_COMPILE=/usr/local/arm/arm-2009q3/bin/armnone-linux-gnueabi-

使用三星公司的默认配置文件,对U-Boot源码进行配置:

#make smdkv210single_config

5.2 U-Boot源代码移植

修改include/configs/smdkv210single.h文件:

(1)更改串口控制台

#define CONFIG_SERIAL1 1

(2)更改DDR2内存配置

GEC210开发板设计内存时,采用4片16bits的DDR2 SDRAM,其中每2片并联在一起,分别接到DDR2控制器的通道0和通道1上。内存的配置方法如下:

#define MEMORY_BASE_ADDRESS 0x30000000

#define MEMORY_BASE_ADDRESS1 0x40000000

#define DMC0_MEMCONTROL 0x00202400

#define DMC0_MEMCONFIG_0 0x30F00313

#define DMC0_MEMCONFIG_1 0x00F00313

#define DMC1_MEMCONTROL 0x00202400

#define DMC1_MEMCONFIG_0 0x40F00313

#define DMC1_MEMCONFIG_1 0x00F00313

#define SDRAM_BANK_SIZE 0x10000000

#define PHYS_SDRAM_2 (MEMORY_BASE_ADDRESS1)

修改DDR2内存的基地址,在board/samsung/smdkc110/smdkc110.c源文件中,将 0x20000000改为0x30000000。

(3)修改DM9000网卡的基地址

#define CONFIG_DM9000_BASE(0x88000000)

#define DM9000_DATA (0x88000000+8)

(4)屏蔽PMIC、SRAM和Nor Flash初始化代码

在GEC210开发板上,并没有使用PMIC、SRAM和Nor Flash等外设芯片,所以将 board/samsung/smdkc110/lowlevel_init.S文件中的 PMIC、SRAM和 Nor Flash的初始化代码屏蔽掉。

5.3 U-boot 编译

在U-Boot的源码目录下执行make,编译完成后得到u-boot.bin文件,该文件是uboot的可执行文件。

5.4 U-Boot 测试

首 先 将 u-boot.bin烧 写 到 Nand Flash的0x00000000地址,启动GEC210平台后,在串口调试终端上会显示U-Boot正常启动信息。U-Boot会根据默认配置的bootcmd参数加载并启动Linux内核。

6 结语

U-Boot是一种开源的Bootloader,支持多种架构的CPU,并且可以启动多种操作系统,功能强大、应用广泛。本文主要讲述了U-Boot在S5PV210上的启动分析和移植过程,该分析方法和移植过程在其他嵌入式平台上也有一定的借鉴性。

[1]Samsung Electronics Co.,Ltd.S5PV210 RISC Microprocessor User's Manual V1.10.http://samsungsemi.com,2010.

[2]Samsung Electronics Co.,Ltd.S5PV210 iROM Application Note V0.3.http://samsungsemi.com,2009(11).

[3]李洪亮,邵长彬.基于S3C2410的U-Boot移植[J].电子技术,2012(1):12-14.

[4]许伦辉,齐宝岭,黄艳国.U-Boot源码分析及在S3C2440的移植过程[J].科技广场,2009(7):172-174.

Analysis and Transplanting of U-Boot on S5PV210

FENG Bao-xiang,DENG Ren-ming
(Guangzhou Yueqian Communication Technology Co.,Ltd.,Guangzhou 510663)

U-Boot is a kind of Bootloader which is widely used on the embedded platform,but the startup process of S5PV210 microprocessor is more complex.Describes the startup process of U-Boot and the transplanting methods on GEC210 in details.The application result shows that the transplanted U-Boot runs well on the GEC210 development board,and can lead Linux2.6.35.7 kernel successfully.

U-Boot;S5PV210;GEC210;Transplanting

1007-1423(2016)21-0068-04

10.3969/j.issn.1007-1423.2016.21.016

冯宝祥(1978-),男,辽宁沈阳人,硕士研究生,工程师,研究方向为嵌入式Linux技术、物联网应用、自动控制应用邓人铭(1985-),男,广东湛江人,本科,助理工程师,研究方向为嵌入式系统、智能硬件设计、物联网通信开发

2016-05-06

2016-07-15

猜你喜欢
开发板内核命令
多内核操作系统综述①
只听主人的命令
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
基于STM32H7的FDCAN通信系统设计与实现∗
安装和启动Docker
微软发布新Edge浏览器预览版下载换装Chrome内核
移防命令下达后
浅析单片机开发板的设计与制作
解析Windows10的内部命令