时间:2023-05-30 10:17:22
开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇linux系统,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。
1、可以在网上下一个虚拟光驱(例VDM),然后打开虚拟光驱点加载,然后选择你的光盘路径。然后把光驱最小化,记住不要关掉,然后打开我的电脑,你的系统盘的下面就会多出一个虚拟盘,双击它,然后安它的提示一步一步安就可以了安装时不要选择和linux同分区就可以了。
2、也可以把网上下载下来的ISO包解压后,选择自定义安装,只要不安装在你原本来系统盘就可了.安装的时候选择保留旧系统,并将Windows7安装到非linux系统安装分区,安装好以后,开机时就会有个系统选择菜单,你可以自己选择进入哪个系统。
(来源:文章屋网 )
// 读取Table.DAT
{
FILE *tab = fopen(TABLE_FILE, "r") ;
// 打开文件
int count = fread(Tab, sizeof(int), TAB_SIZE, tab) ;
fflush(tab) ;
// 刷新文件流
for (int i=0; i
if ( Tab[i] != -1 && Tab[i+1] != -1 )
Tab[i+1] = Tab[i+1] + Tab[i] ;
else
break ;
return TRUE ;
}
int LoadPack()
// 加载数据包
{
int i ;
int load_packs
= 0 ;
FILE *pack = fopen(PACK_FILE, "r") ;
for (i = 0; i < BUF_COUNT; i++)
{
if ( Tab[to_be_load+i] != -1 && Tab[to_be_load+i+1] != -1 )
{
int size = Tab[to_be_load+i+1] - Tab[to_be_load+i] ;
int offset = Tab[to_be_load+i] ;
if ( fread(buf+i, size, 1, pack) != 1 )
{
printf("Read error...\n\n") ;
exit(1) ;
}
load_packs ++ ;
// 更新变量
}
else
{
/* do nothing */
}
}
fflush(pack) ;
// 刷新数据流
to_be_load += load_packs ;
// 更新变量
return load_packs ;
// 返回读取的数目
}
3.4.2 系统中的buffer
在现实中的很多系统中,buffer是很重要的一种思想,为的就是减少读取外部存储的次数,延长设备的使用寿命。Buffer在计算机系统中,应用是很广泛的,例如,在硬盘和内存之间存在一层缓冲区,在CPU和内存之间同样也存在一层缓冲区,这层缓冲区通常被称作Cache。
在本系统中,也同样利用了Buffer思想,有着传统意义上的原因,当然还考虑到用户操作时的特殊性,系统的Buffer思想描述如下:
l
在任意时刻,Buffer内最多存储100个Package数据
l
刚开始,加载pack0 ~ pack99共计100个package,当要查看pack100时,则采取的方法是:保留旧的50个package, 加载新的50个package,则package编号变为:pack50 ~ pack149,这样操作的原因是为了用户的方便,因为用户经常会查看某个报文附近的几个报文。
初始状态下,假设系统已经加载了编号为0到99的数据包,如图2.7所示:
图2.7
加载前缓冲区内容
在某一时刻,假设用户想查看编号为100的数据包,则需要重新加载,重新加载后的数据包如图2.8所示:
图2.8
加载后缓冲区内容
使用此种Buffer思想,用户操作的方便性即体现在这个方面,在对某条报文进行研究时,会经常查看它的临近报文,使用此种机制,那么便不会不断的对要查看的临近报文进行加载,减少了读取硬盘的次数。
3.4.3 系统的显示问题
在控制台上,要想建造一个好的用户操作界面,是一件比较难的事情,根据我的体验,linux下著名的Sniffer工具tcpdump的操作界面也不够友好,普通用户很难操作。在window环境下的Sniffer工具Ethereal界面比较美观,方便操作,所以,建造一个好的用户操作界面成为我此次毕设的攻克重点。
本系统的显示分为两种显示模式:“detail”模式 和 “simple”模式,“detail”模式意为“详细显示模式”,“simple”模式意为“简单显示模式”。
在“detail”模式下,每个包得到尽可能详细的解析,解析包的每一层信息,示意如图2.9:
图2.9
详细显示模式
根据上图显示的信息,可以得知此包是一个ICMP Package,具体内容属于ping Reply,更详细得知是本主机ping本主机的一个数据包。
“simple”模式意为简单模式,所谓简单模式就是对每个Package尽可能的用一句话来描述,虽然尽可能的简短,但是一定要包含以下信息:
l
Package的类型
l
Package的作用
这种模式的重要作用是在用户对包进行检测和测量时,通常会查看相邻的几个Package,这样的模式方便用户进行“查看上一个Package”和“查看下一个Package”,只要用户在这种模式下按“N”或者“n”就可以查看下一个package,只要按“L”或“l”键就可以查看上一个Package。
“simple”模式的示意如图2.10所示:
图2.10
简单显示模式
从图中可以看出,当前正在查看的包用“蓝色”的线条标出,方面用户的操作,当用户向上或者向下进行选择时,此蓝色线条也同样会向上或向下运动,这样做的原因是是的系统显示具有动态效果。
“detail”模式的显示比较简单,只要逐层进行解析就可以了,下面我们主要讨论下“simple”模式下的显示算法。
在“simple”模式下,当前控制台最多可以显示20个Package,主要是由函数List20Packages函数实现的。什么时候应该对Package标上蓝色的线条,以下代码即说明此问题:
if ( i == p_recorder % 20 )
// if the package is the current
printf(COLOR_START) ;
// color_start
无论示在简单显示模式还是在详细显示模式下,均支持以下三种操作:
向上操作(Prev) ----- 查看上一条报文
向下操作(Next) ----- 查看下一条报文
任意操作(Goto) ----- 查看任一条报文
第四章
Sniffer其它相关
4.1 文怎样获取一个数据包?
4.1.1 Libpcap方法
Libpcap 是由洛仑兹伯克利国家实验室编写的Linux 平台下的网络数据包捕获函数库,是一种与系统无关,用于访问数据链路层,是一个独立于系统接口的用户级捕包函数据库,为底层的网络数据提供了可移植框架,它的应用包括网络统计、安全监听、网络调试、性能测量、入侵检测、口令拦截等。Libpcap 可以在绝大多数类Unix 平台下工作,绝大多数的现代操作系统都提供了对底层网络数据包捕获的机制,在捕获机制之上可以开发网络监控应用软件。采用Libpcap 实施网络数据包捕获时,将要用到一个重要的函数pcap_open_live(),它的函数原型是:pcap_t * pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebuf),其中,如果device 为NULL 或any,则对所有接口捕获,snaplen 代表用户期望的捕获数据包最大长度,promisc 代表设置接口为混杂模式,捕获所有到达接口的数据包,但只有在设备给定的情况下才有意义,to_ms 代表函数超时返回的时间。
编程要点如下:
l
查找可以捕获数据包的设备
device = pcap_lookupdev(errbuf);
l
创建捕获句柄,准备进行捕获
p =pcap_open_live(device, 8000, 1, 500, errbuf);
l
如果用户设置了过滤条件,则编译和安装过滤代码
pcap_compile(p, &fcode, filter_string, 0, netmask);
pcap_setfilter(p, &fcode);
l
进入循环,反复捕获数据包
for( ; ; )
while((ptr = (char *)(pcap_next(p, &hdr))) == NULL);
l
对捕获的数据进行类型转换,转化成以太数据包类型
eth = (struct libnet_ethernet_hdr *)ptr;
l
对以太头部进行分析,判断所包含的数据包类型,做进一步的处理
if(eth->ether_type == ntohs(ETHERTYPE_IP))
if(eth->ether_type == ntohs(ETHERTYPE_ARP))
l
关闭捕获句柄
pcap_close(p);
4.1.2 Socket方法
在Linux 下编写网络包捕获程序,比较简单的方法是在超级用户模式下,利用类型为SOCK_PACKET 的套接口(socket函数)来捕获链路帧。Linux SOCK_PACKET 编程要点如下:
l
设置套接口以捕获链路帧:在设置套接口之前,需要引用如下文件:
#include
#include
#include
#include
调用socket 函数的原型是:int socket(int domain, int type,int protocol);
本函数涉及3 个输入参数:domain 参数表示所使用的协议族;type 参数表示套接口的类型;protocol 参数表示所使用的协议族中某个特定的协议。如果函数调用成功,套接口的描述符(非负整数) 就作为函数的返回值,假如返回值为-1,就表明有错误发生。使用socket 函数捕获链路层数据帧,domain参数应指定为AF_INET 协议族,表示采用Internet 协议族;type参数指定为SOCK_PACKET,表示获取链路层数据,进而分析各层的协议数据单元;而protocol 参数采用htons(0x0003),表示可以截取所有类型的数据帧。这里htons 函数用于短整数的字节顺序转换。计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet 上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet 上传输数据时就需要进行转换,否则就会出现数据不一致。在捕获数据包时socket 函数调用形式为:
int fd;
// fd 是套接口的描述符
fd=socket(AF_INET, SOCK_PACKET, htons(0x0003));
l
设置网卡工作模式:要使建立的套接口能够真正捕获到同一网段其它站点的数据,还必须设置网卡工作于“混杂”模式,可以使用ioctl 函数,原型如下:
int ioctl(int d, int request,&ifr),ioctl 系统调用用于对套接口、网卡等软硬件设施进行底层控制,实际的操作来自各个设备自己提供的ioctl 接口。设置网卡于“混杂”方式的Linux C 程序段如下:
struct ifreq ifr;
strcpy(ifr.ifr_name, dev);
//(char *)dev 标识设备名,如:eth0
i=ioctl(fd,SIOCGIFFLAGS,&ifr); // 表示要求取出工作方式
if(i
{
close(fd);
perror("can't get flags\n");
exit(0);
}
ifr.ifr_flags |= IFF_PROMISC;
//在标志中加入“混杂”方式
i=ioctl(fd,SIOCSIFFLAGS,&ifr);
// 表示要求设定工作方式
if(i
{
perror("can't set promiscuous\n");
exit(0);
}
l
从套接口读取链路帧:套接口建立以后,就可以从中循环地读取链路层数据帧。因此,还需要建立数据帧的缓冲区,并把帧头结构的指针指向这一缓冲区的首地址:
char ep[ETH_FRAME_LEN]; struct ethhdr *eh; int fl;
eh=(struct ethhdr *)ep;
// 指向帧头
fl0 = read(fd, (etherpacket *)ep, sizeof(ep)) ;
//fl0 为截取的数据帧帧长
这里帧头结构类型ethhdr 在/usr/include/linux/if_ether.h 中
定义:struct ethhdr {unsigned char h_dest [ETH_ALEN]; //目标MAC 地址
unsigned char h_source[ETH_ALEN];
`
//源MAC 地址
unsigned short h_proto;
//帧中数据协议类型代码
}
基于上述定义,一旦ep 读入帧中数据,就可以通过eh->h_dest、eh->h_source、eh->h_proto 获取帧首部信息。
4.2 怎样解析一个报文?
无论采用Lipcap 方法,还是采用SOCK 方法,都可获得以太网帧,由于在以太网帧首部中含有协议类型字段,所以可进一步实现上层协议包的首部提取,为篇幅起见,本处仅对Socket方法获得帧为例,介绍TCP/IP 首部的提取的一般方法,以便今后作进一步的数据分析与处理。
IP 报头首部提取
根据h_proto 的值,可以确定帧数据将交由上层何种协议处理,常见的h_proto 值与协议的对应关系有:
0x0800:IP协议;
0x0806:ARP 协议;
0x8035:RARP 协议。
因此,一旦捕获的帧中h_proto 的取值为0x800,将类型为iphdr 的结构指针指向帧头后面负载数据的起始位置,则IP 信包首部的数据结构将一览无余。以下程序段表明这一定位过程:
char ep[ETH_FRAME_LEN];
struct ethhdr * eh;
struct iphdr *ip;
int fl;
eh=(struct ethhdr *)ep;
// eh 指向帧头
ip=(struct iphdr *)((unsigned long)ep + ETH_HLEN);
// ETH_HLEN为帧长
fl1=read(fd, (struct erhhdr *)ep, sizeof(ep));
//fl1为捕获的数据帧长
printf("saddr:%x =>daddr:%x\n",ip->saddr, ip->daddr); //取源和目标IP 地址
TCP 报文段首部提取
在IP 协议首部中包含协议数据单元类型标识域:_u8 protocol;这一标识域的常见取值及其协议对应关系如下:
1:ICMP;
6:TCP;
17:UDP。
因此,如果IP 报头的协议域取值为6,那么紧跟在IP 报头之后就是TCP 报头。IP 报头的长度可以通过ihl 域取得。这样,假如缓冲数组ep 存放捕获到的以太网数据帧,iph 是指向其中IP 基本报头结构的指针,而tcph 是指向TCP 报头结构的指针,那么,定位tcph=(struct tcphdr *)(((unsignedlong)ep)+ETH_HLEN+ iph->ihl*4),TCP 报头的结构信息就存放在*tcph 中,并可通过以下语句获取相关信息:
fl2=read(fd, (struct ethhdr *)ep, sizeof(ep));
// fl2 为捕获的数据帧帧长
printf("source=%x,dest=%x\n",tcph->source,tcph->dest); //取源端口和目的端口号
4.3 怎样把网卡置为“混杂模式”?
在以太网中,通过广播实现数据传输,在同一子网段的所有网卡都可“听”到网络总线上传输的所有数据,但不是所有数据都能被接收到。在系统正常工作时,一个合法的网络接口只响应两种数据帧:帧的目标MAC地址与本地网卡地址相符;帧的目标地址是广播地址,除此之外数据帧将被丢弃。
由于网卡有4 种工作模式:广播(能够接收网络中的广播信息)、组播(能接收组播数据)、直接(只有目的网卡才能接收该数据)和混杂(能够接收一切数据)模式,所以为了能够捕获以太网所有数据包,通常需要将网卡设置成混杂工作模式。当主机连接在共享型以太网集线器上时,采用“混杂”方式可以捕获到同一冲突域上传输的数据帧;但当主机连接在交换机上时,由于交换机通常不会将数据帧广播到所有端口上(除非在其MAC 地址——端口映射表内找不到相应表项),因而不能利用以太网络的广播特性进行捕获。这时,可以利用交换机的端口镜像功能实现网络数据包捕获。因为当端口A 和端口B 之间建立镜像关系后,流经端口A 的所有信息流量将同时通过端口B 输出,所以可以在端口B 捕获到端口A的数据。
所以,要想运行Sniffer工具,执行“侦听”功能,就必须使得网卡处于“混杂模式”,把网卡置为“混杂模式”的代码如下:
BOOL SetPromis()
{
int fd ;
fd = socket(AF_INET, SOCK_PACKET, htons(0x0003) ) ;
if ( fd == -1 )
{
printf("Can Not Establish A Socket To Control The Card...\n\n") ;
return FALSE ;
}
struct ifreq ifr ;
strcpy(ifr.ifr_name, "eth0") ;
int i = ioctl(fd, SIOCGIFFLAGS, &ifr) ;
if ( i < 0 )
{
close(fd) ;
printf("Can Not Get Flags Of The Net Card...\n\n") ;
return FALSE ;
}
ifr.ifr_flags |= IFF_PROMISC ;
i = ioctl(fd, SIOCSIFFLAGS, &ifr) ;
if ( i < 0 )
{
printf("Can Not Set The Net Card Promiscuous...\n\n") ;
return FALSE ;
}
printf("Set The Card To Be Promiscuous..............OK\n\n") ;
return TRUE ;
}
4.4 Sniffer攻击的防范
Sniffer软件可以进行网络流量监控、拓扑发现、入侵检测,给网络管理带来了极大的便利。正由于它能被动获取网络传输的明文信息,因此,一旦被黑客利用,给网络带来的危害也是巨大的。
作为一种入侵手段,嗅探器令人防不胜防,因为它被动接受而不主动获得。它不会向网络上发出任何包,网络用户很难发现它的存在。到目前为止还没有一种比较好的防范手段。防范 Sniffer攻击,只能依靠用户和网络软件设计者的安全意识。我们知道,FTP, Telnet等软件都是进行明文传输,因此,对攻击者来说,他们传输的信息就等于完全暴露出来。因此,必须对传输的数据进行加密,这也是反嗅探器的唯一途径。在Linux系统中,我们主张用SSH和openSSH来对传输数据进行加密。这样即使攻击者能得到数据流,也不能得到具体信息了。
另一种防范嗅探攻击的方式就是检查网络中有无网络接口处于混乱模式。在Linux环境下可以用ifconfig来检钡本地机器是否处于混乱模式,ifconfig是Linux自带的工具。对于子网中网络接口的检测,可以使用NEPED工具。然而该工具是利用Linux的ARP实现中的缺陷来检测这些接口口它发送一个ARP请求,一次来引起嗅探工作站的响应。然而它本身就是一个缺陷,因为它是利用了Linux的其它缺陷来实现的。随着Linux系统的越来越完善,如果ARP实现得到修补,嗅探工作站不再响应ARP请求。
另外,安全的拓扑结构也是必要的,因为嗅探器只能在当前网络段上进行数据捕获。这就意味着,将网络分段工作进行得越细,嗅探器能够收集的信息就越少。
以上讨论了目前对嗅探攻击防范的困难,对此本人作出下列两点设想:
l
因为以太网在局域网中进行传输是使用广播方式,如果不采用这种方式,直接使用地址解析 ((ARP)影射物理地址,嗅探器就无法接收数据了。或者进行双向验证,即主机对数据需要检查,数据对主机也需检查。
l
由于进行原始数据接收时需要将网卡设置为混乱模式,但如果网卡不
提供这种模式,嗅探器也无法工作了。另外,前面提供的两种检测网卡是否处于混乱模式的方式都有缺陷,希望以后能研究出没有缺陷的检测网卡状态的方式。
4.5 Sniffer引入网络管理中的可行性
Sniffer作为能够捕获网络报文的设备,通常用来在网络上截取阅读位于OS工协议模型中各个协议层次上的数据包。Sniffer可以拦截所有的正在网络上传送的数据,通过相应的软件分析处理,对网络实时信息和历史信息进行监控和统计分析,进而分析子网的网络状态和网络整体布局。为网络性能的分析、网络故障的判断、信息流量的审计、配置管理得调整、网络安全的检测提供强有力的使用工具,对网络管理提供信息依据。
Sniffer可以在网络管理中实现的主要的功能:
①
实时网络包捕获:Sniffer能够以线速率实时捕获用户定义的网络数据包截获通信的内容。对网络上主机间的通信,通过设置过滤条件,给出一个详细的逐包的统计信息。
②
网络实时监控:Sniffer以表格、图形等形式,实时显示出网络运行情况,如协议分布、流量分布、带宽利用率、错误率等。
③
对协议进行解析:有些只能分析一种协议,而另一些能够分析几百种协议。
④
统计历史数据和发出警报:Sniffer可提供几十种长期数据报告,以便将来的历史查询和分析,并可根据预先设定的阀值发出事件警报。
⑤
报文发送:通过设置目的地址,发送次数,发送延迟和报文大小,形成报文并发送,可以实现网络流量模拟。
4.6 Sniffer技术在网络管理中开发的可行性与必要性
根据以上各章节的论述,我们大致了解了网络管理技术和Sniffer技术的基本概念,在Sniffer本身所具有的抓取网络数据报的特性的基础之上,首先产生了一些简单的Sniffer的工具,其后Sniffer技术融合其他方面的技术,包括:人工智能、数据库、分布式等技术,在网络管理领域得到了极大的发展,在不同网络类型、不同操作系统中都得到了或多或少的应用,形成了各种专用的或通用的Sniffer产品,从简单捕获400字节数据包的Sniffit工具到集成的功能强到的具有 Sniffer网络管理性质的 TVN商业软件。从研究和实际应用上说明Sniffer技术在网络管理中是一种行之有效的技术。
由于现有网络管理工具的存在,许多人认为没有自己再开发网络管理软件的必要了。事实上,这种观念是不正确的。因为:尽管现有的网络管理工具提供了强大的网络管理功能,但它不可能包罗万象,适合于任何情况。也基于这个原因,很多的网络管理平台提供了API,可以使第三方或客户进行二次开发。这虽然使得网络管理工具的开发容易了许多,但前提是要掌握网络管理的深厚的专业知识。功能强大的网络管理工具其使用相应也较为复杂,而客户使用可能只关心自己想要实现的功能,而不迷失于相对无必要的复杂的功能环境中,同时希望减少管理负担,减少培训、操作和维护的费用。另外优秀的网络管理工具的价格也是很昂贵的,微小型企业可能无法承受。
⑥
因此Sniffer技术在网络管理中的开发应用有着很大的必要性。ShuSniffer是我们自主开发的具有独立版权的软件产品。它是针对广播信道网络环境下的企事业单位局域网而专业设计的一套小巧、可靠、操作简便的计算机网络诊听分析软件。它主要依靠信息在局域网中传播的广播方式,捕获信道上的报文,进行一系列特定分析,提取出实用数据提供给用户作为参考。并且把数据存入数据库,提供历史查询。它可以模拟网络报文传输,以及对截获的报文进行深层次的分析,了解报文的具体内容。它实现的主要功能包括:网络实时监视、报文捕获与分析、报文发送、历史查询、系统配置,为网络健康性能状态的分析、调整提供强有力的实用工具,成为计算机网络管理体系中的重要组成部分。
4.7 Sniffer对多协议的捕捉和分析的不足
当前Sniffer技术的应用还十分简单,对复杂多协议的捕获和分析也有很大的缺陷。从推广Sniffer技术的企业来看,Sniffer因要十分具体的应用于某个领域,因此只能做到对某个特定协议集做到精确专业的分析口而今天的网络通常由多个网段经过路由器、网桥、交换机和WAN链路组成。任何一个网段都可能运行多种网络协议。例如,TCP/IP协议与局域传输协议(如Novell的IPX)一起用于连接企业范围网络的协议。对于某些商业站点,可能同时需要运行多种协议簇— NetBEUI, IPX/SPX, TCP/IP, 802.3和SNA等,每个协议簇中又包括多种具体应用协议。这时很难找到一种Sniffer帮助解决网络问题,因为许多Sniffer往往将某些正确的协议数据包当成了错误数据包,然而我们要想解决复杂的网络问题,通常需要详细地解析各协议数据包内容。
在实际应用中,现有的Sniffer软件管理工具通常只能对单个协议或少数的协议进行捕获,例如Sniffer工具软件不能检测诸如HTTP和FTP之类的应用协议。这在工nterne七八ntranet环境中对网络的有效管理是一个大缺陷。所以Sniffer应该有对多种协议的捕获和分析能力,包含了目前最热门的W49W所使用的通讯协议.提供广泛且详尽的协议解析,使Sniffer成为一个功能齐全,完全透视网络的强大网络管理工具。
参考文献
[1] Tim Berners-Lee,James Handler,Ora Lassia.The semantic web[J].Scientific American, 2001,284(5):34-43.
[2] W3C Recommendation 10 February 2004.OWL web ontology language guide [EB/OL]. 2004
[3] Robert Shimonski, Sniffer Network Optimization and Troubleshooting Handbook. Syngress Media, 2002.6.
[4] Douglas E.Comer. Internetworking with TCP/IP, Vol 1. 5th Edition.
United States :Prentice Hall ,2006:90-200.
[5] W.Richard Stevens. TCP/IP Illustrated, Vol 1: The Protocols. United States: Addison-Wesley,2004:70-150.
[6] 李景.本体论在系统中的应用研究[M].北京:北京图书馆出版社, 2005.
[7] 谭思亮,监听与隐藏网络侦听揭密[M].北京:人民邮电出版社,2002.
[8] 肖新峰,宋强. TCP/IP 协议与标准教程. 北京:清华大学出版社,2007:1-115.
[9] 杨延双. TCP/IP 协议分析与应用. 北京:机械工业出版社,2007:60-148.
[10] 兰少华,杨余旺,吕建勇. TCP/IP 网络与协议. 北京:清华大学出版社,2006:1-110
[11] 李景.本体论在文献检索系统中的应用研究[M]. 北京:北京图书馆出版社, 2005. 70-150
[12] 朱礼军,陶兰,黄赤.语义万维网的概念、方法及应用[J].计算机工程与应用, 2004,40(3):79-83
[13] 任彬.一种特定领域的语义网模型[D].吉林:吉林大学, 2004.
[14] 田春虎.国内语义Web 研究综述[J].情报学报,2005,24(2):243-249.
[15] 杜小勇,李曼,王大治.语义Web与本体研究综述[J].计算机应用, 2004,24(10):14-16.
[16] 周武,金远平.构建XML 本体信息研究[J].微机发展, 2003,13(10):61-64.
[17] 马恒太,蒋建春.一个基于Uuix 平台的分布式网络监视器系统[J].计算机研究与发展, 2001,38(3):268-274.
[18] 李力,肖庆.Linux 下GUI 网络数据包嗅探器的研究与实现[J].计算机工程与设计, 2006,27(2):344-346.
安全问题对于IT管理员来说是需要长期关注的,可以用一套框架来对操作系统的安全性进行合理的评估,包括:基本安全、网络安全和协议,应用协议、与操作、确信度、可信计算、开放标准。按照这七个类别比较微软Windows和Linux的安全性,最终的定性结论是:目前为止,Linux提供了相对于Windows更好的安全性能,只有一个方面例外(确信度)。
Linux和Windows在设计上就存在哲学性的区别。Windows操作系统倾向于将更多的功能集成到操作系统内部,并将程序与内核相结合;而Linux不同于Windows,它的内核空间与用户空间有明显的界限。根据设计架构的不同,两者都可以使操作系统更加安全。
随着互联网向更深层次、更普及化方向发展,企业用户在选择网络方案时极大地依赖于网络需求和预算,而Linux提供了客户所需的强大且经济的选择。首先,Linux作为开放源代码的软件,使得应用开发的人员可以以很低的成本获得Linux的源代码并进行应用开发,于是就先天性地为Linux打上了“成本低”的烙印,这也使得Linux操作系统相比Windows占有绝对的价格优势,再加上占用资源少、运行稳定、功能强大等优点,注定了Linux成为现阶段发展最快的操作系统。而随着ISP、ICP对服务器应用的需求,更是推动了Linux服务器及集群系统的发展,逐渐开始在各大服务器制造商的产品系列中担纲主角。
二、 Linux系统操作系统卡简介
一般的Linux操作系统卡”是一块PCB板,通过PCI接口与主机通信。Linux系统卡以硬件形式提供“安全Linux操作系统”,能够在保留服务器原有硬件设备的条件下轻易地安装“安全Linux操作系统”,充分利用其提供的安全机制,并对操作系统核心、系统软件、系统配置等关键文件提供物理保障。
利用操作系统卡,根据应用环境定制功能,固化安全操作系统,用户可以在利用原有硬件的基础上能够为系统的运行提供高安全、高性能的运行环境 。该操作系统卡的主要特性有五个方面:
1、采用凝思磐石安全操作系统。
2、通过PCI接口与主机通讯。
3、具有大容量存储功能、自动引导功能、硬件写保护功能和容灾备份功能。
4、可在绝大部分IA架构服务器上运行。
5、配备CompactFlash(CF),每块卡容量为32M、64M、128M、256M可选 。
三、 一般操作系统卡的技术特点分析
1、 采用安全操作系统
采用此系统的特点和优势:
1)、抵抗最为危险也是最为流行的缓冲器溢出攻击
2)、抵抗审计日志文件的破坏
3)、“四权分立”的系统管理
4)、抵抗系统配置文件的破坏
5)、对抗病毒及抵抗特洛依木马的安装
6)、掉电后的快速恢复
7)、安全增强的对外服务
8)、提供抗灾分布式双机热备份和自动服务切换机制(HA)
9)、存贮设备故障自动报警与恢复
10)、服务器自动重启技术(Auto Server Restart)
11)、提供多机集群机制(Cluster)
2、 通过PCI接口与主机通讯
虽然未来的主流是趋向于使用AGP接口,但目前更普遍的使用了PCI接口,PCI接口比较容易获得, 其总线有133MB/s 的带宽,对声卡、网卡、视频卡等绝大多数输入/输出设备显得绰绰有余。
3、 具有大容量存储功能、自动引导功能、硬件写保护功能和容灾备份功能
4、 可在绝大部分IA架构服务器上运行
由于该架构服务器采用了开放式体系,以"小、巧、稳"为特点,凭借可靠的性能、低廉的价格,并且实现了工业标准化技术和得到国内外大量软硬件供应商的支持,在大批量生产的基础上,以其极高的性能价格比而在全球范围内,尤其在我国得到广泛的应用。在互联网和局域网内更多的完成文件服务、打印服务、通讯服务、WEB服务、电子邮件服务、数据库服务、应用服务等主要应用。
5、 配备CompactFlash(CF),每块卡容量为32M、64M、128M、256M可选
6、 安全Linux操作系统核心机制
1)强制运行控制(MEC)
对外提供服务的进程是黑客闯入服务器的门户,这些进程的缺陷一旦被利用,就会丧失整个系统的控制权。而服务器进程的缺陷层出不穷,各种服务器“被黑”的事件也就随处可见。
强制运行控制机制正是针对上述问题设计的。它用一种形式化的语言描述了进程的行为范围,一旦进程的行为超出了这个范围,系统将自动停止该进程继续运行,并记录该事件的所有安全相关信息,为后期查找责任人提供帮助。
强制运行控制机制运行于系统核心,能够充分保证其强制性。它控制的对象不是特定的进程,从而能够保证对于受控对象家族的子进程、孤儿进程、SESSION LEADER进程,强制运行控制机制都同样有效。
2) 强制能力控制(MCC)
强制能力控制的目的就是要消除系统中不受限制的进程,只赋予每个特权进程能够完成其功能的最小能力,实现“最小特权”原则。利用强制能力控制机制,对应用程序加以适当改造,使安全加固服务器不包含SUID ROOT程序,所有对外提供服务的进程以普通用户身份运行,消除了系统安全隐患,大大提高了系统的安全性。
3)访问控制列表(ACL)
传统类Unix系统以文件属主、组和其它方式设置读、写和执行许可,这会造成文件许可的不必要扩散。访问控制列表提供细粒度的访问控制,能够以特定用户或特定组为单位的访问许可分配,从而防止文件许可的不必要扩散。
4)四权分立的系统管理
安全Linux加固服务器去除了超级用户,将系统管理功能分配给4个固有用户完成。他们是系统管理员(Sysadmin)、安全管理员(Secadmin)、网络管理员(Netadmin)和审计管理员(Audadmin)。使用这种“四权分立”原则完成系统的管理任务,使得各个管理员都不能控制整个服务器系统。他们之间相互牵制,能够防止管理员的疏忽削弱整个系统的安全性。另外,管理员的登录路径得到严格限制,防止用户轻易获得管理员权限,这也大大提高了系统的安全性。
5)安全增强的对外服务
Linux安全服务器系统的所有对外服务和本机特权程序均根据核心操作系统机制进行了特别的安全增强,防止这些应用程序成为网络攻击者控制服务器的跳板。对于第三方软件,通过特定的配置方法,同样能够利用Linux服务器的系统安全机制达到安全增强的目的。
操作系统之战时刻未停止过,在操作系统之战是一场“三国”混战,Windows、Mac和 Linux 之间展开。目前世界上用户数量最多的桌面操作系统是微软的Windows 7 和 Windows XP。微软雄踞三国混战局面之历史,已有20多年,Linux 和 Mac 目前尚未撼动其霸主地位!
Linux,是一款自由开源的操作系统,虽在桌面市场上不遗余力,但目前全球份额仍仅占 1%。Linux 发行版本众多,冲击桌面市场的力量仍然在如泉水汩汩流出。Linux 崇尚自由、开源,但下面作者为大家介绍几款非Linux 的操作系统。
提示:在安装体验下面的操作系统前,注意做好相关数据的备份,以防不备。
Linux 与 windows 较大的不同就是界面,这需要长期使用windows的用户用一段时间慢慢适应。ReactOS是一款长的很像Windows的自由操作系统。ReactOS 较大的特性之一就是从 scratch 构建而来,外表很像Windows。开发者希望ReactOS 能够兼容 WIndows 软件,也兼容其他硬件。ReactOS最新版本为48.9MB 大小。这里提示下,其功能有限,大家也可以使用 LiveCD版本来试用或在虚拟机里感受下。
BeOS作为一款操作系统,其历史可溯至 1991年,最新版本为2001年的5.1。
Haiku是一个社区驱动的项目,接手已经停止开发的BeOS 继续开发。Haiku 项目目标是拥有一款与BeOS 二进制包完全兼容的操作系统。BeOS在当时具备了一些现代用户界面的特性。Haiku 可免费下载,安装在PC 上,大小为238MB。
Google Chrome OS专为上网本Chromebook设计。这个平台设计本身很轻型,就是为网络环境设计,搭载了一系列的Google 在线应用。目前还在开发中。严格意义上来说,也是一款Linux 操作系统。
OpenSolaris,由Sun 公司主持的,基于Solaris 操作系统开发的一款操作系统。Sun公司目前已经被甲骨文收购,该操作系统的开发进程也减慢了。一群开发者从该平台分出一支,取名“OpenIndian”。OpenSolaris 和 OpenIndiana 与Unix 和 Linux 从根本上很像。OpenIndiana 桌面DVD 32位不超过802 MB,USB 便携版本为 963 MB。
最初的BSD操作系统是由加州伯克利大学开发,与OpenIndiana类似,FreeBSD
是一款Unix操作系统。它有几个重要的分支,如NetBSD,PCBSD。FreeBSD相对来说,服务器和开发环境较适合它。
LUPA开源社区
【关键词】嵌入式系统 嵌入式Linux系统 学结
1 嵌入式系统
1.1 嵌入式系统的定义
一方面按照历史性、本质性、普遍性要求,嵌入式系统定义为:嵌入式系统是嵌入到对象体系中的计算机应用系统,与对象系统交互,在实现对象系统某些任务过程时,对应用系统会提出响应时间的限定要求。
另一方面从应用上嵌入式系统被定义为:以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
1.2 嵌入式系统的特点
(1)系统内核小;
(2)专用性强;
(3)系统精简;
(4)高实时性;
(5)多任务的操作系统;
(6)需要开发工具和环境。
1.3 嵌入式系统的应用
在当前数字信息技术和网络技术高速发展的时代,嵌入式系统已经广泛地渗透到工业控制、交通管理、信息家电、家庭智能管理等方方面面中。随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术将越来越和人们的生活紧密结合。
2 嵌入式Linux的学习过程
2.1 常用命令总结
(1)cd命令――切换目录;
(2)cp命令――拷贝文件或目录;
(3)ls命令――列出目录内容;
(4)mkdir命令――创建目录;
(5)rmdir命令――h除目录;
(6)rm命令――移动文件或目录;
(7)grep命令――行过滤工具;
(8)chmod命令――设置访问权限;
(9)cat命令――显示文件内容;
(11)jobs命令――查看中止或者在后台运行的程序;
(12)bg命令――把程序放在后台运行;
(13)fg命令――把程序放在前台运行;
(14)ctrl+c命令――终止在前台运行的程序;
(15)kill命令――终止一个进程;
(16)mount命令――把某个文件系统挂接到某个目录下;
(17)Ifconfig命令――显示或配置网络设备。
2.2 Gcc―makefile
2.2.1 Gcc的使用方法(以hello.c文件为例)
(1)预处理:gcc -E hello.c -o hello.i
编译:gcc -S hello.i -o hello.s
汇编:gcc -c hello.s -o hello.o
链接:gcc hello.o -o hello
生成可执行文件:hello
(2)gcc hello.c -o hello
生成可执行文件:hello
(3)gcc hello.c
生成可执行文件:a.out
2.2.2 makefile的使用方法
(1)基本结构:
目标文件:依赖文件
命令行
(2)使用make命令就能编译得到结果。
2.3 文件I/O编程
2.3.1 函数说明
(1)open()函数是用于打开或创建文件;
(2)close()函数是用于关闭一个被打开的文件;
(3)read()函数是用于将从指定的文件描述符中读出的数据放到缓存区中;
(4)write()函数是用于向打开的文件写数据,写操作从文件的当前指针位置开始;
(5)lseek()函数是用于在指定的文件描述符中将文件指针定位到相应的位置;
(6)fcntl()函数给文件上锁。
2.3.2 使用流程
打开文件open()、设置文件锁fcntl()、定位文件指针位置lseek()、对文件进行读写操作write()、read()。
2.4 编写守护进程
(1)创建子进程,终止父进程;
(2)在子进程中创建新会话setsid;
(3)改变工作目录chdir;
(4)重设文件创建掩码umask;
(5)关闭文件描述符。
2.5 进程间通信
2.5.1 管道
(1)用于具有亲缘关系的进程之间的通信;
(2)建立管道pipe();
(3)管道关闭时只需使用普通的close()函数逐个关闭各个文件描述符。
2.5.2 FIFO
有名管道的创建使用函数mkfifo(),在创建管道成功之后,就可以使用open()、read()、和write()这些函数。
2.5.3 信号(如图1所示)
(1)信号的发送与捕捉。
kill()函数、raise()函数、alarm()函数、pause()函数
(2)信号的处理。
使用简单函数signal(),只需指出要处理的信号和处理函数即可;
使用信号集函数组。
2.5.4 信号量
创建信号量或获得在系统已存在的信号量semget()
初始化信号量semctl()函数的SETVAL操作
信号量的PV操作semop()
删除信号量semclt()函数的IPC_RMID操作
2.5.5 共享内存
创建共享内存shmget()
映射共享内存shmat()
撤销映射shmdt()
2.5.6 消息队列
创建或打开消息队列msgget()
添加消息msgsnd()
读取消息msgrcv()
控制消息队列msgctl()。
3 学结
嵌入式系统本身是一个相对模糊的定义,而Linux则是类似于windows的操作系统,它的核心源代码是开放的、自用使用的。在了解了基础知识和安装虚拟机之后,我便开始进行上机操作,加深基本命令的理解和函数的使用。
在学习的过程中想要独立解决疑问,可以通过网络资源、课外书或大量的动手实践才能真正的领会Linux的精髓。同时在我们自己的学习中,要尽最大的能力去帮助他人,在帮助他人的同时自己会深刻巩固知识。
参考文献
[1]何立民.嵌入式系统的实时性问题[J].单片机与嵌入式系统应用,2004(09).
[2]孙天泽.嵌入式Linux操作系统[M].北京:人民邮电出版社,2012.
[3]夏玮玮,沈连丰等.嵌入式系统关键技术分析与开发应用[J].单片机与嵌入式应用,2003(02).
[4]贾红伟,叶文莱.嵌入式操作系统与嵌入式Linux[J].吉林师范大学学报,2005.
小知识:
CDlinux 是一种小型的迷你GNU/Linux发行版。CDlinux的体形小巧,功能却很强大。因此可以把CDlinux当作“移动操作系统”来使用。
由于CDlinux里集成了最新的Linux内核,Xorg图形界面,Xfce窗口管理器和许多其它流行软件,所以平时大家使用的如Firefox浏览器,即时通讯程序,图像处理程序,甚至Java等等都可以在CDlinux里运行。有了这些程序的支持,无论您在哪里都可以像在家里一样轻松完成您的工作。 您是否已经动心了呢?那就让我们一起来制作吧!
首先打开,在打开的网络硬盘页面依次下载hpformat U盘格式化工具、cdlinux_ce-0.9.0.zip CDLINUX操作系统安装镜像文件、unetbootin-windows-494.zipU盘启动CDLINUX制作工具三款软件。
将要制作CDLINUX移动系统的U盘(U盘的容量一般要大于1G),插入电脑,打开解压后的hpformat文件夹,双击运行其中的HPUSBFW.EXE程序,弹出U盘格式化窗口,单击“Device”下拉框,点选要进行格式化的U盘盘符,单击“Start”按钮,弹出格式化警告提示时,单击“是”继续。等待片刻,格式化完毕,关闭U盘格式化窗口。
打开已解压的unetbootin-windows-494文件夹,双击运行unetbootin-windows-494.exe文件,弹出程序窗口,点选“光盘镜像”单选按钮,单击窗口下方的“驱动器”下拉箭头,选择要进行操作的U盘盘符。
单击“光盘镜像”类型为“ISO”,单击右侧的“浏览”按钮,弹出“打开磁盘镜像文件”窗口,浏览并点选解压后的CDlinux_CE-0.9.0文件夹中的CDlinux_CE-0.9.0.iso文件,单击“打开”按钮,回到unetbootin-windows-494.exe程序窗口,单击“确定”按钮。
弹出U盘系统安装界,此过程要等待几分钟时间。
U盘系统安装完成,单击“现在重启”按钮重启计算机。
计算机重启时,按住键盘“Delete”键进入BIOS设置界面,将光标定位于BOOT菜单项,配合键盘的“-”与“+”键,使Hard Drive项位于该菜单最上位置,双击Hard Drive项打开该菜单,配合上下方向键及“-”与“+”键,使USB Hard Drive项位于该Hard Drive菜单的最上方,按键盘F10键保存设置并重启计算机。
关键词:Linux;Ntloader
中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)16-31156-01
1 引言
现在学习使用Linux操作系统是件很流行的事,所以很多人的电脑上除了安装常用的Windows系列操作系统之外还安装上了Linux操作系统,一般来说安装一个Linux是够学习用的了,但由于Linux的发行版众多,优缺点也各不一样,同时各个发行版更新的速度也相当迅速,所以有很多用户尝试着在电脑上安装多个Linux发行版,用来体会各个发行版的异同或是学习新旧版本之间的区别。安装多个版本的Linux有很多种方法,比如Linux系统所带的GRUB程序或第三方的多系统启动引导软件BootMagic和System Commander等,除此之外利用Windows 2000系列和Windows Xp系列自带的Ntloader引导程序也可以实现多个Linux系统与Windows系统共存。本文就以在一个硬盘上安装Windows XPProfessional(以下简称Xp)、Windows 2000 Server(以下简称2000)、Redhat linux 9.0(以下简称Redhat)、Redflag desktop 4.0(以下简称Redflag)为例给出其实现的方法。
2 实现方法
2.1硬盘的分区
安装系统前先进行合理分区,这里将硬盘的前一部分划分成C:、D:、E:、F:四个分区,其中C盘和D盘分别用来安装XP和2000 ,E盘和F盘用来存储数据。另外,为了发挥Windows 2000 服务器版的优势,将Windows 2000 Server所在盘的分区格式设置为Ntfs。值得注意的是此时只对硬盘的前一部分进行了分区,硬盘里还应有一部分磁盘空间未进行分配,这些未分配的空间是留给Linux系统使用的。此时的分区情况如图1。
图1 对硬盘的划分出C:\ - F:\后的磁盘空间情况
2.2设置Windows系统
分完区后开始安装Windows系统,先安装XP系统,装好后将C盘根目录下的ntldr ,,bootfont.bin三个文件备份。接下来安装2000系统,在2000安装完毕后会出现一个问题:在启动菜单中选择Xp系统却不能进入Xp,解决的办法很简单,用刚才备份的三个文件覆盖掉C盘下的原有文件,然后再重新启动就能正常进入Xp系统,这是因为Xp系统是在2000系统之后面世的,如果先安装Xp再安装2000的话就会出现2000 的启动文件覆盖掉Xp系统的启动文件,所以就会出问题。当然,更简单的解决办法就是将2000安装在C盘,Xp安装在D盘,这样先装2000再装Xp就不会出现这个问题了。
2.3 Linux系统的安装与设置
同样,安装Linux系统之前也要进行分区,需要注意的是Linux的分区不能事先划分好,如果在事先划分好的分区上安装多个Linux很可能造成只有一个Linux 系统能正常使用,所以Linux的分区最好在安装过程中用安装程序附带的分区工具进行手工分区。进行正式安装之前先规划出分区情况(如图2所示),为两个Linux系统分别划分出引导(boot)分区和根(/)分区,由于交换分区可以两个Linux系统共用,所以只划分一个就可以了。
图2 分区的最终结果
规划好后开始正式安装Redhat和RedFlag,在安装过程中一定要将Redhat与Redflag的引导程序(Lilo或Grub)安装在自己的引导(boot)分区的上,即Redhat要安装在hda8上,Redflag要安装在hda10上,千万不能安装在MBR上,这一点非常关键,否则就只有一个Linux系统能启动。
2.4获取两个Linux系统的启动文件
两个Linux系统安装完后重新启动计算机会发现开机的启动菜单里没有Linux的选项,只有2000和Xp的启动菜单。这是主要是因为我们暂时还没能将Linux的启动信息添加进开机菜单,要想开机菜单里出现这两个Linux系统的启动菜单就要得到这两个Linux系统的启动文件。
(1)Redhat第一张安装光盘的dosutils目录中的loadin.exe文件与子目录Autoboot下的vmlinuz文件拷贝到E盘(hda6)中,这两个文件可使我们能在DOS下进入Linux系统中。
(2)启动盘启动到DOS下,转到E盘,执行loadlin vmlinuz root=/dev/hda9 ,执行后会进入到Redhat Linux中。
(3)进入Redhat Linux后,执行dd if=/dev/hda8 of=/Redhat.lnx bs=512 count=1。这条命令是将Redhat Linux的引导分区储存为一个文件,并且文件名为Redhat.lnx,存放在其根 (/)目录下。
(4)重新启动计算机,重复步骤(2),但命令改成loadlin vmlinuz root=/dev/hda11,这样就进入到RedFlag Linux中。
(5)重复步骤(3),但命令改成dd if=/dev/hda10 of=/RedFlag.lnx bs=512 count=1。这样也在根目录下得到了RedFlag Linux的启动文件。
2.5将Linux的启动选项加入到开机启动菜单中
将刚刚得到的两个Linux的启动文件拷贝到C盘(hda1)中,然后修改C盘下的boot.ini文件,在其最后添加两行命令:c:\ Redhat.lnx=” Redhat Linux 9.0”,c:\ RedFlag.lnx =” RedFlag Linux 4.0”,这两条命令要分两行书写,这样就将Linux的启动选项添加到了开机菜单中。
2.6完成
重新启动后,启动菜单中就出现了Redhat Linux 9.0和 RedFlag Linux 4.0的选项,这时就可以从Windows Xp,Windows 2000 Server ,Redhat Linux 9.0,RedFlag Linux 4.0这四个选项中选择一个进入系统了,当选择其中的Linux系统时Ntloader引导程序就会调入其相应的引导文件进行引导,这样正常进入了Linux系统。
3 结束语
这种实现方法的最大好处在于安装完成后Linux系统与Windows系统互不干扰,即使要重装其中任何一个系统,也不会对其它已安装的系统造成影响。在没有重新划分过分区的前提下如果重新安装Xp只须备份好两个Linux的安装文件(Redhat.lnx,Redflag.lnx)和2000的三个启动文件(ntldr ,,bootfont.bin),重装完成后放回C盘,再按修改C盘下的boot.ini文件即可,这样其它的系统比如2000、Redhat 或RedFlag仍能正常使用;如果重新安装2000、Redhat或RedFlag则按照正常安装的过程即可,不需要进行其它的设置,这是因为重新安装时在C盘中各自的引导文件并没有丢失。当然,如果将硬盘重新进行过分区后再用此方法就可能会有问题,因为所备份的安装文件已经不适应新的分区情况,所以这时仅将备份文件还原是不够的,应从步骤1开始重新进行安装。
另外,这种方法的另一优点是其不仅仅只适用于两个Linux系统与Windows系统的共存,只要仔细按照前文所述的方法,安装3个、4个或更多的Linux系统也是可行。
参考文献:
[1]许社村.Red Hat Linux 9中文版入门与进阶[M].清华大学出版社:北京,2003.
[2]CANDACE LEIDEN TERRY COLLINGS.著.王自东.等.译.LINUX宝典[M].电子工业出版社:北京,2002.
[3]中科红旗软件技术有限公司.红旗LINUX系统管理教程[M].电子工业出版社:北京,2001.
引 言
近年来,随着计算技术、通信技术的飞速发展,特别是互联网的迅速普及和3C(计算机、通信、消费电子)合一的加速,微型化和专业化成为发展的新趋势,嵌入式产品成为信息产业的主流。Linux从1991年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一;可运行在X86、Alpha、Sparc、MIPS、PPC、Motorola、NEC、ARM等多种硬件平台,而且开放源代码,可以定制;可与各种传统的商业操作系统分庭抗争。越来越多的企业和研发机构都转向嵌入式Linux的开发和研究上,在新兴的嵌入式操作系统领域内也获得了飞速发展。
1 嵌入式Linux的特点
嵌入式系统是以应用为中心,以计算机为基础,软硬件可裁剪,适用于系统对功能、可靠性、成本、功耗严格要求的专用计算机系统,系统结构见图1。实时性是嵌入式系统的基本要求,其次,还要求代码小,速度快,可靠性高。嵌入式Linux(Embedded Linux)是指对Linux经过裁剪小型化后,可固化在存储器或单片机中,应用于特定嵌入式场合的专用Linux操作系统。嵌入式Linux的开发和研究已经成为目前操作系统领域的一个热点。与其它嵌入式操作系统相比(详见表1),Linux的特点如下。
表1 专用嵌入式实时操作系统与嵌入式Linux的比较
专用嵌入式实时操作系统嵌入式Linux操作系统版权费每生产一件产品需交纳一份版权费免费购买费用数十万元(RMB)免费技术支持由开发商独家提供有限的技术支持全世界的自由软件开发者提供支持网络特性另加数十万元(RMB)购买免费且性能优异软件移值难(因为是封闭系统)易,代码开放(有许多应用软件支持)应用产品开发周期长,因为可参考的代码有限短,新产品上市迅速,因为有许多公开的代码可以参考和移植实时性能好须改进,可用PT_Linux等模块弥补稳定性较好较好,但在高性能系统中须改进
第一,Linux系统是层次结构且内核完全开放。Linux是由很多体积小且性能高的微内核系统组成。在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据自己的应用需要方便地对内核进行改造,低成本地设计和开发出满足自己需要的嵌入式系统。
第二,强大的网络支持功能。Linux诞生于因特网时代并具有Unix的特性,保证了它支持所有标准因特网协议,并且可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。 此外,Linux还支持ext2、fat16、fat32、romfs等文件系统,为开发嵌入式系统应用打下了很好的基础。
第三,Linux具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,可以跨越嵌入式系统开发中仿真工具的障碍。Linux也符合IEEE POSIX.1标准,使应用程序具有较好的可移植性。
传统的嵌入式开发的程序调试和调试工具是用在线仿真器(ICE)实现的。它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,完成监视和调试程序;但一般价格比较昂贵,只适合做非常底层的调试。使用嵌入式Linux,一旦软硬件能够支持正常的串口功能,即使不用仿真器,也可以很好地进行开发和调试工作,从而节省一笔不小的开发费用。嵌入式Linux为开发者提供了一套完整的工具链(tool chain)。它利用GNU的gcc做编译器,用gdb、kgdb、xgdb做调试工具,能够很方便地实现从操作系统到应用软件各个级别的调试。
第四,Linux具有广泛的硬件支持特性。无论是RISC还是CISC、32位还是64位等各种处理器,Linux都能运行。Linux通常使用的微处理器是Intel X86芯片家族,但它同样能运行于Motorola公司的68K系列CPU和IBM、Apple、Motorola公司的PowerPC CPU以及Intel公司的StrongARM CPU等处理器。Linux支持各种主流硬件设备和最新硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行。这意味着嵌入式Linux将具有更广泛的应用前景。
2 Linux嵌入式系统开发平台
2.1 系统软件操作平台
操作系统是一种在计算机上运行的软件。它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口。它存在的目的是为了管理所有硬件资源,并且提供应用软件一个合适的操作环境。嵌入式系统由于硬件的限制,通常只具有极稀少的硬件资源,如主频较低的CPU、较小的内存、小容量的固态电子盘芯片DoC(Disk on Chip)或DoM(Disk on Module)替代磁盘等。在使用电池的系统中,它还要实现低功耗,延长电池使用时间的功能。
Linux作为嵌入式操作系统是完全可行的。因为Linux提供了完成嵌入功能的基本内核和所需要的所有用户界面,能处理嵌入式任务和用户界面。将Linux看作是连续的统一体,从一个具有内存管理、任务切换和时间服务及其它分拆的微内核到完整的服务器,支持所有的文件系统和网络服务。Linux作为嵌入式系统,是一个带有很多优势的新成员。它对许多CPU和硬件平台都是易移植、稳定、功能强大、易于开发的。
嵌入式Linux系统需要下面三个基本元素:系统引导工具(用于机器加电后的系统定位引导)、Linux微内核(内存管理、 程序管理)、初始化进程。但如果要它成为完整的操作系统并且继续保持小型化,还必须加上硬件驱动程序、硬件接口程序和应用程序组。
Linux是基于GNU的C编译器,作为GNU工具链的一部分,与gdb源调试器一起工作的。它提供了开发嵌入式Linux系统的所有软件工具。
2.2 系统硬件平台
在选择硬件时,常由于缺乏完整或精确的信息而使硬件选择成为复杂且困难的工作。硬件开发成本常是我们很关心的。当考虑硬件成本时,须要考虑产品的整个成本而不仅是CPU的成本。因为合适的CPU,一旦加上总线逻辑和延时电路使之与外设一起工作,硬件系统就可能变得非常昂贵。如果要寻找嵌入式软件系统,那么,应首先确定硬件平台,即确定微处理器CPU的型号。
现在比较流行的硬件平台有Intel公司的StrongARM 系列,Motorola公司的DragonBall系列,NEC公司的VR系列,Hitachi公司的SH3、SH4系列等等。选定硬件平台前,首先要确定系统的应用功能和所需要的速度,并制定好外接设备和接口标准。这样才能准确地定位所需要的硬件方案,得到性价比最高的系统。
3 嵌入式Linux系统开发模式
嵌入式系统通常为一个资源受限的系统。直接在嵌入式系统的硬件平台上编写软件比较困难,有时甚至是不可能的。一般流程见图2。目前,一般采用的办法是,先在通用计算机上编写程序,然后,通过交叉编译,生成目标平台上可运行的二进制代码格式,最后下载到目标平台上的特定位置上运行,具体步骤如下。
第一步,建立嵌入式Linux交叉开发环境。目前,常用的交叉开发环境主要有开放和商业两种类型。开放的交叉开发环境的典型代表是GNU工具链,目前已经能够支持x86、ARM、MIPS、PowerPC等多种处理器。商业的交叉开发环境主要有Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。交叉开发环境是指编译、链接和调试嵌入式应用软件的环境。它与运行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式,见图3。
第二步,交叉编译和链接。在完成嵌入式软件的编码之后,就是进行编译和链接,以生成可执行代码。由于开发过程大多是在Intel公司x86系列CPU的通用计算机上进行的,而目标环境的处理器芯片却大多为ARM、MIPS、PowerPC、DragonBall等系列的微处理器,这就要求在建立好的交叉开发环境中进行交叉编译和链接。
例如,在基于ARM体系结构的gcc交叉开发环境中,arm-linux-gcc是交叉编译器,arm-linux-ld是交叉链接器。通常情况下,并不是每一种体系结构的嵌入式微处理器都只对应于一种交叉编译器和交叉链接器。如对于M68K体系结构的gcc交叉开发环境而言,就对应于多种不同的编译器和链接器。如果使用的是COFF格式的可执行文件,那么在编译Linux内核时,需要使用m68k-coff-gcc和m68k-coff-ld,而在编译应用程序时则需要使用m68k-coff-pic-gcc和m68k-coff-pic-ld。编写好的嵌入式软件经过交叉编译和交叉链接后,通常会生成两种类型的可执行文件:用于调试的可执行文件和用于固化的可执行文件。
第三步,交叉调试。
① 硬件调试。如果不采用在线仿真器,可以让CPU直接在其内部实现调试功能,并通过在开发板上引出的调试端口,发送调试命令和接收调试信息,完成调试过程。目前,Motorola公司提供的开发板上使用的是DBM调试端口,而ARM公司提供的开发板上使用的则是JTAG调试端口。使用合适的软件工具与这些调试端口进行连接,可以获得与ICE类似的调试效果。
② 软件调试。在嵌入式Linux系统中,Linux系统内核调试,可以先在Linux内核中设置一个调试桩(debug stub),用作调试过程中和宿主机之间的通信服务器。然后,可以在宿主机中通过调试器的串口与调试桩进行通信,并通过调试器控制目标机上Linux内核的运行。
嵌入式上层应用软件的调试可以使用本地调试和远程调试两种方法。如果采用的是本地调试,首先要将所需的调试器移植到目标系统中,然后就可以直接在目标机上运行调试器来调试应用程序了;如果采用的是远程调试,则需要移植一个调试服务器到目标系统中,并通过它与宿主机上的调试器共同完成应用程序的调试。在嵌入式Linux系统的开发中,远程调试时目标机上使用的调试服务器通常是gdbserver,而宿主机上使用的调试器则是gdb。两者相互配合共同完成调试过程。
第四步,系统测试。整个软件系统编译过程,嵌入式系统的硬件一般采用专门的测试仪器进行测试,而软件则需要有相关的测试技术和测试工具的支持,并要采用特定的测试策略。测试技术指的是软件测试的专门途径,以及能够更加有效地运用这些途径的特定方法。在嵌入式软件测试中,常常要在基于目标机的测试和基于宿主机的测试之间做出折衷。基于目标机的测试需要消耗较多的时间和经费,而基于宿主机的测试虽然代价较小,但毕竟是在仿真环境中进行的,因此难以完全反映软件运行时的实际情况。这两种环境下的测试可以发现不同的软件缺陷,关键是要对目标机环境和宿主机环境下的测试内容进行合理取舍。嵌入式软件测试中经常用到的测试工具主要有:内存分析工具、性能分析工具、覆盖分析工具、缺陷跟踪工具等,在这里不加详述。嵌入式Linux系统的典型构成见图4。
以下即为一个典型开发工具的使用流程:
① 写入或植入引导码;
② 向串口打印字符串的编码;
③ 将gdb目标码移植工作串口,可与另一台运行gdb程序的Linux主机系统对话;
④ 利用gdb让硬件和软件初始化码在Linux内核启动时工作;
⑤ Linux内核启动,串口成为Linux控制口并可用于后续开发;
⑥ 如果在目标硬件上已运行了完整的Linux内核,即可调试用户的应用进程。
4 嵌入式Linux面临的挑战
目前,对嵌入式Linux系统的开发正在蓬勃兴起,并已形成了很大的市场。除了一些传统的Linux公司,像RedHat、VA Linux等,正在从事嵌入式Linux的研究之外,一批新公司(如Lineo、TimeSys等)和一些传统的大公司(如IBM、SGI、Motorola、Intel等)以及一些开发专用嵌入式操作系统的公司(如Lynx)也都在进行嵌入式Linux的研究和开发。但就目前的技术而言,嵌入式Linux的研究成果与市场的真正需求还有一些距离,因此,嵌入式Linux走向成熟还需要在以下几个方面有所发展。
(1)Linux的实时性扩充
实时性是嵌入式操作系统的基本要求。由于Linux还不是一个真正的实时操作系统,内核不支持事件优先级和抢占实时特性,所以在开发嵌入式Linux的过程中,首要问题是扩展Linux的实时性能。对Linux实时性的扩展可以从两方面进行:向外扩展和向上扩展。向外扩展即从范围上扩展,让实时系统支持的范围更广,支持的设备更多。目前的开发所面向的设备仅限于较简单的有实时要求的串/并口数据采集、浮点数据计算等,而像实时网络这样实时系统的高级应用还需进一步发展。向上扩展是扩充Linux内核,从功能上扩充Linux的实时处理和控制系统。如嵌入式系统RT-Linux,它的基本原理是将Linux本身的任务以及Linux内核本身作为一个优先级最低的任务,而实时任务作为优先级最高的任务,即在实时任务存在的情况下运行实时任务,否则就运行Linux本身的任务。实时任务不同于Linux普通进程。它是以Linux的可装载的内核模块(Loadable Kernel Module,LKM)的形式存在的,需要运行实时任务的时候,将这个实时任务的内核模块插入到内核中去,实时任务和Linux一般进程之间的通信通过共享内存或者FIFO通道来实现。
(2)改变Linux内核的体系结构
Linux的内核体系采用的是Monolithic。在这种体系结构中,内核的所有部分都集中在一起,而且所有的部件在一起编译连接。这样虽然能使系统的各部分直接沟通,有效地缩短任务之间的切换时间,提高系统的响应速度和CPU的利用率,且实时性好;但在系统比较大时体积也比较大,与嵌入式系统容量小、资源有限的特点不符。而另外一种内核体系结构MicroKernel, 在内核中只包括了一些基本的内核功能,如创建和删除任务、任务调度、内存管理和中断处理等部分,而文件系统、网络协议栈等部分都是在用户内存空间运行。这种结构虽然执行效率不如Monolithic内核,但大大减小了内核的体积,同时也方便了整个系统的升级、维护和移植,更能满足嵌入式系统的特点需要。为此,要使嵌入式Linux的应用更加广泛,若将Linux目前的Monolithic内核结构中的部分结构改造成MicroKernel体系结构,可使得到的Linux既具有很好的实时性,又能满足嵌入式系统体积小的要求。
另外,Linux是一个需要占用存储器的操作系统。虽然这可以通过减少一些不必要的功能来弥补,但可能会浪费很多时间,而且容易带来很大的麻烦。许多Linux的应用程序都要用到虚拟内存,这在许多嵌入式系统中是没有价值的。所以,并不是一个没有磁盘的Linux嵌入式系统就可以运行任何Linux应用程序。
(3)完善Linux的集成开发环境
提供完整的集成开发环境是每一个嵌入式系统开发人员所期待的。一个完整的嵌入式系统的集成开发环境一般需要提供的工具是:编译/连接器、内核调试/跟踪器和集成图形界面开发平台。其中的集成图形界面开发平台包括编辑器、调试器、软件仿真器和监视器等。在Linux系统中,具有功能强大的gcc编译器工具链,使用了基于GNU的调试器gdb的远程调试功能,一般由一台客户机运行调试程序调试宿主机运行的操作系统内核; 在使用远程开发时还可以使用交叉平台的方式,如在Windows平台下的调试跟踪器对Linux的宿主系统做调试。但是,Linux在基于图形界面的特定系统定制平台的研究上,与Windows操作系统相比还存在差距。因此,要使嵌入式Linux在嵌入式操作系统领域中的优势更加明显,整体集成开发环境还有待提高和完善。
5 嵌入式Linux的发展及应用前景
关键词:Linux;操作系统;软件测试;软件工程;系统分析
中图分类号:G642 文献标识码:B
1引言
世界经济正在进入知识经济形态,信息产业是知识经济的支柱产业,其中软件产业具有很高的战略地位,是我国在知识经济时代的战略制高点和信息产业图强的重点,软件产业对于推动国民经济发展、优化产业结构、保证文化不受侵蚀、对出口创汇具有重大意义。
近几年,Linux发展迅速,国内Linux产业也在高速推进中,国外企业集团包括IBM、HP、Intel、Oracle、DELL、Sun、RedHat、Novell等现都是让Linux回归到商业路途阵营中的重要推进者,不管他们是以Linux为主业,还是将其作为一种战略投资。2005年以后的市场容量更是极速增长,Linux商业阵营已经初具规模。这些国际知名企业纷纷投入巨资在其全球研发中心建实验室和与高校联合组建其实验室。
从技术趋势看,操作系统实验室日益普及,软件工具、平台、环境开始广泛使用,对软件开发过程的研究开始转向对软件评测过程的研究,基于软件质量评测受到广泛关注,成为主要技术热点,开放性、标准化成为主要潮流。这些技术趋势反映出信息市场的需求,在我国软件实验室及软件产业的发展中应予以高度重视。
2操作系统实验室重要性分析
“Linux操作系统实验室”是软件实验室中最基础和重要的实验室。建设“Linux操作系统实验室”主要致力于Linux相关技术研究,目的是为中国广大Linux软件产品创新提供一个开放的实验和资源平台,为Linux软件产品的开发、测试、教育、认证等提供全面的技术支持。
建设“Linux操作系统实验室”,是顺应全球Linux发展趋势,加速培养Linux产业急需的人才,也是Linux各类产品诞生的摇篮。通过建设“Linux操作系统实验室”,可以开发、评测、认证出具有自主知识产权的操作系统软件,并实现相应的技术要求,通过成果转化,进行规模化和产业化的生产、销售和技术服务,促进我国基础软件、应用软件的研发、生产、销售、教育培训整个信息产业链的发展。“Linux操作系统实验室”建设将以安全性、可靠性、高效性、自主及开放性赢得广阔的前景,将为我国信息产业的飞速发展和GDP的增长做出更大贡献。
建设“Linux操作系统实验室”有利于软件产业的发展,成为软件产业及人才的基础设施,成为一种公共技术服务平台。实验室本着发展民族软件事业的精神,根据任务要求,开放思想、创新研究方法,本着消化吸收国内外同类先进技术、严谨工作、积极开拓的精神,在设计、开发、使用过程中坚持技术先进、功能适用、操作简单、性能高效的原则,不断创新。
3操作系统实验室职能分析
操作系统实验室计划设计如下职能:
(1) 开发、测试和认证服务
提供Linux操作系统开发及底层应用相关平台,建立开源技术资源数据库。
提供Linux软硬件可靠性、兼容性测试和认证服务。
提供基于Linux的应用系统测试服务(性能、功能测试等)。
(2) 咨询服务
实验室将为电子政务、电信、金融、能源、教育等重点行业提供基于Linux的行业解决方案咨询(包括系统架构设计、技术选型、项目实施监理等)。
供Linux技术情报。
(3) 培训服务
实验室将提供中高级Linux技术培训,培养高级Linux技能型人才。
Linux系统开发高级培训
Linux系统开发中级培训
(4) 协同开发服务
为企业提供先进的协同开发环境,帮助企业建立新的外包、监理和离岸开发的工作模式;
为企业和开源社区架起沟通的桥梁,为优秀的开源项目在企业中牵线搭桥,促进商业化,也为企业寻找新的利润增长点。
4操作系统实验室的技术特征分析设计
(1) 安全、稳定的内核分析设计
“Linux操作系统实验室”以单体内核为基础,并引入模块化机制,将文件系统、驱动程序、网络协议等用模块方式予以支持,从而分析操作系统达到了怎样的性能,具有怎样的灵活性。
(2) 优化内存管理,操作系统宕机分析设计
“Linux操作系统实验室”划分用户空间和内核空间,用户程序有很多的地址空间可供使用。同时采用内存分页技术,支持4K和4M(PAE方式下为2M)两种大小的内存页面,并可以用参数指定部分内存使用大页面方式而另外一部分使用小页面方式,适应系统中不同应用的特点,保证需要大内存的操作系统程序使用大页面以提高性能,而需要内存不多的各种小操作系统使用小页面以节省内存,同时内存换页的技术避免了因为内存管理而出现的数据溢出(即蓝屏)现象,测试操作系统蓝屏的问题,提升了操作系统的安全和稳定性。
(3) 支持多文件系统格式,异构系统间文件兼容与交换分析设计
“Linux操作系统实验室”支持的文件系统应是操作系统中最多的(包括NTFS)。当前Linux操作系统支持的日志文件系统有ext3、ReiserFS、JFS(IBM开发)、XFS(SGI开发)、VxFS(Veritas开发),其中JFS/XFS/VxFS由成熟文件系统移植而来,具备高稳定性、高性能和高可靠的特点,独立开发的加密文件系统模块,与具体文件系统无关,在各种文件系统上都可以实现细粒度/高强度的加密,并且具备很高的灵活性和易用性。
(4) 完善的网络环境分析设计
网络功能分析是“Linux操作系统实验室”的重要特色,作为Internet网络技术和异种机连接重要手段的TCP/IP协议就是在原Linux上开发和发展起来的。而TCP/IP是所有Linux不可分割的组成部分。因此,Linux在Internet服务器中占绝对优势。同时Linux操作系统支持所有常用的网络通信协议,包括NFS、DCE、IPX/SPX、SLIP、PPP等,提供主机系统,以及各种广域网和局域网相连接的环境,这也是Linux操作系统具有出色的互操作性(Interoperability)的根本原因。
(5) 支持异步I/O分析设计
“Linux操作系统实验室”支持异步I/O,且符合POSIX标准,使用POSIX异步I/OAPI开发的操作系统程序在Linux操作系统和其它操作系统之间测试其可移植性。
(6) 多种数据库支持能力分析设计
由于Linux具有强大的支持数据库的能力和良好的开发环境,所有主要数据库厂商,包括Oracle、Informix、Sybase、Postgress等,都把Linux作为主要的数据库开发和运行平台。从某方面来讲Linux操作系统就是作为强大数据库的基础进行开发的,支持能力的测试也很重要。
(7) 完善的开发接口分析设计
“Linux操作系统实验室”应该为软件开发人员提供丰富的开发工具,迄今为止,Linux工作站仍是软件开发厂商和工程研究设计部门主要的工作平台。有重大意义的软件新技术的出现几乎都在Linux上,如TCP/IP、WWW、OODBMS等。Linux操作系统是Posix标准的执行者,且开放源代码。由于开放源代码,Linux操作系统才得以高速的发展,更多的应用程序得以在Linux操作系统上开发,更多的功能在Linux操作系统得以实现。这也为Linux操作系统的后续开发提供了强大的后台支持。
(8) 安全分析,实现灾难自动恢复功能设计
目前操作系统安全中,用户最担心的问题是主机硬盘出现物理损坏将造成整个工作的瘫痪,“Linux操作系统实验室”使系统完成联合文件系统(aufs)的支持,实现了在硬盘出现物理损坏后可立刻通过一张光盘恢复运行整个操作系统的功能,使用户工作不受到影响,提高系统的可用性。
(9) 创新思维方法,测试兼容Windows应用的运行设计
在应用软件的兼容问题上,“Linux操作系统实验室”摆脱传统思维方法,科学的采用虚拟机技术,使用户不用修改Windows 的二进制文件,就可以运行,解决以往困扰Linux推广应用中Office文件不能兼容的测试难点。
(10) 迎合用户习惯,嵌入桌面环境支持KDE4.2,满足用户使用习惯设计
现有用户基本上都习惯使用微软提供的视窗界面和操作方法,对此,在使用方法上要积极创新,“Linux操作系统实验室”要采用了KDE4.2技术,实现视窗模式的用户界面,使用户在操作习惯上不需要进行改变,就可以完全掌握操作系统的使用。
(11) 办公环境支持,完全兼容MS Office文档格式设计
“Linux操作系统实验室”在办公环境方面,改变以往的依靠应用软件的支持才可以使用Office软件的问题,预置Office办公组件,完全支持XML、MS office 下的doc、Excel、ppt文件等格式,集成pdf输出功能,解决MS Office文档格式兼容的问题。
(12) 总体性能指标分析设计
“Linux操作系统实验室”结构的设计,直接影响到其稳定性和可靠性。因为操作系统需要肩负对硬件设备的兼容和对上层应用的支撑,所以系统的稳定性成为衡量操作系统好坏与否的最重要标志。
(13) 实验室可靠性分析设计
“Linux操作系统实验室”借助的是类UNIX原理和成熟的技术手段,是能达到大型主机(mainframe)可靠性要求的。它将在大中型企业中每天24小时、每年365天不间断地运行,需要极高的可靠性。
(14) 实验室可伸缩性分析设计
“Linux操作系统实验室”不仅有笔记本电脑、PC、工作站,甚至小型机,而且能在所有主要CPU芯片搭建的体系结构上运行。此外,由于“Linux操作系统实验室”要很好地支持SMP、MPP和Cluster等技术,使其可伸缩性又有了很大的增强。系统能支持的SMP,CPU数要达到几百甚至更多个,MPP系统中的节点甚至要超过1024个,支持的异种平台Cluster技术也将投入使用。它的伸缩性远远超过了传统操作系统实验室所能达到的水平。
(15) 实验室开放性分析设计
开放性是“Linux操作系统实验室”最重要的本质特性。由于开放系统深入人心,几乎所有系统宣称自己的产品是开放系统,确实每一种系统都能满足某种开放的特性,如可移植性、可兼容性、可伸缩性、互操作性等。但所有这些系统与开放系统的本质特征相去甚远,只有遵守GPL协议,及时公布新产品源代码,使开放性更加充分也更符合开放系统的要求。
(16) 实验室安全性分析设计
“Linux操作系统实验室”的设计参考Linux的体系结构,在安全性及代码结构安全性上,相对于Windows操作系统来说更胜一筹。首先,病毒代码不可以在“Linux操作系统实验室”上存在并破坏系统,因为无论是正常的代码还是病毒代码,都需要权限来运行,病毒代码将无法获得足够的权限来进行感染和破坏工作。“Linux操作系统实验室”对于病毒这种形式的破坏要具备免疫力,可以在测试期内减少大量的维护费用。其次,“Linux操作系统实验室”完全开放的模式,可以在极短的时间内获得足够的用户反馈,并及时修补安全漏洞。
(17) 实验室兼容性分析设计
“Linux操作系统实验室”可以使用在所有的硬件架构之上,从IBM的Z系列大型机到个人手中的移动电话。而在主流的企业级计算架构中,“Linux操作系统实验室”应该支持IA32、IA64、X86-64、IBM Power这些所有的计算平台,可以有Sun Sparc、HP小型机和Alpha计算机,它的兼容性比Windows操作系统主机更加强大,各个厂商也必将看中这一点,开发出更多的驱动程序和应用软件以适应快速的发展。
5发展方向与探讨
随着操作系统开发领域的应用和不断发展,操作系统实验室也由最初各种单机扩展到了针对操作系统半成品甚至过程产品的全过程网络测试,这是对操作系统测试的一种必然发展趋势。操作系统实验室也会随着这一思想,不断地扩展到产品各个生命周期中去,这将使操作系统的版本升级工作更加顺利,这也是我们以后需要进一步研究的内容。
参考文献:
[1] Daniel Bovet. 深入理解Linux内核[M]. 3版. 北京:中国电力出版社,2007.
[2] 赵炯. Linux内核完全剖析-基于0.12内核[M]. 北京:机械工业出版社,2009.
[3]Jonathan Corbet. Linux设备驱动程序[M]. 3版. 北京:中国电力出版社,2005.
[4]Jon Masters. Linux高级程序设计[M]. 北京:人民邮电出版社,2008.
[5] 朱少民. 全程软件测试[M]. 北京:电子工业出版社,2007.
[6] 于秀山. 软件测试新技术与实践[M]. 北京:电子工业出版社,2006.
[7] William E.Perry. 软件测试求生法则[M]. 北京:清华大学出版社,2004.
关键词:嵌入式操作系统 Linux
中图分类号:TP316.6
文献标识码:A
文章编号:1002-2422(2010)03-0134-02
嵌入式系统是以应用为中心,以计算机技术为基础、软件硬件可裁剪、适应应用系统。对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。是集软硬件于一体可独立工作的计算机系统,通常是更大系统中一个完整的部分。嵌入式系统开发包括硬件设计、软件基础平台的构建、应用开发等诸多步骤,是一项复杂的工作。
1Linnux系统
1,1系统特点
Linux源代码的开放性为嵌入式操作系统应用提供了非常广阔的前景,将Linux应用于嵌入式系统开发环境中已十分广泛。
Linux系统的主要特点:
(1)Linux系统是模块化结构且内核完全开放。
(2)强大的网络支持功能。
(3)Linux具有广泛的硬件支持特性。
(4)较强的可移植性。
(5)模块化程度高。
(6)源码公开。
(7)安全性及可靠性好。
(8)与UNIX完全兼容。
Linux系统的主要功能:
(1)存储管理。
(2)进程管理。
(3)文件系统。
(4)进程间通信,
1,2开发平台
系统硬件平台主要有现在流行的Intel公司的Stron-gARM系列、Motorola公司的DragonBall系列、NEC公司的VR系列和Hitachi公司的SH3、SH4系列等。
而系统软件操作平台由于受嵌入式系统硬件的限制。通常只具有极少的硬件资源。如主频较低的CPU、较小的内存、小容量的固态电子盘芯片DoC或DoM替代磁盘等。
1,3开发工具
(1)交叉编译环境,基于GUN工具的Linux可以有基于ARM体系结构的编译器、链接器、调试器以及实用程序。
(2)交叉编译和链接。将编写好的嵌入式软件经过交叉编译和交叉链接后通常会生成两种类型的可执行文件,可用于调试的可执行文件和用于固化的可执行文件。
(3)NP3辅助开发环境建立。主要依据宿主机和目标板的设计原则,实现开发环境的建立。
1,4系统主要缺点
(1)linux需要使用“指令列”的终端机模式进行系统的管理。
(2)没有特定的支持厂商。
(3)图形接口作的还不够好。
(4)linux在系统内核的实时性方面不足,具有较高的吞吐量。
2基于Linux嵌入式系统的体系结构
根据国际电气和电子工程师协会的定义,嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置”,其体系结构如下:
(1)嵌入式处理器,目前常用的嵌入式处理器可分为低端的嵌入式微控制、中高端的嵌入式微处理器、用于计算机通信领域的嵌入式DSP处理器和高度集成的嵌入式片上系统。
(2)嵌入式设备,目前常用的嵌入式设备按功能可以分为存储设备、通信设备和显示设备三类。
(3)嵌入式操作系统。主要包括两个操作系统,一类是面向消费电子产品的非实时系统,这类设备包括个人数字助理、移动电话、机顶盒等;另一类则是面向控制、通信、医疗等领域的实时操作系统,如WindRiver公司的VxWorks和QNX系统软件公司的QNX等。
(4)嵌入式应用软件。嵌入式软件就是基于嵌入式系统设计的软件,也是计算机软件的一种,同样由程序及其文档组成,可细分成系统软件、支撑软件、应用软件三类,是嵌入式系统的重要组成部分。嵌入式应用软件和普通应用软件有一定的区别,不仅要求其准确性、安全性和稳定性等方面能够满足实际应用的需要,而且还要尽可能地进行优化,以减少对系统资源的消耗,降低硬件成本。
3基于Linux嵌入式系统的软件开发方法
嵌入式系统的软件常用的开发模式是宿主机一目标机模式。主要以交叉编译工具环境为基础,研究嵌入式系统的软件开发方法。宿主机作为编译Linux内核以及上层的各种应用程序的编程平台,使应用程序能够运行在嵌入式目标板上,负责项目管理以及烧写系统内核等工作。交叉编译工具环境主要由binutils、gee和glibc等几个重要部分组成:
(1)binutils包括GNU的链接器ld、汇编代码编译器as、用来将文件打包重组的ar以及为ar打包的文件建立符号表的ranlib等工具。
(2)GNU是C编译器。
(3)glibc是GNU的C库,有时出于减小libc库大小的考虑,也可以用别的c库来代替glibc,例如uClibc、di-etlibc和newlib。
4结束语
摘要:介绍了如何制作一个基于Linux2.6.19内核的小型Linux系统,并将其移植到S3C2410开发板上。内容包括引导程序2.6.19内核、根文件系统的修改、配置、编译、移植等。
关键词:Linux2.6.19内核;小型Linux系统;S3C2410
引言
ARM9$3C2410微处理器与Linux的结合越来越紧密,逐渐在嵌入式领域得到广范的应用。目前,在便携式消费类电子产品、无线设备、汽车、网络、存储产品等都可以看到S3C2410与Linux相结合的身影。
S3C2410微处理器是一款由Samsung公司为手持终端设计的低价格、低功耗、高性能,基于ARM920T核的微处理器。它带有内存管理单元(MMU),采用0.18gm工艺和AMBA新型总线结构,主频可达203MHz。同时,它支持Thumb 16位压缩指令集,从而能以较小的存储空间获得32位的系统性能。
在众多嵌入式操作系统中,Linux目前发展最快、应用最为广泛。性能优良、源码开放的Linux具有体积小、内核可裁减、网络功能完善、可移植性强等诸多优点,非常适合作为嵌入式操作系统。一个最基本的Linux操作系统应该包括:引导程序、内核与根文件系统三部分。
与Linux2.4内核相比,2.6内核吸收了最新的技术,在性能、可测量性、器件支持和可用性方面有了大幅度提高;支持更多的体系结构、处理器、总线、接口和设备;标准化了内部接口;简化了扩展或添加新设备的步骤等。
本文着重介绍如何制作一个基于linux一2.6.19内核的小型Linux操作系统,并将它移植到S3C2410开放板上。内容包括交叉编译环境的建立,引导程序、2.6.19内核、根文件系统的修改、配置、编译、移植等。
系统的制作移植
建立交叉编译环境
要移植、开发小型Linux系统,首先要在安装了RedHat9或更高版本Linux操作系统的主机上配置交叉开发环境。交叉开发是指在开发主机上安装开发工具,编辑、编译目标板的引导程序、内核和文件系统,使其能在目标板上运行。
针对本次开发,需要安装arm-linux-gcc-3.4.1以及armv41-tools工具链。在安装完毕后,切记要将两者的路径分别添加到系统路径SPATH中。
引导程序
对于计算机系统来说,从开机上电到操作系统启动需要一个引导程序。嵌入式linux系统同样离不开引导程序,这个引导程序叫做B00tloader。通过这段小程序,可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统硬件环境,为最终调用操作系统内核做好准备。
vivi是韩国MIZI公司为其ARM9系列产品而研发的Bootloader,小而灵巧,这里选用它作为小型Linux系统的Bootloader。
首先要修改vivi源代码中的Flash分区信息,新的分区信息。
在vivi源码arch/s3c2410/smdk.c文件中作出相应的修改。
然后在配置菜单中导入smdk2410的默认配置,编译成功将在vivi源代码目录下生成所需的Bootloader文件,文件名为vivi。
接着,便可把vivi下载到目标板Hash的相应位置。
内核
・修改内核
首先,修改内核源码linux-2.6.19下的Makefile文件,指定目标代码类型与编译器:SUBARCH:=arm CROSS COMPILE:=/usr/usr/lo―cal/arm/3.4.1/bin/arm-linux-。
然后,在linux-2.6.19/arch/arm/mach―s3c2410/common-smdk.c中根据表1修改内核中的Flash分区信息。这里提醒读者,2.6.16(含)以前内核的源码中没有Flash分区信息,所以需要增加新的分区信息;而在2.6.17(含)以后内核的源码中已含Flash分区信息,需要的只是修改分区信息。
内核Flash分区信息必须与vivi的Flash分区信息相一致。因为,vivi的Flash分区中的地址是内核及文件系统下载到Nand flash的真正地址;而内核在启动时读的却是内核Flash分区设定的地址;所以,若两者不同,则很可能导致不能正常启动内核或读取文件系统。
最后,修改linux-2.6.19/drivers/mtd/nand/s3c2410.c,禁止Nand flash差错检测:
chip->eccmode=NAND_ECC NONE;。
・内核的配置编译
在配置菜单中导入内核对smdk2410的默认配置,再在此基础上选择所需的功能。如Nand Hash及MTD设备的支持,Cramfs文件系统的支持等。
配置完毕,在终端输入编译命令“make”进行编译。若内核源码编译成功,将在linux-2.6.19/arch/arm/boot/下生成内核映像文件zlmage。
最后,在vivi命令提示模式下使用下载命令,将内核映像zImage加载到开发板Flash中的适当地址。
根文件系统
Linux系统中的文件和设备是通过文件系统来组织的。文件系统的存在使得数据和设备可以被有效而透明地存取访问。一个linux的最简根文件系统应该包括支持linux系统正常运行的基本内容,包括系统使用的软件和库,以及所有用来为用户提供基本支持的架构和指令。
在根文件目录rootfs下建立bin、dev、etc、lib、proc、sbin、root、tmp等一系列必备的目录,把所需的配置文件、动态函数库放到相应的目录。采用BusyBox是缩小根文件系统的好办法。BusyBox以很小的体积集成了最常用的linux命令和应用程序,大大简化了制作linux根文件系统的过程。
有一点必须指出的是,在2.6.12(含)之前的内核通常是用devfs来管理位于/dev下的所有块设备和字符设备;但在2.6.13(含)之后的内核已不支持devfs,而转用udev来管理/dev下的设备,详见。所以,针对2.6.19内核,要使系统启动后进入BusyBox控制台,还需在/rootfs/dev下添加控制台设备文件:“[root@localhost dev]#mknod-m 600 consolec51”。
目前,linux已经能够支持几十种文件系统格式,如常用的Cramfs、Jfss2、Yaffs等。Cramfs是一种只读的闪存文件系统,可以保护系统的基本设置不被更改。根文件系统就使用Cramfs格式。
使用Cramfs制作工具mkcramfs把根文件目录制作成映像文件:rootfs.cramfs。
根文件系统制作完成,在vivi命令模式下把rootfs.cramfs下载到Flash的合适位置。
至此,一个基于2.6.19内核的小型Linux系统便成功地制作完毕,并移植到$3C24109t:发板上了。
板子加电后便可看到系统的启动信息,最终进入BusyBox控制台。
关键词:Linux;操作系统;中职生;新形势
中图分类号:TP316.81-4
Linux操作系统是1991年芬兰大学生Linus在Minix基础上重新开发的类Unix操作系统,它以安全稳定、开源免费等特点越来越引起社会的重视,美国、印度、日本、台湾都高度重视Linux操作系统的推广与应用,我国政府也高度重视,Linux在网络管理系统、嵌入式系统中应用广泛。
随着Linux在国内的普及,企业对Linux人才的需求呈现多元化趋势。据权威的Linux认证机构red hat公司调查,我国正处在一个Linux的发展关键期,瓶颈效应明显。我国的Linux教育处于初级阶段,Linux的使用环境基础不如Windows,学生学习Linux时间短,前期基础知识的结构搭建缺少梯度,所学知识无法转化成实际的岗位技能,如何改变Linux课程的教学格局变得尤为重要和迫切。
1 Linux让计算机教学步入正轨
计算机技术的发展步入了成熟期,进入了多元化的纵向发展。对中职计算机专业的学生来说,应该掌握基本的计算机原理和理论。但现在的中职计算机教学主要是以微软可视化产品为主,譬如Windows XP、Office,哪怕是DHCP、DNS等网络管理也大都只讲如何用鼠标点点这儿,指指哪儿,完全变味成了软件应用的培训班。这些课主要在讲操作,而原理性的东西基本不讲,计算机的专业学生,不学习计算机的基本工作原理,就无法培养学生的学习兴趣,学生的知识培养有宽度没深度,造成计算机学生的专业平庸化,学习能力差,学生没有特长,没有可持续性的发展,发展前景暗淡,所以说学习Linux是计算机教学本质的回归。
2 Linux的培养目标
围绕着学校“炼技能专长,成行家里手”的办学理念,针对学生的实际情况,对Linux操作系统的培养目标做了如下设定:
(1)以培养学生实际动手能力为宗旨,走“学练结合,强化技能训练,深化知识理解”的教学路线;(2)针对职校生理论基础弱、英文功底差的现状,采用中文版教材,培养学生掌握最基础的操作系统原理,让学生掌握基本的Linux操作和基础编程;(3)培养学生的学习动力,在要求学生完成基本要求的基础上,培养和鼓励学生参与操作系统相关的社会需求调研,激发学习兴趣,引导学习方向。
3 课程的开设基础
学习Linux课程之前必须要有一定的专业基础,这些课程对于学习Linux操作系统起到至关重要的作用。不管学习什么课程,对课程掌握的快慢,往往取决于基础的搭建,基础扎实的学生听老师讲一遍就能听懂,甚至都可以触类旁通,而没有基础的学生听多少遍都是丈二和尚摸不着头脑,所以先修的专业基础课非常重要。同样对于计算机专业的学生来说,制定良好的课程体系结构,可以使教学达到循序渐进的效果。就Linux操作系统课程来说,他的先行课程情况图一所示。
4 课程开设的教材选择
专业课程的书籍种类繁多,水平参差不齐,对于职专的学生来说,教材的选择是关键。一本适合学生的教材可以很好的调动学生学习的积极性,培养学生的学习兴趣。教材选择过易或过难都不好,教材太过粗浅,学生对待学习的态度会很消极,不专心;教材过难,学生对知识的学习就会产生畏惧心里,总是认为自己学不会,职校生太多的失败经验,让他们容易放弃对这门课的学习。
中职生的自学能力不强,因此通俗易懂成为教材选择的依据,市面上针对中职生的Linux教材较少,内容大都是Linux教材培训的精简版,文字过于精练,市面上很少有适合中职生的教材。最后,我选了台湾Vbird写的一本《鸟哥的LINUX私房菜:基础学习篇》。Vbrid是台湾著名的Linux教学网站的版主,他写的文章通俗幽默,在大陆和台湾有很高的人气,这本教材就是他网站上的Linux教学内容的汇编和整理,比较适合中职学生学习。
5 教育教学的开展
5.1 教学方向的选择。Linux是一个功能强大的操作系统,国内外专家对Linux教学内容有两种观点:一种是基于命令行方式,教给学生管理与维护的命令,认为这是Linux的精华所在。另一种观点认为基于X桌面,教给学生系统的使用与管理的操作方法,他们认为用这种方式开展教学,学生需要记忆的命令不多,学习难度不大。针对中职学生的自身特点,我选择了第二种教学观点为教学方向,在这一阶段需要培养学生的学习兴趣,类似Windows界面Linux操作系统,让学生有似从相识的感觉,内心不会有抵触情绪,上手快,学生有成的就感,学习的积极性也高。
5.2 教学方法
(1)多媒体的使用。Linux操作系统的学习倾向于系统的管理与应用,并不涉及太多的理论及公式,知识点较多,可借助于多媒体进行教学。多媒体教学把枯燥的计算机内容转化为生动的图像、交互和视听媒体,把教学内容直观化,有利于学生更好地接受知识。(2)任务驱动实验教学。运用任务驱动教学法于Linux操作系统教学,在形式上是:提出任务师生共同分析完成任务的方法和步骤适当讲解或协作学习完成任务实践交流或归纳。任务设计是关键环节,课堂教学中,教师和学生通过创设的问题情景,把所要学习的知识巧妙地隐含在一个个任务当中,根据学生的知识、能力基础和培养目标,结合任务驱动教学法的项目任务,使学生完成任务,达到掌握知识的目的,选取的项目任务要有实际的应用价值。
在教学过程中,针对大多数学生对实际应用知识比较感兴趣的特点,列举一些现实中的例子,理论联系实际。在实例分析过程中,以启发的方式进行,先设置一些如多用户、访问权限、文件相互传输等问题,促使学生大胆猜想,踊跃回答所提出的问题,并引导学生有一个正确的思路;之后再解答实际工作中是怎样处理类似问题的。一般要遵循“设疑――思考――提示――解答”的思维过程,通过教学互动,实现课堂上的师生互动,以提高课堂教学的质量。使学生更好地掌握Linux操作系统的知识并能灵活应用。
6 课程考试方式的转变
过程化成绩考核,取代原有的期中、期末考试。学生从小学到初中,学习能力有了一定的差距,如果还一味的用成绩评定学生,学生的学习积极性会在学习前就消失。教师对学生的考核放到平日,对学生日常学习的态度评价,学习的方法考评,课后的作业完成质量等多个环节打分,这套考核体系可以很好的帮助学生,建立自我学习体制,培养学生的学习能力。考核制度的转变,意味着教育方向的调整。
7 课程的不足之处
Linux缺少认证考试。认证考试是激发学生学习兴趣,提高教学质量的一项有效措施。社会上关于Linux的认证考试,由于考试费用较高,考试层次较高,中职生的参与空间很小,针对中职生的Linux认证考试还没有形成。
参考文献:
[1]苑益军,张致付.浅谈“大型地震资料处理软件系统”课程的教学与实践[J].高等教育,2007.
[2]黄丽娜等.Red Hat Linux 9.0基础教程[M].清华大学出版社,2007.
[3]谭浩强.高等学校计算机基础教育改革的新阶段[J].计算机教育,2003(12).