杨延庆
(西安医学院 信息技术处,陕西 西安710021)
计算机技术的飞速发展使得计算机硬件的性能不断提高,计算机由原来的大体积、单一的性能逐渐变得体积越来越小,集成度越来越高,性能越来越强.硬件复杂程度的增加对软件的设计也提出了新的要求.计算机软件的开发成本上升、周期增大,嵌入式系统性能越来越高,在应用中充分发挥了硬件性能的同时降低开发成本和开发难度.
解决硬件与软件矛盾的做法是引入嵌入式操作系统.嵌入式操作系统是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动程序、系统内核、设备驱动接口、通信协议、图形界面及标准化浏览器等[1-2].嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调开发活动,通过装卸某些模块来达到系统所要求的功能[3-5].由于微内核与机器特征相关的代码隔离在微内核的底层,因此在移植过程中只需修改内核中的代码,嵌入式操作系统就可移植到不同的硬件平台.本文在构建基于8086CPU的单芯片系统设计的基础上研究将Linux操作系统移植到目标平台.
单芯片计算机是将传统PC的CPU、内存、显卡等集成到单个芯片中.单芯片计算机与传统PC相比具有体积小、质量好、能耗底等优点,同时系统的性能也有了很大的改善.促进计算机的迅速普及.
单芯片计算机的设计是一个基于某一型号CPU及其外围I/O接口的SoC设计过程.本文选择标准的Intel 8086CPU.
8086CPU芯片有最小模式与最大模式两种工作模式.所谓最小模式,是指系统中只有一个8086微处理器,在这种情况下,所有的总线控制信号,都直接由8086CPU产生,系统的总线控制逻辑电路被减到最少,该模式适用于规模较小的微机应用系统.本文提及的8086CPU单芯片计算机采用最小工作模式进行设计.8086CPU单芯片计算机系统由硬件系统和软件系统两部分组成.
图1 8086单芯片计算机硬件系统结构Fig.1 The 8086single chip computer hardware system structure
(1)硬件系统:硬件系统包括CPU子系统、接口部件子系统和存储器子系统.CPU子系统包括8086CPU、数据收发控制器、地址锁存器和存储器译码电路等.接口部件子系统都挂载在Wishbone总线上,包括如下接口模块:8254定时器/计数器、8255通用I/O接口、VGA显示接口等.存储器子系统包括RAM与ROM.搭建的8086单芯片计算机硬件系统如图1所示.
(2)软件系统包括操作系统和在此平台上的应用软件.Linux操作系统就是在上述硬件系统的基础上进行移植的软件系统.通过对开源的Linux操作系统内核进行裁剪来满足用户的需求.应用软件指的是在操作系统移植成功以后,为满足用户的一些需求在8086单芯片计算机上安装的一些应用软件及进行的一系列的操作.
嵌人式系统开发采用的是宿主机-目标机模式,宿主机是PC机,宿主机上装有操作系统 Windows XP,在Windows XP系统中装有虚拟机vmware并在vmware上装RedHatLinux5企业版;目标机采用Intel公司的推出的16位标准的Intel8086微处理器,有29 000只晶体管,速度可分为5MHz,8MHz,10MHz,16位的内部结构,16位双向数据信号线,20位地址信号线,可寻址1M字节存储单元,可利用第16位的地址总线来进行I/O端口寻址,可寻址64K个I/O端口,单一的5V电源.嵌入式Linux的载入通常可以通过在宿主机上运行专门的Flash烧写工具来实现,运行该软件后,宿主机能直接访问目标板上的Flash器件.
本文所提到的8086单芯片计算机系统就是将Intel8086微处理器及其外围设备运用硬件描述语言VHDL"软化",实现8086微处理器的硬件功能.并在Xilinx公司推出的嵌入式系统开发板Virtex-ⅡPRO上实现了功能演示.
Linux内核移植前首先建立交叉编译器编译内核文件及应用程序[6-8],这是一个比较复杂的过程同时也是相当重要的过程.所谓交叉编译就是在宿主机上进行编译[9],生成目标机Intel8086处理器可执行的二进制位流文件.到网上下载交叉编译工具链Crosstool-ng-1.5.3.因为Crosstool-ng能建立一个新的工具链以支持对最新kernel的编译,然后在文件crosstool-ng-1.5.3中选择适合目标板的gcc编译器和函数库glibc,选择下面的行:
在已经安装好的交叉编译工具Crosstool-ng的基础上对内核进行编译,编译内核整体上分为3个步骤:1、配置内核(就是确定哪些功能要保留在编译好的内核中,哪些功能要从内核中删除),生成一个编译配置文件.config.2、编译内核.3、安装内核.具体步骤如下:
图2 内核配置图形化界面Fig.2 Kernel configuration graphical interface
该处也可以用make zImage,但必须确保所编译的新内核在640K之下.新内核编译成功之后,这些指令会在/usr/src/linux/arch/X86/boot/下生成bzImage.elf内核文件.
嵌入式系统的使用还需要根文件系统的支持,它是Linux系统的根本所在,启动时必须加载以支持系统的运行.一般包括以下目录内容:/bin(包含了应用程序);/boot(包含了内核和启动文件);/dev(设备文件目录);/proc(proc文件系统目录);/etc(系统配置文件的目录);/sbin(系统程序的目录);/lib(共享函数库的目录);/mnt(装载其它磁盘节点的目录);/usr(附加应用程序的目录),同时还要提供一些实用的基本工具,像ls、chmod、cd等.
有两种基本的根文件系统制作方法,将system.ace文件放在压缩flash卡进行有盘引导的本地文件系统LFS(local file system);通过网络进行的无盘引导即网络文件系统NFS(network file system).本文使用第一种方法,采用BusyBox制作一个去构件根文件系统,BusyBox具有shell的功能,它能提供系统所需要的大部分工具,包括编辑工具、网络工具、模块加载工具、压缩解压缩工具、查找工具、帐号密码管理工具和进程相关工具等.其体积很小,这就使得我们能将根文件系统以及Linux内核存放在64KB的flash卡上.
下载并编译BusyBox,Klingauf[7]详细地介绍如何使用BusyBox制作根文件系统,按照其步骤只要修改mkrootfs.sh脚本的几个地方就可生成根文件系统,因此节省了许多时间.修改如下:
还要改变两个文件权限,如下:
将根文件系统拷贝到CF卡上.步骤如下:
(1)在Linux的/etc/fstab中输入:
文件/etc/fstab下存放的是系统文件相关信息.如果该文件设置正确,则能够通过"mount/directoryname"命令加载文件系统,不同的文件系统对应不同的行.“noauto”意思是当使用“mount-a”命令时文件系统不加载,“user”指的是允许一般用户挂载文件系统,两个零表示文件系统不需要转储、不需要启动时被扫描.
运行命令:
表示对设备进行逻辑上的分区,将CF卡分成3个区,第一个区格式为FAT16,大小保证能够放下system.ace文件就可以,第二个区为Linux Swap交换分区,第三个区用来存放根文件系统.
(2)在网站上下载mkdosfs工具,在windows操作系统下格式化CF卡上第一个区,然后运行命令:
将system.ace拷贝第一个分区上准备引导.
(3)在Linux操作系统下格式化第二个分区,运行命令:
一切准备就绪,将bzImage.elf和文件系统system.ace文件拷贝到CF卡中第一个分区,本地引导Linux,载入运行,在开发板上看到Linux的提示符后,移植就成功了.
(1)结合嵌入式Linux操作系统和8086单芯片计算机的特点,解决了Linux操作系统移植的关键技术,移植过程对于其他类型微处理器上Linux的移植具有参考价值.
(2)移植为构建完整的8086单芯片计算机系统提供了系统软件,为应用软件的运行提供了操作系统平台.
[1]孙璐,陶晶,张勇智,等.基于8086CPU的单芯片计算机系统的设计[J].中国集成电路,2010(9):45-49.SUN Lu,TAO Jing,ZHANG Yongzhi,et al.The design of the single chip computer system based on 8086CPU[J].China Integrated Circuit,2010(9):45-49.
[2]李艳芳,唐云.EMU8086和 DEBUG在《微机原理》课程教学中的应用[J].湖南科技学院学报,2013,34(8):41-43.LI Yanfang,TANG Yun.EMU8086and DEBUG in the application of the course“microcomputer principle”teaching[J].Journal of Hunan University of Science and Engineering,2013,34(8):41-43.
[3]SAVITZKY E,STEPHEN R.Real-time microprocessor systems[M].NewYork:Van Nostrand Reinhold Company,2012:35-60.
[4]王亚刚.嵌入式Bootloader机制的分析与移植[J].计算机工程,2010,36(6):267-269.WANG Yagang.Embedded Bootloader mechanism analysis and transplantation[J].Computer Engineering,2010,36(6):267-269.
[5]陈国强.嵌入式Linux操作系统的研究[J].计算机光盘软件与应用,2014,12(1):144-145.CHEN Guoqiang.Research of embedded Linux operating system[J].Computer CD Software and Applications,2014,12(1):144-145.
[6]李晓宁,李晓峰.基于嵌入式Linux操作系统的研究[J].长春师范学院学报,2010,22(2):93-96.LI Xiaoning,LI Xiaofeng.Based on the research of embedded Linux operating system[J].Journal of Changchun Normal University,2010,22(2):93-96.
[7]刘文峰,李程远,李善平.嵌入式Linux操作系统的研究[J].浙江大学学报:理学版,2010,14(4):112-113.LIU Wenfeng,LI Chengyuan,LI Shanping.Research of embedded Linux operating system[J].Journal of Zhejiang University:Science Edition,2010,14(4):112-113.
[8]武苗苗,郭雯雯.嵌入式Linux操作系统通信管理的设计研究[J].电子技术与软件工程,2013,12(10):102-103.WU Miaomiao,GUO Wenwen.Communication management of embedded Linux operating system design research[J].Electronic Technology and Software Engineering,2013,12(10):102-103.
[9]Kernel org.The public site for downloading linux kernel archives[EB/OL].(2011-02-17)[2015-01-10].http://www.klingauf.de/v2p/index.phtml.
[10]武杰.基于 ARM9的嵌入式Linux移植[J].自动化技术与应用,2014(3):59-62.WU Jie.Based on ARM9embedded Linux transplantation[J].Techniques of Automation and Application,2014(3):59-62.
[11]韩守谦,裴海龙,王清阳.基于 Xenomai实时嵌入式Linux操作系统的构建[J].计算机工程与设计,2011,35(1):123-124.HAN Shouqian,PEI Hailong,WANG Qingyang.Build based on Xenomai real-time embedded Linux operating system[J].Computer Engineering and Design,2011,35(1):123-124.