利用U-Boot作为系统bootloader实现uClinux向S3C44B0的移植

发布者:alpha12最新更新时间:2018-02-18 来源: eefocus关键字:U-Boot  bootloader  uClinux  S3C44B0 手机看文章 扫描二维码
随时随地手机看文章

    1  引言

    S3C44B0是Samsung公司推出的一款为手持设备或其他通用设备开发的32位处理器,它基于ARM7TDMI核,没有内存管理单元(MMU)。在采用无MMU的微处理器的嵌入式系统中广泛采用的就是uClinux系统,作为linux的衍生系统,其具有支持多任务、内核精简、高效稳定和源代码开放的优点。系统移植的基本过程包括:获取较新版本的linux-2.6.9内核源码,根据目标平台对源码中与硬件平台相关部分进行修改,添加必要的外设驱动程序,对系统进行针对目标平台的交叉编译,生成的内核映像文件的下载调试等。


    2  硬件环境介绍

    硬件平台以S3C44B0为核心,采用的外部晶振频率为6MHz,内核主频最高可达到66MHZ,平台以2MB的AMD29LV160DB做 rom,其地址空间为0~1fffff,以HY57V1620HG sdram做内存,地址空间为0c000000~0c7fffff,共8MB,以RTL8019as作为网络控制芯片,接在S3C44B0的Bank5 上,通过JTAG与PC机的并口连接支持在线调试与程序烧写。

    48.jpg
图1 硬件平台框图

    3  uClinux的移植

     3.1 交叉编译环境的建立

    交叉编译是利用运行在某机器(宿主机)上的编译器编译某个源程序生成在另一台机器(目标机)上运行的目标代码的过程。本文的交叉编译环境建立如下:在PC机上安装Linux操作系统做为我们的宿主机,版本为FEDore Core 5,从http : // www. uClinux .org/上下载交叉编译工具链arm-elf-tools20040427并安装在Linux 宿主机上,这样就建立了uClinux-arm的交叉编译环境。

     3.2 U-Boot-1.1.2的移植

    Bootloader是系统加电后运行的第一段代码,在一个基于ARM的嵌入式系统中,系统上电或复位时通常都从地址0X00000000处开始执行,而这个地址处通常就是系统的bootloader,通过这段程序可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境调整到一个合适的状态,以便为最终的调用操作系统内核准备好正确的环境。

    本文中bootloader采用对U-Boot进行移植来实现的。U-Boot的全称是Universal Boot Loader,是德国DENX小组开发的用于多种嵌入式CPU的Bootloader引导程序, 支持PowPC、ARM、MIPS、M68K等多种处理器平台,支持Linux、VxWorks、NetBSD等多种嵌入式操作系统,主要用来开发嵌入式系统初始化代码bootloader,其易于裁剪和调试,尊循GPL (通用公共许可) 公约,完全开放源代码。可以从http://sourceforge.net/projects/u-boot得到它多个版本的源码,本文是以u- boot-1.1.2为例进行移植的。

    在移植前可以通过查看doc文档了解U-Boot源码的主要结构,在众多的目录中与移植相关的主要是board、cpu、drivers等几个目录。移植的基本过程如下:

    (1) 查找以S3C44B0处理器为核心的硬件平台,此目的是为了简化移植难度;

    在board/下运行 find  -exec grep -l 44B0 {} 找到/dave/B2/B2.c,由此我们知道dave公司的B2平台是以S3C44B0处理器为核心的,所以移植可以参考B2平台进行;

    (2) 建立我们目标平台的目录lanlan,把B2板的文件拷到建立的目录中,但需要修改文件的名称;

    (3) 修改新建目录中的文件的名称,将文件中所有的B2都改成lanlan;

    (4) 在include/configs/添加目标平台的配置文件lanlan.h;此文件可以参考B2.h建立;

    (5) 修改总目录下的Makefile文件,添加目标板的编译信息;

    这个过程完成后可以在u-boot/目录下依次运行make lanlan_config ; make进行编译,编译完成后如果能生成u-boot.bin等文件,则说明前面的过程无误,如果出现错误,则需要根据错误信息进行相关修改;

    (6) 修改硬件相关的文件,在cpu/中有S3C44B0的目录,说明U-Boot已经提供了对S3C44B0的支持,我们只是需要修改部分文件使其适合我们的目标平台,主要修改的是cpu/下start.S 和serial.c,include/configs/下的lanlan.h中关于cpu的频率、串口波特率、PLLCON寄存器、flash和 sdram的大小、基地址和网络控制芯片的基地址等内容,确定修改正确后运行make lanlan_config;make命令,编译生成的u-boot.bin就是我们需要的引导程序;

    (7) 通过JTAG将生成的u-boot.bin烧写到目标平台的0x0地址,配置Linux下的minICom或者Windows下的超级终端,注意配置的串口及串口波特率要与U-Boot中设置的一样,按复位键或上电重启目标平台后可以从minicom或超级终端看到U-Boot在系统中运行了。

    通过以上步骤,完成了U-Boot移植的主要工作。

    3.3 uClinux内核的移植

    3.3.1 uClinux-dist源码包的准备

    从uClinux的官方网站下载uclinux-dist源码包。源码包中包含了uClinux内核、uClibc库和busybox等 uClinux下的用户应用程序,本文中下载的是uClinux-dist-20041215.tar.gz,在linux系统下解压后会生成一个 uClinux-dist目录,该目录包含了编译uClinux内核需要的所有文件。在uClinux-dist目录中包含有linux-2.2.x、 linux-2.4.x、linux-.2.6.x三个子目录,就是三种版本的uClinux内核的源码,我们的目的是把uClinux-2.6.9版本移植到目标平台上,所以我们还需要从http://www.kernel.org上下载linux-2.6.9.tar.bz2,从http: //www.uClinux.org上下载linux-2.6.9-uc0.patch,从Samsung的网站http: //www.oprenSRC.sec.samsung.com上下载补丁文件linux-2.6.9-uc0.hsc0.patch。在Linux系统下解压内核Linux-2.6.9.tar.bz2并打上补丁文件linux-2.6.9-uc0.patch和linux-2.6.9-uc0- hsc0.patch,将打上补丁的2.6.9内核改名为linux-2.6.x并替换在uClinux-dist包中的linux-2.6.x,完成移植前的准备工作。

    3.3.2 uClinux-dist源码的修改

    按照如下步骤添加S3C44B0的相关文件:

     # cp uClinux-dist/vendors/Samsung/4510b –r  uClinux-dist/vendors/Samsung/44b0,将源代码包中已经有的Samsung的4510b的文件复制一份并改名为44b0 ,这一过程也可以直接用鼠标完成;

    # cp linux-2.6.x/arch/armnommu/configs/s3c44b0x_defconfig

    vendors/Samsung/44b0/config.linux-2.6.x,该步骤是将s3c44b0x_defconfig文件复制到44b0目录下,该步骤同样可以复制、粘贴完成;

    虽然已经给linux-2.6.9内核打了补丁文件,但是我们依然需要对源代码进行修改才能顺理的编译通过,文件的修改如下:

    (1) 修改linux-2.6.x/arch/armnommu/arch/kernel/vmlinux.lds.S,添加以下内容:

    (.got)?Global offset table */
