拿起手术刀 深入剖解路由器的“心脏”技术

时间:2018-09-06来源:网络

其中zImage已经包含了文件系统映象文件,通常直接烧写到Flash文件上即可执行了。当然在这之前要进行BootLoader的烧录, BootLoader其实就是一个引导程序,主要作用就是初始化系统,进而来引导操作系统。在嵌入式系统中,处理器上电后首先执行的一段代码就是BootLoader,BootLoader与硬件密切相关,其代码主要用C和汇编语言写成,不同的系统中,BootLoader的功能有所不同,但主要作用还是差不多的,主要有下面几点:

初始化微控制器MCU运行的时钟频率;

初始化Flash和内存的数据宽度,读/写访问周期和刷新周期;

初始化中断系统;

初始化系统中各种片内、片外设备和I/O端口设备;

初始化系统各种运行模式下的寄存器和堆栈;

加载和引导操作系统;

BLOb是BootLoaderObject的缩写,它是一个功能强大、源代码公开的自由软件,它已经实现了对多种处理器芯片的Linux 引导支持。对ARM7等核心的BootLoader支持版本可以到专业网站上进行下载,并稍微做适当修改来满足开发应用中的硬件环境要求即可,在此我们不做过多讲述。

上面所讲述的内核编译过程只是比较宽泛的、笼统的操作过程,也就是说只是基本的操作过程,而在真正的路由功能实现过程中,还要对内核进行多种设置编译,比如说对硬件系统中设计到的部件进行驱动配置安装等,当然,这些并不是特别难的操作技术,再比如我们下面就要讲到的内容,这可就是很有挑战性的核心技术了,这些都是针对内核进行技术性操作来实现特定的网络功能。

内核编译核心部分

1、文件系统分析

文件系统是uClinux操作系统的重要组成部分,uClinux文件系统是操作运行的基础。许多嵌入式系统在不存在磁盘的情况下也可以运行。文件系统可以随同内核一起被打包并在启动时作为一个文件系统的映像被加载。对一个简单的应用系统来说,这己足够了。文件系统可以存放在一个传统磁盘中,但也可以存放在非易失性的存储介质— 闪存中。闪存有一个引导块,它存放了CPU上电后运行的第一个软件,这个软件可以是uclinux的引导程序,也可以是自己编的bootloader。uClinux的内核可以被引导程序从闪存中拷贝到RAM中全速运行。闪存也可以作为文件的存储介质,必要时写入一些需要保存的数据。

uClinux支持NFS(Network File System),它允许通过网络加载各种应用程序。由于用在每一个嵌入式系统上的软件可以从一个公用的服务器上加载,这在控制软件的修订或升级中是很重要的.在系统运行的过程中,导入和导出数据、配置、状态信息的备份也很重要。对用户监控而言,这是一个非常强大的功能。例如,一个嵌入式系统可能装配了一个RAM DISK,它包含着与系统当前状态的更新维持一致的(状态)文件。那么别的嵌入式系统仅需通过网络把这个RAM DISK作为远程磁盘mount过来便可以访问那些位于远端RAM DISK中的状态文件。这也允许在另一台机器上的WEB服务器借助简单的CGI脚本来访问那些状态信息。运行在其他机器上的应用程序包能够很容易地访问这些数据。uClinux操作系统根据不同的安装选择可以生成不同的文件系统。系统中提供了十分丰富的文件系统以供不同需要的用户选择。每种类型的文件系统的基本块大小、优化分配策略、一次传送的数据长度等等都是相互匹配的,使得本类文件系统均有相应的最佳性能。

2、嵌入式Web服务器

对uClinux操作系统下嵌入式Web技术的实现主要用于用户可以通过网

页方式来管理路由器。

⑴uClinux下Web Server的实现

uClinux下,主要有三个WebServer:htpd,thttpd和Boa。Httpd是最简单的一个Web Server,它的功能最弱,不支持认证,不支持CGI。Thttpd和Boa都支持认证、CGI等,功能都比较全。为了实现动态Web技术,这里我们选择实现一个支持CGI的、非常适合于嵌入式系统的Boa Web Server。Boa是一个单任务的http服务器,源代码开放、性能高。目前,uClinux的代码中已经包含boa的源代码,在uClinux下实现Boa,需要对Boa做一些配置和修改。这主要通过对boa.conf和mime.types文件进行修改来实现,需要改动的配置有以下几项:

①建目录

由于uClinux默认的根文件系统romfs是只读的,不能用mkdir等命令来新建目录,故应在编译内核前先建好要用到的目录,这通过修改

/uclinux-samsung/vendors/Samsung/4510b/makefile文件来实现。在ROWFS_DIRS=bin dev etc home lib mnt proc usr var的后边增加home/webhome/web/cgi-bin,这样修改后编译内核,编译好的根文件系统romfs中就包含这些目录了。

②指定Web 服务器的根目录路径(SERVER ROOT)

进入 /uclinux-samsung/user/boa/src/目录,通过修改define.h文件中#define ERVER ROOT /home”语句来指定SERVER ROOT。另外,还可以通过命令行来指定,例如:boa-c/home/。而且命令行指定的SERVER ROOT可以覆盖define.h文件所指定的。

③修改boa.conf文件

在. /uclinux-samsung/user/boa/src/boa.conf里修改:

*将 user obody和Group ogroup改为User0 和Group0 ;

*将 DocumentRoot/var/www改为DocumentRoot/home/web,这样web服务器的文档根目录为/home/web;

*将 MimeTypes/eWmime.types改为MimeTypes/home/web/mime.types;

定义默认首页和CGI程序所在目录,即

DirectoyIndex index.html

ScriptAlias/cgi-bin//home/web/cgi-bin/

这样指定后,.index.htm为远程浏览客户访问WebServer所看到的首页默认值,用C编写的CGI程序编译成二进制文件,放到/cgi-bin/目录下,CGI程序能被正确地执行。

Boa.conf文件和mime.types文件必须放到Web服务器根目录下,所以把修改后的bao.conf和mime.types拷贝到“./uclinux-samsung/romfs/home/”目录下。然后在/uclinux- samsung/Vendors/Samsung/4510b/initab里修改,在:inet:unknown:/bin/inetd后加入: boa:unknown:/bin/boac/homeo

配置过程后,重新编译内核,编译时选中Boa选项。把编译好的内核下载到硬件板,启动uclinux,完成IP配置,启动Boa Web Server,然后就可以通过lE访问你的网页了。如果想启动uclinux时自动启动Boa Web Server,可以修改re文件,进入uclinux-samsung/vendors/Samsung/4510B目录,在运行脚本rc中增加两行:

1 2 3 4 5 6 7

关键词:

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版