一种移植嵌入式系统并在SD卡启动的方法与流程

文档序号:12664718阅读:462来源:国知局

本发明涉及嵌入式操作系统领域,特别是涉及嵌入式Linux在特定硬件平台上的移植和启动。



背景技术:

与其他嵌入式操作系统相比,嵌入式Linux具有源码开放、高稳定性、开发成本低、硬件支持多样、易移植性、开发周期短等特点,被学术界、商业界、工业界广泛关注。在嵌入式应用方面,Linux 2.6新版本内核提供更强有力的支持,比如对中断特性的提升、响应时间的缩短、内核抢占特性的支持、高效调度算法的引入等等,特别是实时特性的提升,使得其在嵌入式系统中得到更为广泛的应用。

SoPC(System On a Programmable Chip,可编程片上系统)作为一种特殊的嵌入式微处理器系统,融合了SoC和FPGA各自的优点,并具备软硬件在系统可编程、可裁减、可扩充、可升级的功能,已逐渐成为一个新兴的技术方向。SoPC的核心是在FPGA上实现的嵌入式微处理器核,而如何针对特定的微处理器选择合适的嵌入式操作系统是SoPC开发的难点之一。



技术实现要素:

本发明的目的在于提出一种移植嵌入式系统并在SD卡启动的方法,实现Linux中自定义硬件设备驱动的添加、系统配置和SD卡的启动。

本发明解决其技术问题采用的技术方案如下:

一种移植嵌入式系统并在SD卡启动的方法,包括以下步骤:

1)建立交叉编译环境

采用交叉编译的方法,在宿主机上对内核和应用程序进行编译,生成目标机处理器可执行的二进制位流文件,将此文件下载到目标机运行;针对软核微处理器建立交叉编译器,运行source./settings.sh脚本,自动建立交叉编译环境;

2)建立硬件平台

为每个应用工程建立一个文件夹,保存该工程的硬件配置,选择相应的硬件平台,内核就会读取该工程文件夹下的配置文件。使用Linux-newplatform命令建立硬件平台,运行make menuconfig命令,在Vendor/Product Selction选项中选择该硬件平台,将在EDK下生成的配置文件转换成Linux可以识别的格式,在工程文件夹下运行Linux-copy-autoconfig命令,自动完成格式转换,并拷贝配置文件到已选择的工程文件夹下;

3)添加自定义设备驱动

将自定义IP核添加到Linux配置中。主要步骤如下:

首先使设备初始化函数ddc.c与内核配置相关联;

然后使设备驱动程序ddc_adapter.c与内核配置相关联;

最后修改设备驱动程序所在目录下的Kconfig文件,使配置内核时可以选择该设备驱动,由此在配置Linux内核时选择自定义的设备驱动;

4)配置Linux内核

运行图形编辑工具make menuconfig命令,对内核和系统环境进行配置。

在内核配置的设备驱动选项中,选择与系统的硬件配置一致的硬件设备驱动,具体配置以下几项:

[Block devices]块设备选择;

[Misc device]混杂设备选择;

[Network device support]网络设备选择;

[Character devices]字符设备选择;

挂载DOS文件系统的SD卡,自动进入系统环境配置,包括以下几项:

[System Settings]系统设置;

[Core Applications]内核应用;

[Network Applications]网络应用;

[Miscellaneous Applications]混杂应用;

[BusyBox]:配置系统内核中的命令;

依次执行命令:make dep,make clean,make all,建立文件依赖关系,清除旧文件,编译内核,生成内核image;

5)修改Linux配置文件

将上述步骤生成的image文件下载到SoPC中,正常登陆Linux系统,修改inittab文件,直接启动shell;自动运行应用程序:修改rc文件,在此添加应用程序的命令,启动后运行该命令;去掉customize Vendor/User Setting中Core Applications下的agetty选项和init选项,重新编译内核,使修改写入Linux的文件系统中;

6)使用SD卡启动Linux

将硬件比特流文件和image.elf制作成ACE文件,复制到SD卡中,配置SD卡启动Linux,将SD卡分区和格式化,然后挂载此文件系统,步骤如下:

(1)将SD卡挂载到Linux系统中,运行命令fdisk/dev/sda把SD卡分成3个区,第一分区存放system.ace文件;第二分区为Linux Swap交换分区,第三分区存放根文件系统;