romfs_start = .;
romfs.o
romfs_end = .;

    这样修改的目的是把romfs文件系统连接到内核映象中。

      (2) 修改linux-2.6.x/arch/armnommu/kernel/setup.c, 添加变量romfs_start,romfs_end及修改

    其设置如下:
default_command_line 
extern int _stext, _text, _etext, _EDAta, _end; 
extern int romfs_start,romfs_end; 
char *from = default_command_line; 
sprintf(default_command_line, "root=/dev/ram0 initrd=0x%08lx,%ldk keePINitrd", (unsigned 
long)&romfs_start,((unsigned long)&romfs_end - (unsigned long)&romfs_start)>>10);

    (3) 修改vendors/MICetek/44b0/rc文件中 /bin/expand /etc/ramfs.img /dev/ram1;

    (4) 添加串口驱动程序,添加文件linux-2.6.x/drivers/serial/serial_s3c44b0.c和linux-2.6.x /include/asm-armnommu/arch-s3c44b0/UART.h,因为在linux-2.6.9内核中对S3C44B0的支持并不是很好,系统只是提供了一个简易的串口驱动,所以需要添加串口驱动。

    3.3.3 内核的配置与编译

    在编译内核之前需要进行配置,可以通过三种方式对内核进行配置:在uClinux-dist目录下运行make config/make menuconfig/make xconfig,其中make config是在字符界面下,make menuconfig是在字符界面下实现的菜单界面,make xconfig为图形界面,三种配置方式是一致的,xconfig界面比较友好,容易掌握,但它却没有menuconfig菜单稳定,而且在有些机器上运行不起来,本文是使用make menuconfig完成的。运行make menuconfig时, 程序会依次出现开发平台、内核、文件系统、应用程序的配置界面, 可以根据自己的需要进行配置。配置时大部分选项可以使用其缺省值,只有小部分需要用户根据需求进行选择,进行内核配置时,有3种选择,它们分别代表的含义如下:
