开放源码 篇1
关键词:气象信息服务,开放源码,操作系统,网页开发技术
1、概述
HTTP1.1 (超文本链接协议1.1版本) 是HTTP协议的最新版本, 基于开放源码的Linux操作系统是近年来发展最快、影响最大、最受欢迎的网络操作系统。Linux最早是在1991年由芬兰黑客Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的, 但现在它以独有的占用空间少、高效、健壮、功能齐全、符合POSIX标准和安全等特性, 特别是它可以免费得到以及源码开放的特性, 赢得了主流软硬件厂商、开放人员和用户的青睐。
由于Linux源码的开放以及所具有强大的网络功能, 同时考虑到网站建设的投资规模和管理成本, 我们在构建气象服务网站时采用它作为操作系统, 同时结合开放源码的WWW服务器Apache、数据库服务器MySQL、Web开发语言PHP等环境进行建立网络应用开发的基础技术平台。在网站开发过程中采用的开放源码不仅极大的降低采购成本, 而且系统的稳定性与性能也非常高。
2、操作系统介绍
我们规划整个网站系统架构在以LAMP为核心组成部分的开放源码软件之上, 系统结构图如图-1所示。操作系统采用RedHat Linux AS V3.0 (内核版本为2.4.23) , WWW服务器采用Apache HTTP Server V2.0.54, 数据库使用MySQL4。应用层的编程语言选取PHP 5+Perl的组合, 同时Web层采用squid实现CACHE服务, 用以提高Web服务的响应速度。
RedHat Linux AS V3.0本身是Red Hat针对企业级应用服务开发的专用服务器操作系统, 应用服务器专门发布的版本, 是官方声称Red Hat Enterprise Linux家族内最强的版本, 并是主要的作业系统和企业架构方案。Red Hat Enterprise Linux AS成为大型企业部门及计算中心的最佳解决方案。默认支持邮件、文件、打印、防火墙、DNS、LDAP、SSL、WWW、认证等服务。
Apache是世界排名第一的Web服务器, 根Netcraft所作的调查, 世界上百分之五十以上的Web服务器在使用Apache。A-pache几乎可以运行在所有的计算机平台上。其支持最新的HTTP/1.1协议, 具备简单而且强有力的基于文件的配置 (HTTPD CONF) , 支持通用网关接口 (CGI) 和module模式, 支持虚拟主机、HTTP认证、SSL、SSI、日志、代理、会话跟踪、FASTCGI, 同时集成了强大的脚本开发工具PERL。
MySQL是一个广泛应用, 性能优异的关系数据库系统软件, 其具备并发能力强、响应速度快、管理简洁等特点, 可支持各种主流的操作系统平台。
PHP是一种嵌入在HTML并由服务器解释的脚本语言。它可以用于管理动态内容、支持数据库、处理会话跟踪, 甚至构建整个电子商务站点。它支持许多流行的数据库, 包括MySQL、PostgreSQL、Oracle、Sybase、Informix和Microsoft SQL Server。
3、软件部署
3.1 获取
从正规销售渠道购得正版RedHat Linux AS V3.0光盘。
从http://httpd.apache.org/download.cgi下载Apache软件包httpd-2.0.54.tar.gz。
从http://dev.mysql.com/downloads/mysql/4.1.html下载MySQL软件包mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz。
从http://www.php.net/downloads.php下载PHP 5软件包php-5.0.4.tar.gz。
3.2 解压
在安装完RedHat Linux ASE V3.0操作系统后 (不要安装随盘自带的Apache、Mysql、PHP模块) , 将源码包拷贝到/home/install下。执行以下命令:
3.3 编译安装
由于PHP编译时需要MySQL支持, 必须首先安装MySQL:
接下来我们使用源码包提供的脚本来初始化数据库。
将MySQL的启动命令添加到系统的/etc/rc.d/rc.local文件中, 这样每次启动系统时都会自动启动MySQL。
MySQL守护进程启动后, 可以利用MySQL客户端"/usr/local/mysql/bin/mysql"来测试MySQL是否正常运行。
以Dynamic Shared Object模式安装PHP模块前需要以下方式安装Apache:
在Apache 2安装完毕后, 再编译安装PHP模块。
[--with-apxs2表示以DSO模式编译成apache 2的模块;--with-mysql表示支持mysql, 需要提供mysql的安装目录;--enable-track-vars允许自动提取cookie和跟踪用户提交的变量。
修改在Apache 2的设置文件httpd.conf加入下面两行代码后保存。
使用/usr/local/apache2/bin/apachectl start即可启动apache服务器。当然你也可以将系统启动脚本中加入Mysql和Apache的启动命令, 使之成为自动启动的服务。
4、Web服务器动态网页开发技术
PHP是一种广泛用于Open Source (开放源码) , 并可以嵌入HTML, 跨平台、多用途的脚本语言。它的语法接近C、Java和Perl, 易于学习。该语言的主要目标是让Web开发人员快速的书写动态网页, 然而, PHP的功能并不局限于此。PHP普遍被认为可以更快和更有效地实现复杂的编程任务, 而且正是因为它的更稳定以及占用更少资源的优点成为开发B/S结构系统的必备的WEB脚本设计语言。
PHP目前拥有丰富的函数库, 外围有数据库、图象处理、安全认证、数学计算、正则表达式、网络通信等上百种函数库支持, 同时PHP 5也支持面向对象的开发。在开发河北政务信息网站过程中我们重点采用PHP的高级特征解决了两类典型的网页开发问题。
4.1 MVC的设计模式
MVC最早是在SmallTalk语言的开发过程中总结出的一种设计模式, M、V、C分别代表了"模型"、"视图"和"控制", 目的就是让不同的开发角色在大中型项目中各司其职。在网络应用程序的开发中, 可以用下图来表示各概念之间的关系。
图-2展示了一个简单的WEB应用程序, 用户在View即浏览器上看到的信息是Model即数据库服务器上的内容, 但在这之前经过了Control应用服务器加工。开发人员负责的就是建立数据结构、处理数据的逻辑以及表示数据的方法。
传统的Web应用往往采用脚本内嵌HTML代码的方式开发, 但当Web系统上了一定规模之后, 基于CGI过程模式的开发已经无法胜任网站的开发和维护, 最迫切的需求就是将页面与逻辑处理剥离, 实现MVC的应用设计模式。这需要模板技术来实现, 模板是一种联系逻辑和表示的中间层, 它是结合了HTML和脚本语言特征的一种表达方式。利用模板, 表示层可以按照用户所希望的格式来显示经过逻辑层处理过的数据。而逻辑层的处理更为专注无须过多考虑显示层的问题, 使得开发效率和代码可读性大大增强。我们采用的SMARTY是目前最流行的PHP模板引擎之一, 实现对PHP应用中逻辑和表示的分离。SMARTY作为PHP的官方推荐引擎 (http://smarty.php.net) , 本身具备功能全面, 支持模板、自定义标签、预编译、面向对象、插件技术、缓存技术等特性。SMARTY是一个使用PHP写出来的PHP模板引擎, 它提供了逻辑与外在内容的分离, 简单的讲, 目的就是要使用PHP程序员同美工分离, 使用的程序员改变程序的逻辑内容不会影响到美工的页面设计, 美工重新修改页面不会影响到程序的程序逻辑, 这在多人合作的项目中显的尤为重要。
4.2 统一的数据访问接口
对于Web开发, 一个非常重要的功能就是实现数据库的存取。如何寻求一种统一的数据库开发接口, 对于提高程序的可移植性和改进系统的可读性都有非常大的帮助, 我们使用PHP的一个外围软件项目ADODB实现了这种功能。ADODB是Active Data Objects Data Base的简称, 它是一种PHP存取数据库的函式组件。它允许程序员以一致的方式来存取数据库, 从而忽略后台数据库的种类的差异。它的优势是能让程序员在转移数据库平台时, 可以不用花费大量时间重新书写代码。它支持以下数据库:MySQL, PostgreSQL, Interbase, Firebird, Informix, Oracle, MSSQL, Foxpro, Access, ADO, Sybase, FrontBase, DB2, SAP DB, SQLite, Netezza, LDAP, and generic ODBC, ODBTP等。
传统的PHP程序可能要使用特定的函数库, 比如对于Mysql数据库而言要采用Mysql库函数来做开发, 对于Oracle数据库则要考虑选用OCI8库函数。利用ADODB, 我们只要实例化一个ADODB数据对象, 就可以对数据库进行统一的操作, 而无须关心其是Mysql还是Oracle, 而且ADODB内嵌了非常强大的Web开发功能, 他的两个基础类ADOConnection和ADORecordSet支持自动生成Update和Insert语句、换页卷页功能、Transaction模式、日期处理、数据字典、column管理、取单笔记录、取全部记录、卷动、选单生成等功能。
5、结论
到目前为止, 我们已经利用以上的开放源码平台开发了新闻发布系统和天气信息显示查询系统等应用软件。这些软件系统在Linux平台上运行稳定、可靠、安全, 经实践检验这套Linux+Apache+MySQL+PHP站点服务解决方案是可行的, 给我们带来了良好的效益。利用开发源码系统构造的河北政务信息网站, 依托开放源码领域丰富的软件资源, 不断推出新的基于Web的气象网络服务和气象信息产品, 满足公众和专业人士对气象信息的需求, 河北政务信息网站在气象公众服务和灾害预警领域已经成为最重要的网络通道之一。
参考文献
[1].LINUXAID.《GNU/Linux高级网络应用服务指南》.北京:机械工业出版社, 2001.
[2].JAMES LEE, BRENT WARE.《开放源码网站开发指南.》.北京:清华大学出版社, 2003.
[3].SCOTT MANN, ELLEN L.MITCHELL, MITCHELL KRELL.《LIN-UX系统安全--开放源码安全工具管理员指南》.北京:中国水利水电出版社.2004.
开放源码 篇2
在接受BetaNews网站采访时,Facebook网站的发言人通过一份书面声明证实了这一消息。这位发言人表示: “我们正在实施一项开放源码计划,目的是为了帮助网络应用开发人员更好地理解Facebook平台,更容易地开发应用。这种过程可能是帮助他们测试社交应用、创建开发工具,或者是优化的应用。”
这位发言人表示,随着Facebook平台继续走向成熟,将平台背后的基础设施转为开源是一个自然而然的事情,开发人员可以创建更丰富的社交应用,在这个生态系统中共享他们的知识。
在这之前,Facebook已经推出了一个应用开发服务,让开发人员尝试为Facebook开发窗件的整个流程。此外Facebook还宣布,将把自己的应用基础架构免费向其他社交网站提供授权,以便它们运行为Facebook开发的窗件。
开放源码 篇3
摘要:综述开放源码的嵌入式仿真环境SkyEye:介绍SkyEye的背景、目标和存在的意义,对目前SkyEye本身进行简要的技术分析;介绍SkyEye上已经移植成功的操作系统和典型应用。讲述SkyEye正在开展的工作和将来的发展计划。
关键词:SkyEye 仿真 μClinuxμ/OS-II Linux 嵌入式系统
1 SkyEye的目标与意义
1.1 SkyEye产生的背景
操作系统是软件产业的基础和龙头,能左右软件产业发展的方向,是世界软件产业最大的利润来源。对于后PC时代和普适计算(pervasive computing)而言,嵌入式系统无处不在,其中关键的软件核心技术包括嵌入式操作系统和网络互联中间件等。
对于想进行嵌入式系统软件开发和学习,或者想研究嵌入式Linux等操作系统和一些底层系统软件(如TCP/IP等)的研究和开发人员来说,可能存在如下几方面的问题:①经常苦于经费不足,缺少足够的硬件开发板和完善的软件开发环境;相关的书籍对一些最新软件的分析还不够全面,无法深研究和开发嵌入式软件。②高层次的软件设计和开发一般不用过多考虑底层硬件的实现细节,如果直接处于一具体的硬件环境下,在开发和研究中可能会陷入硬件的具体细节中不能自拔,而不能把精力放到高层次的软件设计和开发上。③如果硬件开发环境不太稳定(这种情况经常见到),且对身体的硬件不是很了解,则可能在排除问题上花费大量不必要的时间。
对于想了解、学习一般操作系统的实现原理、Linux/μClinux操作系统或TCP/IP等系统级软件的实现的人员,目前一般采用的方法是看书和读源代码。这是一种静态的学习方法,但效率较低,比较枯燥,缺少一种动态和亲自实践的感觉。要想深入分析和开发软件,就要动手编程,不能只是看看书,读读代码,只有通过亲手实践才能够掌握软件设计的核心内容。
上面所指出的问题和需求促使了SkyEye项目的诞生。
1.2 SkyEye的目标和意义
SkyEye是开源软件(OpenSource Software)项目,中文名字是“天目”。SkyEye的目标是在通用的Linux和Windows平台实现一个仿真集成开发环境,模拟常见的嵌入式计算机系统;可在SkyEye上运行μClinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP、图形子系统、文件子系统等),并可对它们进行源码级的分析和测试。SkyEye的推出具有下面三方面的意义。
①通过SkyEye仿真集成环境可以很方便地进入嵌入式系统软件学习和开发的广阔天地中。尤其对于缺少嵌入式硬件开发环境和软件开发环境的用户来说,它将是一个非常有效的学习工具和开发手段,因为SkyEye的整个软件系统都是Open Source的,且基于GPL协议(μC/OS-II除外)。因此,如果要学习Linux操作系统或者进行嵌入式系统开发,但苦于没有硬件支持,SkyEye仿真环境软件是一个很好的选择!
②如果想研究与具体硬件无关的系统软件(如TCP/IP协议栈等),采用SkyEye可以有效地提高工作效率,因为你可以直接在μCOS-II和μClinux for SkyEye上进行开发和调试,而与具体硬件打交道的各种Driver已经存在,且有源码级调试环境,只需关心高层的逻辑设计和实现就可以了。
③SkyEye本身作为一个开放式的项目体系,可以划分为多个独立的子项目系统。通过参与SkyEye的各个子项目,与大家共同交流、协议,可以进一步学习、分析、精通Linux内核,掌握ARM嵌入式CPU编程。
在32位嵌入式CPU领域中,ARM系列CPU所占比例相当大,而ARM7TDMI是其中使用最广泛的CPU之一,因此,SkyEye首先选择了ARM7TDMI作为仿真的目标CPU。目前,SkyEye上可运行并进行源码级调试的有μClinux、μC/OS-II操作系统和LwIP(一个著名的嵌入式TCP/IP实现)、ARM Linux等系统软件。SkyEye可用于学习、分析、开发这些系统软件,了解ARM嵌入式CPU编程,而这一切都可在一个集成环境中完成。如果能够改进SkyEye本身,则大家对ARM、8019Ethernet网络芯片等硬件的了解也会更深入。
SkyEye并不能完全取代开发板等硬件的功能,但通过它可以比较容易地进入到嵌入式软件开发的广阔天地中。由于SkyEye建立在GDB基础之上,使用者可以方便地使用GDB提供的各种调试手段对SkyEye仿真系统上的软件进行源码级的调试,还可以进行各种分析,如执行点分析、程序执行覆盖度分析等。由于SkyEye提供了源代码和相关文档,有经验的用户完全可以修改和扩展SkyEye来满足自已的需求。
2 SkyEye的技术分析
2.1 SkyEye总体结构
SkyEye基于GDB/ARMulator,模仿了一个完整的嵌入式系统,目前包括CPU、内存、I/O寄存器、时钟、UART、网络芯片、MMU、Cache,将来还会仿真LCD、USB等各种硬件。在SkyEye上运行的操作系统和各种系统软件“意识”不到它们是在一个虚拟的计算机系统上运行。
SkyEye从总体上分为四个层次。
①用户接口模块:包括命令行用
户界面和图形用户界面,及时处理用户的输入命令,并把相关调试数据输出给用户。
②符号处理模块:主要处理执行文件的头信息,解释执行文件中嵌的debuger调试信息,管理符号表,解析源代码表达式,定位源代码中的语句位置和机器码的位置关系等。
③目标控制模块:主要完成执行控制(如执行断程序,设置中断条件等),程序栈结构分析,对具体目标硬件的控制(如本地调试、远程调试和仿真调试的控制)。
④目标仿真模块:主要是模仿计算机系统中的主要硬件(包括CPU、内存和各种硬件外设等)的执行,对执行文件的机器指令进行解释,并仿真执行每一条机器指令,产生相应的硬件响应。
2.2 SkyEye模拟的硬件介绍
目前,SkyEye仿真的CPU包含不带MMU的AT91X40和带MMU的ARM720T,它们都是基于ARM7TDMI CPU内核的。SkyEye还模拟了其它硬件外设,如串口、网络芯片、内存、时钟、网络HUB等。SkyEye的CPU仿真主要完成对ARM指令集处理、寄存器操作和CPU流水线处理等的仿真。
ARM720T具有MMU(Memory Management Unit),即存储器管理单元,是用来管理虚拟内存系统的操作。MMU的两具主要功能是:
*将虚地址转换成物理地址;
*控制存储器存取允许,MMU关掉时,虚地址直接输出到物理地址总线。
MMU本身有少量存储空间存放从虚拟地址到物理地址的匹配表,此表称作TLB(Translation Lookaside Buffers)。TLB表中保存的是虚地址及其对应的物理地址、权限、域和映射类型。当CPU对一虚拟地址进行存取时,首先搜索TLB表以查找对应的物理地址等信息。如果没有查到,则进行查找Translation Table,称为TTW(Translation Table Walk)。经过TTW后,将查到的信息保存到TLB,然后根据TLB表项的物理地址进行读写。
MMU/Cache的仿真主要是依据ARM720T处理器的体系结构进行的。ARM720T可以看成ARM7TDMI加上MMU/Cache模块,主要是仿真控制MMU/Cache的寄存器结构、TLB结构、Cache结构、Translation Table Walk的控制逻辑以及在此基础上内存的读取操作。
对于网络部分,SkyEye仿真的是兼容NE的8019as以太网网络芯片,支持8位数据通路,仿真实现了远程DMA信道和本地DMA信道两个部分。本地DMA完成控制器与仿真网络的数据交换,主处理器(Host)收发数据只需对远程DMA操作。当主处理器要向以太网络发送数据时,先将一帧(frame)数据经过远程DMA信道,送到以太网络控制器中发送缓存(Ring Buffer),然后发出传送命令。以太网络控制器在送出前一帧的数据后,继布完成此帧的发送。以太网络控制器接收到的数据通过MAC比较后,由FIFO存到接收缓冲区,收满1帧后,以中断或缓存器标志的方式通知主处理器。
为了有效支持网络仿真,SkyEye还设计了一个虚拟HUB-vnet,可以在一台Host主机上支持多个在SkyEye上运行的OS实例进行网络的通信互联,从而更有助于针对网络方面的开发和研究。
3 SkyEye上已经移植成功的OS
3.1 μClinux
μClinux是应用于嵌入式设备的一个Linux版本,是主要针对不带MMU的CPU而设计的Linux系统。ΜClinux系统对于内存的访问地址都是实际的物理地址。操作系统对内存空间没有保护(这实际上是很多嵌入式系统的特点),各个进程实际上共享一个运行空间(没有独立的地址转换表)。目前,SkyEye上可以运行μClinux的最新版本。
3.2 μC/OS-II
SkyEye作为一个基于Atmel AT91X40开发板的仿真环境,在它上面可以移植各种适合地嵌入式开发应用的操作系统,将μC/OS-II移植琶SkyEye上是我们对此做的又一次尝试。ΜC/OS-II是一个简单、高效的嵌入式实时操作系统内核。自从1992年以来,已经被应用到各种嵌入式系统中。目前,它可以支持x86、ARM、PowerPC、MIPS等众多体系结构,并有上百个商业应用式系统中。目前,它可以支持x86、ARM、PowerPC、MIPS等众多体系结构,并有上百个商业应用实例,其稳定性和可用性是经过实践验证的。同时,它的源代码公开,任何人都可以从www.ucos-ii.com的网站上获得全部源码以及其在各种体系结构平台上的移植范例。无论是通常学习μC/OS-II来了解实时操作系统的构造,还是直接使用它来针对具体应用进行开发,都是非常方便和可行的。目前,SkyEye支持的μC/OS-II内核为2.5.1版。
3.3 ARM Linux
ARM Linux属于Linux标准发行内核中的一个分支,支持MMU的ARM系列CPU,如ARM720T、ARM920T、Intel StrongARM等。我们目前在SkyEye上仿真的CPU型号为CPU内核是ARM Linux内核选择的本系结构为CLPS711x/EP72lx,它支持ARM20T、UART串口等硬件,都是SkyEye目前仿真的硬件。目前SkyEye已经成功运行了版本为2.4.18的ARM Linux。有关ARM Linux的更多信息请访问www.arm.linux.org.uk/。
4 SkyEye目前支持的网络协议栈
4.1 μCLinux上的TCP/IP
μClinux上面有完整的TCP/IP协议栈,但缺少对SkyEye的网络仿真芯片(仿真兼容NE2000的8019as)的驱动程序。我们实现的驱动程序主要包括了初始化、中断处理、接收数据包的处理、发送数据包的处理等工作,再加上SkyEye的虚拟HUB-vet的协议,使μClinux on SkyEye的多个实例之间、实例与主机之间可以进行TCP/IP通信。
4.2 μC/OS-II上的LwIP
μC/OS-II本身没有TCP/IP协议栈,目前的一些第三方TCP/IP支持都是完全商业化的,很少给出源代码,影响了μC/OS-II的研究和推广。通过把开放源代码的TCP/IP协议栈LwIP移植到μC/OS-Ii上来,就获得了一套可免费研究、学习的嵌入式网络软件平台。其系统示意图如图1所示。
LwIP是瑞士计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP的含义是Light Weight(轻型)IP协议。LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。我们目前使用的是LwIP的最新稳定版V0.5.3。
LwIP协议栈在设计时就考虑到了将来的移植问题,因此把所有与硬件、OS、编译器相关的部分独立出来,放在/src/arch目录下。因此,LwIP在μC/OS-II上的实现就是修改这个目录下的文件,其它的文件一般不应该修改。
我们在SkyEye中所仿真的网络芯片是NE2000,所以目前实现的网络设备驱动是针对NE2000的,其它类型的网络芯片驱动可以在LwIP的网站上找到。现在LwIP已经顺利运行在μC/OS-II上了,目前可以从Host主机和SkyEye上运行的μC/OS-II+LwIP顺利进行TCP/IP的通信。
4.3 更多的TCP/IP协议栈
除了LwIP之外,还有很多开源的嵌入式TCP/IP协议栈。它们各有各的特点,有些功能较全面,有些占用资源出奇的少,能适合不同场合的需要,而且多接触一些不同的思路,对协议和编码能有更好的理解。其中的代表有tinyTCP、ucIP、uIP等,它们的基本思路应该都是一致的。SkyEye小组希望能有列多对TCP/IP协议栈感兴趣的人参与进来,特别是ucIP,实际上它是专门为μC/OS-II设计的。
5 SkyEye上已经实现的简单应用
5.1 LwIP上的Echo服务器
做完LwIP的移植修改工作以后,就可以在μC/OS-II中初始化LwIP,并创建TCP或UDP任务进行测试了。值得注意的是:LwIP的初始化必须在μC/OS-II完全启动之后也就是在任务中进行,因为它的初始化用到了信号量等与OS相关的操作。
LwIP提供了两种API,供用户使用这个协议栈。
第一种是BSD API。这种API非常像BSD标准UNIX中的socket API,所以对其这样命名。它跟普通的socket API一样,是基于open-read-write-close模型的。(本网网收集整理)它提供了一种标准的方法来使用LwIP协议栈。但这种API效率较低,消耗资源较多,因此不推荐使用。
第二种称为RAW API。这种API接口实际上是直接使用了LwIP协议栈中的回调函数(call back functions),从而使应用程序和协议栈代码能够更好地集成在一起,运行同一个线程即任务中。RAW API相对于普通BSD API来说,速度更快,消耗内存资源更少;唯一的缺点是编程复杂,对程序员的要求高。考虑到我们是在嵌入式设备中工作,这样的缺点是可以接受的。事实上,BSD API就是用RAW API来实现的。
利用Berkley API实现的tcpecho_thread是一个TCP Echo服务器,监听7号端口,这实际上是实现了RFC中最简单Echo协议:收到什么,就往回发同样的内容。编译运行后,用ping IP地址命令可以得到ICMP reply响应。用telnet IP地址7(登录7号端口)命令可以看到Echo Server的回显效果。说明ARP、ICMP、IP、TCP协议都已正确运行。
5.2μC/OS-II只提供了操作系统内核,用户要自己添加文件处理、人机界面、网络接口等重要部分。大部分人认识OS都是从这里开始的。
由于SkyEye下的仿真串口UART已经实现了中断方式的接收(实际是从键盘接收输入)和输出(实际上是输出到终端屏幕),所以实现一个类似Bash的简化版Shell并不困难。其本质思想就是:Shell作为一个μC/OS-II下的任务,工作于内核之外,占用一个任务号。它接收用户输入的字符,存储到缓冲区,并回显到屏幕上,以回车键为用户输入的结束信号,随后解析用户输入的命令名称、参数,调用相应的命令函数。一直到这个命令函数运行返回,才继续Shell的人机交互界面。
我们目前在μC/OS-II下实现的Shell被命名为Genie Shell。它实现了最基本的命令输入、解析参数、调用命令函数功能,以及两条示例性的命令。这个Shel
l的特色是采用了一些面向对象的思路来实现Shell的各种命令。Genie Shell把每个命令看成一个对象,对象的属性是命令名,而对象的方法就是命令的执行函数本身。用户输入命令及参数后,将参数传递给对象的方法并执行。要Shell中增加一条命令,就是增加一个对象,并实现这个对象的方法,以利于今后做进一步的扩充。
5.3μClinux上的应用程序
目前μClinux-dist-0305已经可以在SkyEye上运行。其中的sash(shell)、ping、ifconfig、telnet,telnet server、ftp、ftp server、boa(http server)、mount with nfs support等主要的应用程序都可以成功地运行在SkyEye中,而且不需要对应用程序进行任何修改。
6 SkyEye正在开展的工作
6.1 LCD仿真
作为单片机系统重要的输出设备,LCD屏幕用得非常广泛,因此,我们认为有必要为SkyEye加入LCD控制器设备仿真。我们使用GTK+图形函数库在Xwindow中模拟出一个LCD屏幕,这样在SkyEye上运行的OS,其LCD驱动程序会像驱动真正的LCD控制器一样发送控制命令,而SkyEye解释这些控制命令,并且应地在GTK+绘出的窗口中画不同灰度或颜色的点。这里对GTK+的使用仅限于绘制窗口和画点,因为这是LCD屏幕的最基本动作,其它所有的工作如画图、GUI的实现都应该由应用程序利用画点的功能去实现,与SkyEye本身无关。
LCD的buffer RAM是映射到内存RAM中的。LCD屏幕的每个点对应内存中的1位或几位,各个点所对应的内存按行序连续存放。LCD上显示什么内容,完全由这块内存决定。LCD仿真控制器会根据这块内存去刷新屏幕显示,刷新频率等参数要根据具体使用的LCD屏幕来决定。OS中的`LCD驱动程序要往LCD屏幕上写东西,就是写这块内存。
6.2 基于ARM的其它体系结构的仿真
S3C4510B是三星公司推出的针对嵌入式应用的16/32位嵌入式处理器,是一款应用十分广泛的嵌入式处理器。该微控制器专为以太网通信系统的集线器和路由器而设计,具有低成本和高性能的特点。S3C4510B中内置了ARM公司设计的16/32位ARM7TDMI处理器,可以执行32位的ARM指令,也可执行16位的THUMB指令,并集成了多种外围部件。目前,SkyEye仿真的体系结构还比较少,尝试对S3C4510B的仿真,一方面是使SkyEye能够支持更多的体系结构;另一方面,通过仿真S3C4510B,有助于为SkyEye设计可扩展框架,使SkyEye更具通用性和模块化。
Intel公司的StrongARM芯片SA1110的最高运行速度可达206MHz;其内部有强大的指令操作能力、高速缓冲能力、寄存器管理能力、读/写缓冲器能力。SA1110寄存器总线接口可与DRAM、SDRAM、ROM、SMROM、SRAM以及其它潜在的I/O器件共享数据信号,其寄存器与PCMCIA模块支持4个快速大同小页操作模式(FPM)、扩展数据输出(EDO)、同步DRAM、6个静态存储器、6个ROM/SDRAM等。SA1110可提供系统支持逻辑、多个串行通信通道、1个彩色/灰度LCD控制器、2个PCMCIA插槽、28个GPIO口;内部提供定时器、电源管理、指令控制、复位控制、时钟产生、中断控制等功能。SA1110电源管理提供正常、空闲、睡眠三种工作状态,其内部包含六通道的DMA控制器,用于支持串行通信过程中的数据高速运行,如串行通道与外部寄存器、DRAM、SRAM、Flash、ROM等之间的通信;此外,还有1个用于支持LCD控制器工作的独立的DMA控制器SA1110,它有5个独立的串行通道,可分别执行半双工被动协议的通用串行总线(USB)通信、红外数据(IrDA)通信、多媒体通信口/同步串行口(MCP/SSP)通信等。SA1110通过指令和数据断点提供调试支持,还提供JTAG口,用于进行系统连续检查。通过对StrongARM芯片的仿真,除了有助于SkyEye设计可扩展框架外,还将推动下一步对Intel的XScale系列CPU的研究。
5.3 SkyEye集成开发环境的实现
集成开发环境是SkyEye的一个重要组成部分,利用它,可以直接在可视环境中编辑、编译、调试和修改OS代码,方便了软件开发和称一。由于SkyEye的用户接口是基于GDB的,所有支持GDB的集成开发环境都可以很容易地移植为SkyEye的集成开发环境。目前的Windows版本借鉴Dev-Cpp的源代码,主要与Cygwin版本的SkyEye进行通信,以进行方便的、可视化的调试。Linux版本的IDE采用的是修改过的KDevelop3.0,目前它能和SkyEye进行很好的集成,完成全以充分利用Kdevelop3.0的强大功能。
6.4 SkyEye可扩展框架的设计
目前SkyEye各个部分的仿真还是紧耦合的,各仿真模块之间的接口还不够清晰,这不利于SkyEye的扩展。如果要支持更多的CPU和嵌入式环境,需要很大的工作量,而且用户也无法进行二次开发,阻碍了SkyEye的进一步推广和应用。这就需要为SkyEye设计一个可扩展框架。目前,框架的设计要集中于定义和实现CPU的内部接口,如内存接口和协议处理器接口等,以让它支持更多的CPU;下一步会为SkyEye设计虚拟外部接口,让用户可以根据自己的硬件或者应用,来定义外设的功能,并能在SkyEye上方便地仿零点和验证,从而为用户增加二次开发的功能,让SkyEye得到更广泛的应用。
7 总结与展望
经过几个月的努力,SkyEye已经有了很大的发展,各方面的工作已经按照计划有条不紊地进行着。可以说,SkyEye作为嵌入式系统的仿真环境,已经成为学习嵌入式系统十分
有效的工具。同时,SkyEye在许多方面还有待手改进:一是要提高SkyEye的易用性,这就需要完善SkyEye的集成开发环境,改善其用户接口;再就是提高SkyEye的通用性,这需要SkyEye支持更多的外围设备、更多的体系结构乃至更多的CPU类型。
开放源码 篇4
Preserves useful defaults, unlike many CSS resets. - 保护有用的浏览器默认样式而不是完全去掉它们
Normalizes styles for a wide range of elements. - 为大部分HTML元素提供一般化的样式
Corrects bugs and common browser inconsistencies. - 修复浏览器自身的bug并保证各浏览器的一致性
Improves usability with subtle improvements. - 用一些小技巧优化CSS可用性
Explains what code does using detailed comments. - 用注释和详细的文档来解释代码
Normalize对比Reset的优势
1. Normalize.css 保护了有价值的默认值
Reset通过为几乎所有的元素施加默认样式,强行使得元素有相同的视觉效果。 相比之下,Normalize.css保持了许多默认的浏览器样式。 这就意味着你不用再为所有公共的排版元素重新设置样式。 当一个元素在不同的浏览器中有不同的默认值时,Normalize.css会力求让这些样式保持一致并尽可能与现代标准相符合。
2. Normalize.css 修复了浏览器的bug
它修复了常见的桌面端和移动端浏览器的bug。这往往超出了Reset所能做到的范畴。 关于这一点,Normalize.css修复的问题包含了HTML5元素的显示设置、预格式化文字的font-size问题、在IE9中SVG的溢出、许多出现在各浏览器和操作系统中的与表单相关的bug。
3. Normalize.css 不会让你的调试工具变的杂乱
使用Reset最让人困扰的地方莫过于在浏览器调试工具中大段大段的继承链,如下图所示。在Normalize.css中就不会有这样的问题,因为在我们的准则中对多选择器的使用时非常谨慎的,我们仅会有目的地对目标元素设置样式。
4. Normalize.css 是模块化的
这个项目已经被拆分为多个相关却又独立的部分,这使得你能够很容易也很清楚地知道哪些元素被设置了特定的值。因此这能让你自己选择性地移除掉某些永远不会用到部分(比如表单的一般化)。
5. Normalize.css 拥有详细的文档
Normalize.css的代码基于详细而全面的跨浏览器研究与测试。这个文件中拥有详细的代码说明并在Github Wiki中有进一步的说明。这意味着你可以找到每一行代码具体完成了什么工作、为什么要写这句代码、浏览器之间的差异,并且你可以更容易地进行自己的测试。 这个项目的目标是帮助人们了解浏览器默认是如何渲染元素的,同时也让人们很容易地明白如何改进浏览器渲染。
源码解读
参考了很多内容,代码可以在这里找到,以下分模块逐个分析:
HTML与BODY
html {
font-family: sans-serif; // 1
-ms-text-size-adjust: 100%; // 2
-webkit-text-size-adjust: 100%; // 2
}
body {
margin: 0;
}
设置所有的字体为sans-serif,关于text-size-adjust是这样的:iOS设备旋转后可能会自动调整字体大小(e.g. 竖着的时候是14px,横着就自动调整成20px)。 将这个属性设置为100%后Safari就会不会自作主张调整大小。 设置成100%和设置成none的区别是前者在防止浏览器自动插手字体大小的同时,可以让用户通过缩放控制字体大小,后者会很恼人地让用户无法放大缩小字体。 MDN的文档里有提到如果将这个属性设为none,基于webkit的电脑浏览器也会受到影响,无法放大缩小。 以前有人利用这个特性来绕过电脑chrome字体大小不能小于12px的限制,但是chrome27后已经取消了对这个特性的支持。 不过一般说来,还是不要设none的好,多少让用户有点自由控制的余地。具体请参考这里:text-size-adjust和 一定不能O定成-webkit-text-size-adjust:none的原因, 至于body的默认边距问题,在各个浏览器上也都不一致,统一设置。
HTML5 新标签的display兼容性解决
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
audio,
canvas,
progress,
video {
display: inline-block; // 1
vertical-align: baseline; // 2
}
audio:not([controls]) {
display: none;
height: 0;
}
[hidden],
template {
display: none;
}
IE8不认识HTML5的新元素 beta版的IE9认识新元素,但没有定义正确的显示 IE10/11的details 和 summary不是block-level IE11的main不是block-level Chrome, Firefox, 和Opera的progress没有以baseline垂直对齐,如果audio标签没有控制栏,则应该隐藏,有点暴力啊!hidden属性是在HTML5中新加入的属性,可能有些人觉得和规范一直倡导的样式分离有所背离,但HTML5设计的一条重要的原理就是实用性。 这个属性会帮助屏幕阅读器更方便地识别。template标签用于HTML模板,现代Web开发中,HTML模板使用很多,这个标签是顺应实际需求。 但模板又要求不能在界面上显示的,所以统一样式,兼容旧浏览器。关于垂直居中,可以参见 CSS vertical-align 属性和我对css-vertical-align的一些理解与认识(一)
链接修复
a {
background-color: transparent;
}
a:active,
a:hover {
outline: 0;
}
在IE10下,在点击超链接(active)的时候,会出现一个灰色背景,去掉。在active或hover时,把默认的outline样式去掉(针对所有浏览器)。
语义化文字标签修复
abbr[title] {
border-bottom: 1px dotted;
}
b,
strong {
font-weight: bold;
}
dfn {
font-style. italic;
}
h1 {
font-size: 2em;
margin: 0.67em 0;
}
mark {
background: #ff0;
color: #000;
}
small {
font-size: 80%;
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
abbr标签的语义是表示缩小,在标签的title属性中会添加此缩写的完整版本,
此标签在FF中默认有下边框(1px dotted),在Safari和Chrome中则无此样式,此处统一设置了下边框。
Firefox 4+, Safari和Chrome给b和strong设置的其实是bolder而不是bold,对于一些有一整套web font的网站会落到不想要的字重。但是HTML标准里已经说了要bolder啊 而且设为bold的话是不能叠加着越来越粗的
dfn标签可标记那些对特殊术语或短语的定义,在Safari和Chrome里不是斜体
重置h1样式
mark标签是HTML5中的标签,IE8/9不支持,所以需要重置样式。
不同浏览器下的small大小不一致,这里定为80%
HTML标准里对small,sub和sup的大小要求都是smaller,但是normalize.css给small设的是80%,sub和sup却是75%,这里为了保持一致+不影响其他元素的行高,把两者的line-height设为0,vertical-align从baseline开始,然后用top和bottom手动设置两者偏移量。
其他标签修复
img {
border: 0;
}
svg:not(:root) {
overflow: hidden;
}
figure {
margin: 1em 40px;
}
hr {
-moz-box-sizing: content-box;
box-sizing: content-box;
height: 0;
}
pre {
overflow: auto;
}
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
在旧版IE浏览器中,图片默认会出现一个蓝色的外框。
IE 9/10/11中,SVG的hidden显示不正常
figure的margin在IE 8/9 and Safari不生效
在FF中,hr元素的默认样式很多,和其它浏览器主要的差异是设置了height为2px,box-sizing为border-box,样式中正是重置了这两个影响布局的样式。关于box-sizing请看: CSS3 Box-sizing
大部分浏览器的pre在overflow的时候会直接溢出去,这里加上overflow:auto让它出现滚动条
Form系
button,
input,
optgroup,
select,
textarea {
color: inherit; // 1
font: inherit; // 2
margin: 0; // 3
}
button {
overflow: visible;
}
button,
select {
text-transform. none;
}
button,
html input[type=”button“], // 1
input[type=”reset“],
input[type=”submit“] {
-webkit-appearance: button; // 2
cursor: pointer; // 3
}
button[disabled],
html input[disabled] {
cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
input {
line-height: normal;
}
input[type=”checkbox“],
input[type=”radio“] {
box-sizing: border-box; // 1
padding: 0; // 2
}
input[type=”number“]::-webkit-inner-spin-button,
input[type=”number“]::-webkit-outer-spin-button {
height: auto;
}
input[type=”search“] {
-webkit-appearance: textfield; // 1
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; // 2
box-sizing: content-box;
}
input[type=”search“]::-webkit-search-cancel-button,
input[type=”search“]::-webkit-search-decoration {
-webkit-appearance: none;
}
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
legend {
border: 0; // 1
padding: 0; // 2
}
textarea {
overflow: auto;
}
optgroup {
font-weight: bold;
}
部分浏览器会把form里面的输入框(textarea,text,button, select)的字体设置为用户的系统字体或者是浏览器本身的字体(还有颜色),并不会继承自父元素。所以需要重置输入框的默认样式。
IE 8/9/10/11里的button默认的overflow是hidden,这里设为和群众一致的visible
可点击的按钮,设置鼠标样式为pointer,提高了可用性。 关于-webkit-appearance 参见: 使用CSS3的appearance属性改变元素的外观
给disabled的再补充一个cursor:default
移除 Firefox 4+ 内部的内边距
统一search类型输入框的默认样式,让search类型输入框和普通输入框样式一样。
fieldset元素的默认样式在各浏览器中的差异较大,尤其是IE浏览器和其它浏览器,统一一下很有必要。
IE里的文本框就算文本高度没有超过指定高度,都会默认加上一个没有滚动条的滚动栏,设置overflow: auto可以去掉
关于form的box-sizing方法的纠正,清继续参考 CSS3 Box-sizing
Table系
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}
table的默认样式很难看,大部分浏览器设置table的border-collapse为separate,border-spacing为2,一般项目中都会重置此样式。
开放源码 篇5
随着互联网时代的发展,如今的Internet的迅速发展给人们带来了很多的方便,无论是手机还是PC端都给人们带来了极大的便利,使人们的生活得到了翻天覆地的变化,获得新闻资讯的途径不仅仅只是通过电视、广播或者报纸,这样获得新闻资讯的途径显然不是最快的,而且人们获得的新闻不是实时更新的,这些途径已经不能满足人们了解最新新闻资讯的要求,看过时的新闻让人们对新闻的了解显得很落后。
所以新闻发布系统是面向大众用户开发的一款实时更新新闻资讯,每天第一时间发布最新发生的新闻头条、动态,人们可以通过手机或PC端在任何时间任何地点,打开新闻发布系统就能实时观看最新新闻,让你身临其境,真正感受到各地的新闻变化,人文习俗,还能更快的了解各地的文化和人们的生活习惯,让每一个人都能更快的学习到更多的知识,丰富人们的日常生活。
柚子皮新闻发布系统可以提供基于互联网的新闻服务,主要包括新闻显示模块,用户可以查看各类型的新闻信息,管理员登录后可以进行对新闻的添加,删除,查看和修改等操作
该系统主要包括主页,新闻查看页面,添加新闻页面,管理员和一般用户登录页面,已经登录成功和失败的页面,新闻管理页面等组成
通过以上需求分析,可以得知该系统主要包括以下两类 网站访问人员:可以查看各个模块的新闻信息 管理员:可以对新闻进行增删改查的管理工作
功能图如下:
2、页面需求设计
2.1、网站主页设计
主要实现网站的总体信息显示,在网站中主要显示各个新闻模块中的最新发布的几条信息
2.2、新闻显示页面
主要包括社会,娱乐,军事,体育,财经等新闻的显示,在本页中可以实现各个新闻模块的显示,显示的顺序为发布日期顺序 2.3、登录页面
主要用户给管理员输入用户名和密码的,当输入的口令正确时,可以跳转到新闻管理页面,当输入错误时,跳转到指定页面并且给出提示信息 2.4、管理员管理页面
主要实现管理员对新闻的添加,删除及修改等功能,管理员还可以对每一条新闻进行查看。
3、程序概要设计
本系统要求实现新闻发布系统的各项基本功能,所以从安全性和易维护性考虑,选择了Web实现技术。简单的说就是将系统做成一种B/S模式,可以让用户通过浏览器直接访问位于服务器上的试题以及对系统进行远程维护。服务器端程序的实现技术也很多,本人选用了当前比较流行的网络编程技术——JSP作为主要实现手段(配合JavaServlet、JavaBean、HTML等)。JSP作为一种Web实现技术,它的效率是很高的。这一点正好符合了新闻发布系统所要求的实时性。JSP自身的安全性,再加上实现模式的特点,完全能够达到新闻发布系统的保密性要求。除此之外,作为Java平台的一部分,JSP拥有Java语言“一次编写,各处运行”的特点。又随着越来越多的服务器供货商将JSP支持添加到他们的产品中,这样一来用JSP做成的这套系统可以轻松移植到其它平台来运行。所以JSP是实现本系统的最佳技术,它是完全可行的。
系统所涉及的核心技术点:jsp,servlet,mysql,tomcat,jstl,EL,IO,jdbc,MVC设计模式
一个好的系统当然需要一个好的设计思路,MVC设计模式就很好的应用了这一点,使得一个WEB应用可以同时支持多个不同类型的客户端,比如通过PC端可以浏览多种页面,同时通过手机端也可以浏览多种页面,这就要求开发人员在设计系统时要同时支持PC端和手机端的界面,MVC模式中一个Model可以回应多个请求,同时处理多个请求,这样使得代码得到重复使用。MVC模型图如下图 4.、数据库概要设计;
该系统使用的是mysql数据库
在内部主要是建了2张数据表:分别是新闻表和用户表
新闻表主要是用来存储新闻的一些基本信息,如:标题,图片,内容,作者,发布时间,类型,如下图:
用户表主要是用来存储用户基本信息包括用户名和密码还有标记(1为普通用户,2为管理员)
5.、系统详细设计和部分源代码; 5.1、主页设计
在index.jsp页面有普通用户登录窗口,用户可以在主页面浏览新闻,和查看热点新闻列表和每条新闻的详情,用户点击“登录”后在窗口输入账号密码后,登入成功
主要代码如下:
<%@ page language=“java” contentType=“text/html;charset=UTF-8”
pageEncoding=“UTF-8”%> <%@ page import=“java.io.*,java.util.*” %>
4.01
【开放源码】推荐阅读:
开放源码软件08-12
源码剖析06-27
新闻发布系统设计源码08-12
服装仓库管理系统源码05-12
职工信息管理系统源码07-03
surf算法学习心得(二)源码简析08-21
android有关sensor的源码总结09-08
开放不开放05-01
国家开放大学开放教育09-11
对《改革开放和对外开放》的感想04-24