(2)Linux下格式化第三分区为ext2文件系统,运行命令:mke2fs/dev/sda3;在/etc/fstab下输入命令:/dev/sda3/mnt/rootfs auto defaults,user,noauto 0 0;挂载该目录:mount/mnt/rootfs,把根文件系统rootfs拷贝到SD卡的该分区上;

(3)Windows下格式化第一分区为FAT32文件系统,把system.ace复制到这个分区;

(4)Linux下格式化第二分区为交换分区,运行命令:mkswap/dev/sda2。

(5)就绪后,插入SD卡,开启电源,从SD卡启动Linux。

本发明与背景技术相比,具有的以下有益效果:实现了Linux在软核处理器的移植,并成功实现Linux中自定义硬件设备驱动的添加、系统配置和SD卡的启动方案。通过移植Linux,本文开发的SoPC可以直接用于实际工程;该嵌入式操作系统的移植快速、简单,而且由于其基于Linux内核,从而保证了系统的稳定性。

具体实施方式

下面进一步描述本发明的优选实施例。

在SoPC硬件系统构建完成后,针对此结构配置操作系统的内核,具体步骤如下:

1.建立交叉编译环境

嵌入式系统开发一般采用交叉编译的方法,即在宿主机上对内核和应用程序进行编译,生成目标机处理器可执行的二进制位流文件,将此文件下载到目标机运行。Linux针对软核微处理器建立交叉编译器,运行source./settings.sh脚本,系统会自动建立交叉编译环境。

2.建立硬件平台

为每个应用工程建立一个文件夹,保存该工程的硬件配置。在移植Linux时,只需选择相应的硬件平台,内核就会读取该工程文件夹下的配置文件。使用Linux-newplatform命令建立硬件平台,如果使用MMU(虚拟内存管理单元),则在此命令后添加-m选项。硬件平台建立起来后,运行make menuconfig命令,在Vendor/Product Selction选项中选择该硬件平台。此时,还需将在EDK下生成的配置文件转换成Linux可以识别的格式。在工程文件夹下运行Linux-copy-autoconfig命令,自动完成格式转换,并拷贝配置文件到已选择的工程文件夹下。

3.添加自定义设备驱动

本系统自定义了IP核,因此必须开发驱动程序并将其添加到Linux配置中。添加自定义设备驱动主要步骤如下:

首先在平台配置目录下Makefile文件中添加语句:

platobj-$(CONFIG_ETLOGIX_DDC)+=ddc.o

$(obj)/ddc.o:.config,

使设备初始化函数ddc.c与内核配置相关联;

然后在驱动程序所在目录下的Makefile文件中添加语句:

obj-$(CONFIG_ETLOGIX_DDC)+=ddc_adapter.o,

使设备驱动程序ddc_adapter.c与内核配置相关联;

最后修改设备驱动程序所在目录下的Kconfig文件,使配置内核时可以选择该设备驱动,添加以下语句:

config ETLOGIX_DDC//内核配置目录中所显示的选项

bool"ETLogix DDC Driver"//该配置选项为布尔型,即有选择和不选择两种状态

depends on MICROBLAZE//该配置选项的依赖关系

通过以上文件的修改,就可以在配置Linux内核时选择自定义的设备驱动。

4.配置Linux内核

Linux内核的可裁剪性使我们能够方便地将内核通过修改、裁剪、编译移植到一个嵌入式系统中。运行图形编辑工具make menuconfig命令,对内核和系统环境进行配置。

在内核配置的设备驱动选项中,一定要选择与系统的硬件配置一致的硬件设备驱动,否则内核编译时就会出错。针对本系统的硬件配置,主要配置以下几项驱动:

[Block devices]块设备选择Xilinx SystemACE support;

[Misc device]混杂设备选择FSL FIFO driver,然后进入FSL Channel Selection,选择FIFO on FSL0;选择自添加设备驱动ETLogix DDC101 Driver;

[Network device support]网络设备选择Ethernet(1000Mbit)子菜单中的Xilinx 10/100/1000LL TEMAC support;

[Character devices]字符设备选择Serial drivers子菜单中的8250/16550and compatible serial support和Console on 8250/16550and compatible serial port;

文件系统选项中,默认选择了ext2、romfs和cramfs文件系统,其他文件系统可以根据需要自行选择。本系统需要挂载DOS文件系统的SD卡,因此进行以下配置:

[DOS/FAT/NT Filesystems]选择MSDOS fs support;

[Native Language Support],选择Codepage 437(United States,Canada);内核配置中的其它的配置可以根据目标系统的不同灵活配置,配置完成后保存退出,自动进入系统环境配置菜单。