“Y” - 将该功能编译进内核;
“N” -不将该功能编译进内核;
“M” -将该功能编译成可以在需要时动态插入到内核中的模块;

    将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响,许多功能都可以这样处理,例如网卡的支持、对FAT等文件系统的支持等。

    在配置好内核后依次执行以下命令:
make dep; make clean; make lib_ only; make user_ only; make romfs; make image; make编译完成之后,会在uClinux-dist/linux-2.6.x/下会生linux.bin,在uClinux-dist/images /下会生成linux.data、linux.text、image.bin等目标文件。在编译中可能会产生错误,需要根据错误信息进行调试修改。

    3.4 内核的下载运行

    (1) 我们将开始移植好的U-Boot的目标文件u-boot.bin通过JTAG烧写到目标硬件平台上,烧写时开始地址要从0开始,目标板上电后从0地址处运行就开始运行移植好的bootloader了,我们可以在Windows下通过超级终端或者在linux下的minICom检测目标板的串口输出;

 

    (2) 通过U-Boot的命令tftpboot来下载我们移植好的内核,tftpboot c008000 linux.bin;go c008000,通过以上两个步骤就实现了uClinux的下载运行。

    系统启动后,首先执行了bootloader,完成了硬件设备的初始化任务,然后将运行的控制权交给了uClinux内核,uClinux系统就开始运行了。

    4 结束语

    由于Linux操作系统的源码开放性及ARM微处理器的良好性能,如何将Linux系统移植到ARM平台上得到越来越多的关注。操作系统的移植是构建基于ARM微处理器的嵌入式系统的前题,将bootloader与系统内核分开进行设计能够使软件结构更加清晰,而且可以利用前者的功能,灵活的实现多种引导系统的方式。

    本论文的创新点:本文采用移植U-Boot作为系统bootloader,从而实现了uClinux-2.6内核移植。U-Boot作为一种功能强大的bootloader,适合多种平台并可以引导多种操作系统,利用其强大功能可以实现系统内核的多种下载和引导方式,掌握其移植方法很有必要,uClinux2.6内核对硬件平台的支持更好,移植过程中要注意不同硬件平台间的差别。


关键字:U-Boot  bootloader  uClinux  S3C44B0 引用地址:利用U-Boot作为系统bootloader实现uClinux向S3C44B0的移植

上一篇:ARM7 Thumb系列嵌入式处理器介绍
下一篇:ARM、FPGA与可编程模拟电路设计的单芯片技术综合应用

推荐阅读最新更新时间:2024-03-16 15:55

