当前位置:首页 > 单片机 > 单片机
[导读]1 引言S3C44B0是Samsung公司推出的一款为手持设备或其他通用设备开发的32位处理器,它基于ARM7TDMI核,没有内存管理单元(MMU)。在采用无MMU的微处理器的嵌入式系统中广泛采用的就是uClinux系统,作为linux的衍生系

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机的并口连接支持在线调试与程序烧写。


图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内核对硬件平台的支持更好,移植过程中要注意不同硬件平台间的差别。

参考文献:
[1] 苏义鑫,王子毅,张素文.uClinux在嵌入式系统中的移植研究[J].微计算机信息,2006, 11-2:58-60。                                                                               
[2] 李岩,荣盘.基于S3C44B0嵌入式uClinux系统原理及应用[M].北京:清华大学出版社.2005。
[3] 孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发指南[M].北京:电子工业出版社. 2005.2。
[4] 王田苗.嵌入式系统设计与实例开发[M].北京:清华大学出版社.2003。
[5] 常银霞,张振东,唐继英.利用Bootloader实现uClinuxS3C44B0上的移植[J].河北工业大学学报.Vol.34 No.2.2005.4。
[6] http://www.linuxforum.com。
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