系统环境配置是对Linux的属性、命令进行配置,主要有以下几个选项:

[System Settings]系统设置:配置系统的网络地址、默认用户名、默认登陆密码和所用根文件系统等内容;

[Core Applications]内核应用:主要配置内核的常用特性;

[Network Applications]网络应用:配置网络应用时的相关命令;

[Miscellaneous Applications]混杂应用:配置系统内核中的命令;

[BusyBox]:配置系统内核中的命令。

Linux已经设置好了编译规则,因此配置完成后,依次执行命令:make dep,make clean,make all,建立文件依赖关系,清除旧的文件,编译内核,生成内核image。

2.5修改Linux配置文件

将上述步骤生成的image文件下载到SoPC中即可正常登陆Linux系统,如果应用工程有特殊要求,可以修改所生成文件系统中的文件。本系统需SoPC上电后自动登录系统,并运行开发的应用程序,因此,进行如下配置:修改inittab文件,将ttyS0:vt100:后面修改为/bin/sh,这样在内核启动时,就不需要输入系统的用户名和密码直接启动shell;自动运行应用程序:修改rc文件,在此添加应用程序的命令,Linux启动后就会运行该命令。修改后,还需去掉customize Vendor/User Setting中Core Applications下的agetty选项和init选项,否则,在重新编译内核时将覆盖修改的内容。修改完配置文件后,要重新编译内核,使修改写入Linux的文件系统中。

经过编译的Linux内核image文件主要有:image.bin、image.elf、image.ub。根据选择image文件的不同,Linux有四种启动方案:XMD下载启动、TFTP网络下载启动、FLASH启动和SD卡启动。其中,XMD和TFTP网络下载启动方案,在每次系统上电后都必须重新下载,适用于系统调试;FLASH启动方案在系统上电后自动从FLASH中读取配置文件,但FLASH烧写速度较慢,更改系统配置较为不便;因此,本系统选用SD卡启动方案。

使用SD卡启动Linux,是将硬件比特流文件和image.elf制作成ACE文件,复制到SD卡中,配置SD卡启动Linux。制作ACE文件,在EDK Shell窗口运行命令:

xmd-tcl genace.tcl(命令工具)

-jprog-board ml402(所需的开发板)

-hw implementation/download.bit(生成的bitstream文件)

-elf image.elf(编译linux内核生成的可执行网表文件)

-ace system.ace(需生成的ACE文件)

成功后,适合于ML-402开发板的ACE文件就生成了。

Linux运行需要根文件系统的支持,它是Linux系统的根本所在,启动时必须加载以支持系统的运行。而image.elf中不包含文件系统,因此,使用SD卡启动时必须手动加载文件系统。在编译Linux内核时,已经生成了以romfs文件夹为名称的文件系统,所以只需将SD卡分区和格式化,然后挂载此文件系统,步骤如下:

(1)将SD卡挂载到Linux系统中,运行命令fdisk/dev/sda把SD卡分成3个区,第一分区存放system.ace文件;第二分区为Linux Swap交换分区,第三分区存放根文件系统。

(2)Linux下格式化第三分区为ext2文件系统,运行命令:mke2fs/dev/sda3;在/etc/fstab下输入命令:/dev/sda3/mnt/rootfs auto defaults,user,noauto 0 0(把设备sda3挂在/mnt/rootfs文件下,文件系统为默认的ext2,普通用户,能挂载,不转储,不在启动时扫描文件系统);挂载该目录:mount/mnt/rootfs,这样就可以把根文件系统rootfs拷贝到SD卡的该分区上。

(3)Windows下格式化第一分区为FAT32文件系统,把system.ace复制到这个分区。

(4)Linux下格式化第二分区为交换分区,运行命令:mkswap/dev/sda2。

准备就绪后,插入SD卡,开启电源,就可以从SD卡启动Linux。

本文介绍了一种用于软核处理器的嵌入式Linux操作系统,并详细讨论了其内核配置和启动方案。通过移植Linux,本文开发的SoPC可以直接用于实际工程;该嵌入式操作系统的移植快速、简单,而且由于其基于Linux内核,从而保证了系统的稳定性。因此,在SoPC应用日益复杂的背景下具有很大意义和良好的应用前景。

应该理解,上述实施例仅仅是说明性的,本发明并不局限于该特定实施例,在不脱离本发明精神和范围的情况下,可以对本发明做出各种各样的改进和变型。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1