以STM8单片机为例,该如何实现Bootloader呢?
这次出差是为了升级程序解决Bug,用户已经将产品封装起来,无法开盖,只能使用CAN总线来更新程序,用Bootloader实现。其实就是通过上位机把.bin/hex文件以CAN通讯的方式发送给单片机并存储在规定的Flash中。这个过程与手机端更新APP类似。 以STM8单片机为例,该如何实现Bootloader呢?今天和大家分享一下。 01 什么是Bootloader Bootloader是一段用于更新自身应用软件并独立运行的代码,常被用于升级产品和修复产品bug。STM8单片机如果要下载hex文件的话需要通过STVP和STLINK来实现,单片机的引脚SWIM就是下载接口。如果产品在用户端被封装好了,无法通过SWIM来下载该
[单片机]
以STM8单片机为例,该如何实现<font color='red'>Bootloader</font>呢?
U-Boot在S3C2410上的移植
引言   U-Boot是用于初始化目标板硬件,为嵌入式操作系统提供目标板硬件配置信息,完成嵌入式操作系统装载、引导和运行的固件程序。它能够将系统的软硬件紧密衔接在一起。S3C2410是三星公司的一款基于ARM920T核的嵌入式通用处理器。本文将详细介绍U-Boot在S3C2410开发板上的移植与运行。 U-BOOT简介   U-Boot支持ARM、PowerPC等多种架构的处理器,也支持Linux、NetBSD和VxWorks等多种操作系统。它提供启动加载和下载两种工作模式。启动加载模式也称自主模式,一般是将存储在目标板Flash中的内核和文件系统的镜像装载到SDRAM中,整个过程无需用户的介入。在使用嵌入式产品时,一般工作
[嵌入式]
基于ARM7的新型嵌入式心电监护仪的研制
一、绪论 心血管疾病是目前对人类危害最大的一种疾病,而心电图是检查、诊断和预防该类疾病的主要手段和依据。由于传统的基于PC机平台的心电监护仪,价格昂贵,体积庞大,不便于移动且主要集中在大医院,而无法实时监护患者的病情,给医生和病人带来了很大的不便。近年来,随着嵌入式和网络通讯技术的飞速发展,我们研制出一种基于ARM7处理器的新型嵌入式心电监护仪,它采用Samsung公司的一款ARM7TDMI核的RISC的32位高速处理器S3C44B0X,具有成本低、体积小、可靠性高、操作简单等优点,适用于个人、中小医院和社区医疗单位,为家庭保健(HHC)和远程医疗(Telemedicine)等新兴的医疗途径提供良好的帮助与支持。 二、系统
[单片机]
基于ARM7的新型嵌入式心电监护仪的研制
STM32f103C8T6 bootloader设计
使用的是STM32f103C8T6:64Kflash,在应用程序中通过CAN把接受到的bin写到外置 flash的指定地址处。在bootloader中判断一个单独的标志位看程序是否需要升级,如果需要升级,则复制外置flash处的内容到STM32的内置flash的指定地址处。 如: bootloader地址:0x08000000UL 大小:10K——0x2800——STM32的内置flash 应用程序地址:0x08002800UL 大小:45K——0xB400——STM32的内置flash 升级信息表:0x720000UL 大小:8K——0x2000——外置flash 升级的bin文件地址:0x080124
[单片机]
基于AVR-BootLoader,通过霜蝉远程串口可实现单片机的远程升级
最近一直利用业余时间写自己的“基于AVR-BootLoader”,启发是由于一次在ourAVR论坛看到了绍子阳的bootloader,联想到公司在用AVR MCU,但每次升级程序都要花费很大的力气车马劳顿的跑到工程现场,而且很多机器还安装在国外,为了升级一次程序发费了很多的人力物力财力,加上公司的机器目前大部分都配有远程监控系统,所以本人决定写一个具有自有产权的“AVR-BootLoader”。 特别说明:本“AVR-BootLoad”软件代码属上海霜蝉版权所有,在此贡献发布,仅限于个人免费使用不得用于商业用途,本人也不保证代码的严谨性,如在升级中出现任何问题与本人无关,本人已测试过Atmega64A与Atmega128。话
[单片机]
基于AVR-<font color='red'>BootLoader</font>,通过霜蝉远程串口可实现单片机的远程升级
移植u-boot 1.1.6到TQ2440开发板-第一阶段
最近买了一个TQ2440开发板,奈何天嵌只给出了编译好的文件,没有给源码,小弟从头开始移植Uboot 移植u-boot 1.1.6到TQ2440开发板-第一阶段 主要修改、配置源代码、编译源代码 TQ2440开发板信息: CPU:S3C2440 ARM核:arm920t SDRAM:64M Nor Flash:2M Nand Flash:64M 网卡:DM9000 第一步:下载 uboot 1 . 1 . 6源码 之前都是从CSDN上下载,发现下载的都不是真正的官方发布的源码,给大家提供一个官网 ftp://ftp.denx.de/pub/u-boot 格式为u-boot-1.1.6.tar.bz
[单片机]
基于S3C2440的u-boot的移植
1 Bootloader及u-boot简介 Bootloader代码是芯片复位后进入操作系统之前执行的一段代码,主要用于完成由硬件启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境,如初始化CPU、堆栈、存储器系统等。Bootloader代码与CPU芯片的内核结构、具体型号、应用系统的配置及使用的操作系统等因素有关,其功能类似于PC机的BIOS程序。由于Bootloader和CPU及电路板的配置情况有关,因此不可能有通用的bootloader ,开发时需要用户根据具体情况进行移植。嵌入式Linux系统中常用的bootloader有armboot、redboot、blob、u-boot 等,其中u-boot是当前比较流行,功能
[单片机]
车规MCU的启动加载程序是什么
启动加载程序(bootloader) 车规MCU的启动加载程序(bootloader)是一种用于在汽车电子控制单元(ECU)上加载和更新应用程序的软件。它具有以下主要功能和实现要点: 引导加载:启动加载程序负责在MCU上启动和加载应用程序。它通过读取存储器中的引导加载代码,并将其加载到MCU的内部存储器中执行,从而启动应用程序。 存储器管理:启动加载程序需要管理存储器的分区和使用。它负责将应用程序加载到正确的存储器区域,并确保存储器的正确初始化和擦除。 通信接口:启动加载程序通常通过车辆网络(如CAN和LIN总线)或其他通信接口与外部设备(如诊断工具或服务器)进行通信。它使用这些接口来接收新的应用程序固件,并将其写入MCU的存
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved