用S3C44B0与uClinux构建web服务器

S3c44B0uClinux的移植步骤 S3c44B0uClinux的移植步骤和配置参数。 立即下载
用S3C44B0与uClinux构建web服务器
 
发布日期:2006-07-04 浏览数:195 作者:徐 明 来源:PLC&FA
 

关键词: ARM   uClinux   web服务器

1  引言
随着互联网在全球的飞速发展,网络技术广泛应用于各种企业和工业系统,越来越多的信息化产品需要能够接入互联网通过web页面进 行远程访问和控制。嵌入式web服务器是当今研究嵌入式[1]的应用热点,可广泛的应用到工业设备,自动化农业,信息化家电,远程监控报警系统等。目前正 在开发的嵌入式系统中,将近一半的项目都选用Linux作为嵌入式操 作系统,而uClinux是一个经过对标准Linux内核改动,高度优化、代码紧凑的嵌入式Linux[2]它保留了Linux的大多数优点,具有良好的 移植性、优秀的网络功能。目前,基于三星S3C4510b与uClinux下web服务器已经实现,而基于S3C44B0与uClinux下web服务器 的实现尚不多见。本文通过网口控制芯片RTL8109AS与S3C44B0的连接,实现了硬件设计,采用uClinux源代码和boa服务器源代码的编译 以及CGI网关接口程序的编写实现了软件设计,在自行设计的S3C44B0开发板上实现了基于uClinux下的boa服务器和动态网页CGI网关接口程 序,通过浏览器输入开发板的IP地址就可以动态地访问开发板上的网页。

2  硬件方案实现
本文设计的ARM开发板的核心是三星(Samsung)S3C44B0微处理器,是基于ARM7TDMI[3]的 RISC型CPU,是性价比较高的嵌入式32位处理器之一。S3C44B0芯片包含一个使用了66MHz和单周期精简指令处理器(ARM7TDMI),内 建8k高速缓存器,2通道通用DMA、2通道外设DMA并具有外部请求引脚、2通道UART带有握手协议、11通道SIO、1通道多主IIC-BUS控制 器、5个PWM定时器、71个通用I/O口等等并且能够与常用的外围设备实现无缝连接,从而简化了外围电路设计,降低了产品成本、体积和功耗。本文自行设 计的开发板使用16MSDRAM和2Mflash的内存构架。其中Flash型号是SST39VF160,主要用于存放BIOS程序、uClinux内核 映象以及ROMFS文件系统。SDRAM则采用两片HY57V641620,共同组成16M、32位宽的系统主存储器。外设方面,采用CS4334芯片进 行音频扩展,采用PDIUSBD12芯片扩展了一个USB接口,串口控制芯片采用常见的MAX232,网口控制芯片采用Realtek公司的 RTL8109AS扩展1个10/100M的网卡设备。开发板框架如图1所示:

图1     开发板整体框架图
3  软件设计
3.1  uClinux在S3C44B0上的移植
本开发板采用 uClinux作为操作系统,uClinux是专门针对没有MMU的CPU,适合嵌入式系统小型化应用。uClinux经过对标准Linux内核的改动, 形成了一个高度优化、代码紧凑的嵌入式Linux,uClinux保留了Linux的大多数优点:稳定,良好的移植性,优秀的网络功能,完备的对各种文件 系统的支持,以及标准丰富的API。而且在uClinux系统上开发的应用程序可移植性很好,系统升级也非常容易,所以本文选用uClinux作为嵌入式 操作系统。在S3C44B0上对uClinux内核进行的移植过程为:
首先对其源代码进行编译,从网上下载一个uClinux源代码,一般是压缩格式(tar.gz)的,将其解压,在当前目录下产生一个uClinux-dist目录,进入uClinux-dist目录,然后依次键入
(1) make menuconfig 进入菜单化的源代码配
     置工具
(2) make clean  清除所有的编译结果
(3) make dep   设置文件依赖关系
(4) make lib_only  编译库文件
(5) make user_only  编译应用程序
(6) make romfs  编译文件系统
(7) make image  生成映象文件
(8) make   完成整个编译过程
编 译完成后,在image下产生三个文件,image.ram,image.rom,romfs.img。将image.rom通过网口用tftp工具下载 到系统板的flash中0x0处,上电键入BIOS提供的命令,uClinux便从SDRAM启动,完成移植过程[4-5]。
3.2  基于uClinux的web技术实现
(1) web服务器的工作原理[6-7]
web 服务器作为一个数据载体,可以将本地的信息和数据通过网络传递给远端发出请求的客户,这在远程监控的实现有很大的意义。web服务器监听用户端的服务请 求,根据用户请求的类型提供相应的服务。用户端使用web浏览器和web服务器进行通信。web服务器在接收到用户端的请求后,处理用户请求并返回需要的 数据。一个完整的HTTP事务一般由以下四个阶段组成:
l 客户与服务器建立TCP连接;
l 客户向服器发送请求;

l 如果请求被接受,则由服务器发送应答,在应答中包括状态码和所要的文件;
l 客户与服务器关闭连接。
(2) uClinux下web服务器的实现
从本质上讲,web服务器是在计算机幕后运行的程序,等待发自web浏览器的各种请求。当接受到请求时,它用被请求的文档或错误消息进行答复。大多数的web服务器都提供后端技术,就象CGI,能够使web服务器和已有的应用程序相连,从而提供交互式活动和信息检索。
uClinux 下,主要有三个web服务器:httpd,thttpd和boa。Httpd[9]是最简单的一个web服务器,功能也最弱,不支持认证、CGI。 thttpd web服务器和boa web服务器都支持认证、CGI等,功能都比较全。本开发板选用适合于嵌入式应用的boa web服务器。boa是一个单任务的http服务器,源代码开放、性能高。它和传统服务器的主要区别是:它是单进程的,在接到新的httpd请求时并不 FORK出一个新的进程来响应,不能对每个到来的连接处理,而且也不能将自己拷贝很多份来处理多连接。它在内部处理所有正在进行的http连接请求,只对 单独的CGI程序、自动文件的产生、自动文件的解压等请求FORK出新进程。它的优点是代码简单、速度快、适合于嵌入式应用。对于嵌入式系统来说,实现 web服务器主要是为了使用www浏览器,最终让用户通过局域网或广域网访问和控制嵌入式系统设备。编写不同的HTML页面并结合CGI技术可以完成各种 灵活、友好的交互功能。在uClinux下实现boa,本文具体对boa.conf和mime.types文件进行了几项修改:
(1) 由于根文件系统是只读的,不能用mkdir来新建目录,所以在编译内核前建好要用到的目录,在此把web服务器的根目录设在/home/下,将服务器文档 根目录设在/home/httpd/目录下,把实现动态web网页功能的CGI程序放在/home/httpd/cgi-bin/ 目录下。这几个目录的建立通过修改开发平台的makefile来实现。在ROMFS_DIRS=bin dev etc home lib mnt proc usr var 增加home/httpd home/httpd/cgi-bin。这样修改后,通过上面的编译内核步骤编译后,根文件系统中就包含这些新建的目录。
(2) 指定web服务器的根目录路径,进入uClinux-dist/user/boa/src/目录下,通过修改define.h文件中 #define SERVER_ROOT/home语句来指定SERVER_ROOT。修改boa.conf文件,在uClinux- dist/user/boa/src/boa.conf里将User nobody,Group nogroup改为User 0,Group 0,Document Root/var/www改为DocumentRoot/home/httpd,定义默认首页和CGI程序所在的目录,即:
DirectoryIndex index.html,ScriptAlias /cgi-bin/   /home/httpd/cgi-bin/mini.type不需要修改。Boa.conf和mini.types必须放到web服务器根目录下,把修改 后的boa.conf和mini.types复制到uClinux-dist/romfs/home下,然后对uClinux- dist/Vendors/Samsung/4510b/inittab修改,在inet:unknow/bin/inetd后加入boa: unknown/bin/boa c/home。这样配置好后,此时web服务器的根目录为/home/httpd,httpd目录下放的是web服务器可以访问的文件,包括html网 页,JPG图片等。/home/httpd目录下放置的文件和网站文件类型完全一样,其中index.html为远程浏览客户访问web服务器所看到的默 认首页值,通过超级链接可以链接到/romfs/home/httpd目录以及其所有子目录下的所有静态网页。如果要实现动态网页,只能采用CGI,因为 目前uClinux还不支持ASP,PHP等技术。CGI即通用网关接口,它是一个WWW服务器主机对外服务的标准接口,一般来说一个CGI接口的功能就 是在超文本和服务器主机应用程序间传递信息。目前最为流行的CGI[10]程序语言有四种:C,Shell,Perl和Visual Basic。CGI程序属于一个外部程序,需要编译成为可执行文件,才能在服务端运行,其应用程序流程图如图2所示:

图2     CGI程序流程图

图3     uClinux下内嵌网页

图4     LED演示程序界面
浏览器将用户输入的数据送到web服务器,web服务器将数据使用stdin送给CGI程序,在执行CGI程序后,可能会访问存储数据的一些文档,最后使用stdout输出html形式的结果文件,经过web服务器送回浏览器显示给用户。
本 文通过c语言来编写CGI程序,编译成二进制文件放在/cgi-bin/目录下,由于前面配置了boa服务器的CGI目录, ScriptAlias/cgi-bin//home/httpd/cgi-bin/, 所以/cgi-bin/目录下的CGI程序就能被正确执行。配置完成后,重新编译内核,编译时选中boa选项将编译好的内核下载到开发板,启动 uClinux完成IP配置,启动boa web服务器之后就可以通过浏览器浏览网页了,如果想启动uClinux时自动启动boa web服务器,可以修改rc文件,进入uClinux-dist/vendors/Samsung/4510b,在运行脚本中加入boa c/home/&修改后重新编译内核,再下载到开发板运行,运行uClinux后即可访问网页了。下面结合一个例子来说明如何实现uClinux 下的动态网页技术。先用HTML语言编写web内嵌网页(如图3),然后点击内嵌主页上的LED DEMO演示程序超级链接,进入到网页的下一界面(如图4),由ACTION属性来指定要用到用到的CGI程序,即ACTION=/cgi- bin/led.cgi,由METHOD属性来指明所用的提交方法,即METHOD =POST。
选中LED复选框,然后点击SET,就能控制开发板上的发光二级管。说明uClinux下boa服务器已经运行成功。

结束语
本 文通过硬件方案的实现、软件设计、以及uClinux下web技术的实现,实现了基于S3C44B0与uClinux下的 boa服务器。通过启动开发板上的boa服务器,在PC机上的浏览器键入开发板上的IP地址,就能访问开发板中内嵌的静态网页,通过CGI程序的实现,实 现了网页的动态显示,并用一个控灯的例子对boa服务器的运行进行了实验验证。本文所实现的嵌入式web服务器通用性比较强,能够在嵌入式开发平台上高效 率地运行,应用前景非常看好。

 
保姆级教程:在RK3588平台上为IMX415 Sensor配置HDR2曝光(附完整代码避坑点) 本文提供RK3588平台上为IMX415 Sensor配置HDR2曝光的详细教程,涵盖基础概念、限制条件、实战配置步骤及常见问题解决方案。通过完整代码示例和关键参数解析,帮助开发者高效实现HDR2曝光模式,提升图像质量并避开常见陷阱。 阅读详情

相关推荐

Ubuntu 22.04 “软件更新”装了NVIDIA驱动,WiFi等设备不见了

在Win10装了Ubuntu22.04的双系统,台式机里面有NVIDIA 3080Ti的独立显卡,Ubuntu默认使用的nouveau驱动,需要更换成NVIDIA相应的驱动,在软件和更新里面一键安装了NVIDIA-driver-535-server之后,发现wifi、蓝牙等设备消失了。这个问题的根源据说跟这个nouveau驱动有关,希望linux社区可以解决这个问题。命令安装后 sudo reboot就可以重新看到WiFi以及蓝牙等设备图标了。然后用U盘拷贝到不能上网的Ubuntu22.04系统上,利用。

me_ysd的博客 5790

uClinux内存管理分析

2007-12-25 09:45:58 1 引言 内存管理在嵌入式操作系统中是很重要的子模块,能够对系统性能起决定性作用。uClinux嵌入式Linux领域非常重要的分支,已成功应用于路由器、机顶盒、PDA等领域,标准Linux在内存管理方面有着本质的区别。2 uClinux概述 uClinuxLinux2.0/2.4内核派生而来,其内核二进制映

mybirdsky的专栏 892

IPMI的SOL (Serial Over LAN) 和 UART

UART全名是Universal Asynchronous Receiver/Transmitter(通用異步接收/发送器),它是一个常用的異步串行传输协议。透过UART传输前,接收方须要先知道传输方的鲍率(Baud rate):单位时间内,讯号状态变化的次数。例如 115200 bps,表示每秒会传送115200个bits--> 因此读取率就是 1/115200=8.6微秒读取一次讯号。封包内的资料长度:通常是 8bits。

yeiris的博客 1万+

如何配置uClinux实现简易HTTP应用(显示web网页)

导读:   1用户选项配置   在用户选项的network application中,选中“Boa”和“httpd”两项服务。   2建立home/httpd目录   修改44b0/makefile文件,加入/home/httpd目录;   将测试网页index.html拷贝到该目录下,下面是一个最为简单的HTML语言写成的测试网页:         A test web page   

yingfox的专栏 1172

S3C44B0 调试笔记—uClinux

导读:   上班时间很少有机会搞这些东西,基本上都是下班在家里搞,不过在公司写写文挡还是可以的。调试uClinux也是断断续续进行的。以前根本没接触过 linux,搞起来可真是头都要大了。虽说到最后调通比前面耗时少很多,主要原因是网上很多参考资料。但个人感觉这部分难度要更大一些。   接着前面的说吧,编译出一个uClinux内核出来,就必须在linux环境下,windows下是编译不了的

yingfox的专栏 1900

Linux C小项目 —— 简单的web服务器

简单的Web服务器 实现一个基于HTTP通信协议的web服务器。客户端向服务器程序发送所需文件的请求,服务器端分析请求并将文件发送个客户端。 1、整体程序设计 客户端发送所需文件,服务器返回该文件,通信结束。 服务器程序的任务大致分为3步: a、解析客户端程序发来的内容,找到需求文件的路径或者名字 b、在服务器主机上查找该文件 c、将该文件内容组织成客户端程序可以理解的形式,并将其发...

trb331617的博客 6904

arm服务器系统设计,基于ARM的嵌入式服务器的设计

摘要:Internet技术的快速发展和移动互联网时代的到来,使嵌入式技术成为了当前IT领域发展最迅速的方向之一.ARM技术占据了3/4以上的32位RISC微处理器市场,此外,其网络接口驱动技术特别适合于需要网络支持的服务端设备.基于ARM的嵌入式操作系统可简便地实现各种控制功能,使其在工控领域应用更广泛.嵌入式Linux操作系统内核小,适用于特定嵌入式应用的专用Linux操作系统的要求.Inter...

weixin_35348182的博客 592

基于44B0平台的uC-Linux Web服务器实现方法研究

  摘要:本文介绍了在S3C44B0X型ARM7平台上实现uCLinux下的Web 服务器的几种途径;对实现uCLinux下的静态、动态Web页面技术进行了分析和比较,并给出了一个通过网络远程访问温度传感器的实例。 关键词:uCLinux Web服务器 动态W

yingfox的专栏 1113

uclinux boa服务器在s3c44b0配置移植

<br />1.web服务器的工作原理<br />        web 服务器作为一个数据载体,可以将本地的信息和数据通过网络传递给远端发出请求的客户,这在远程监控的实现有很大的意义。web服务器监听用户端的服务请求,根据用户请求的类型提供相应的服务。用户端使用web浏览器和web服务器进行通信。web服务器在接收到用户端的请求后,处理用户请求并返回需要的数据。一个完整的HTTP事务一般由以下四个阶段组成:<br />l 客户服务器建立TCP连接;<br />l 客户向服器发送请求;<br /> 如果请

嵌入精灵 1543

S3C44B0(1):uclinux中boa web server的配置

uclinux中boa web server的配置(转贴并修改)一、环境准备编译环境:arm-elf-tools-20040427.sh编译工具:arm-elf-*板子型号:s3c44b0 公测板 二、编译配置1、选择Kernel/Library/Defaults Selection -> Customize Vendor/User Settings -> Netw

GodSpeed513的专栏 2181

uCLinux Web服务器 动态Web技术 CGI

摘要:本文介绍了在S3C44B0X型ARM7平台上实现 Linux下的Web 服务器的几种途径;对实现 Linux下的静态、动态Web页面技术进行了分析和比较,并给出了一个通过网络远程访问温度传感器的实例。 关键词: Linux Web服务器 动态Web技术 CGI(通用网关接口) 前言 嵌入式系统已经大量应用于各种场合,网络技术的发展使嵌入式系统的网络功能日益完善。在测控领域里,常常需要远

lishan1998的专栏 1478

php连接c webserver,uClinux下的Web Server(主要是boa服务器)

uCLinux 环境下,主要有三个Web 服务器:httpd、thttpd和Boa。httpd是最简单的一个Web 服务器,它的功能最弱,不支持认证,不支持CGI。如果Web 服务器仅需提供一些静态页面,例如简单的在线帮助、系统介绍等,完全可以用静态服务器httpd来实现。thttpd和Boa都支持认证、CGI等,功能都比较全。若需提高系统的安全性,或需要用户进行交互,例如数据查询、实时状态查询...

weixin_34672875的博客 277

嵌入式Linux开发资源大全

1.Linux资源Linux以其开源、免费的特点而成为嵌入式系统的优选操作系统,然而它还有一个巨大的优势就是其浩瀚无限的资源!即无数各色的maillist,下面给出各个嵌入式Linux的站点资源:(1)uClinux:所有NOMMU的处理器都跑uClinuxuClinux发行包下载点:http://www.uclinux.org/MAILLIST搜索引擎:http://mailman.uclinu

487

AT172 光继电器:小身材、大隔离

作为家电控制板 MCU 之间的信号隔离器件,AT172 广泛用于 5V/12V 单片机控制的场景,实现按键信号、控制信号的可靠传递,是洗衣机、空调、智能插座等产品稳定运行的 "隐形卫士"。,正是为低压小电流控制场景量身打造的高性价比之选 —— 它以 3750V 的电气隔离能力、低至 0.4mA 的触发电流和 SOP-4 贴片封装,成为众多工程师设计清单上的 "默认选项"。采用 MOSFET 输出,没有机械触点,无电弧、无弹跳、无磨损,开关寿命远优于传统电磁继电器,特别适合频繁开关的场景。

naNa_1120的博客 140

ARM---编译工具链|程序段|GPIO外设驱动

常见错误汇总:忘记时钟、引脚复用没有切到 GPIO、电平逻辑和原理图相反,电气模式选错(开漏没有上拉导致输出异常)。编译链接后程序会被切分成多个段,不同段存放不同类型的数据,我们需要区分它们存储在Flash还是RAM中。LED、蜂鸣器属于简单输出类外设,完全由 GPIO 引脚电平控制,标准 4 步流程,每一步不能省略。踩坑点:忘记开时钟,后续配置 GPIO 全部无效,引脚没有任何输出。软件输出电平必须匹配硬件电路,否则逻辑写反外设无响应。

an1232121的博客 278

学习ARM

以前写中断程序,只知道开中断、写中断服务函数。看懂这部分,以后遇到中断嵌套、程序死机、内存访问错误,就不再只会盲目调试,可以从模式切换、现场保存、向量表这几个方向排查问题。ARM Core,也就是ARM内核,是基于RISC精简指令集的CPU核心电路,是芯片里面负责取指、运算、执行指令、处理异常的主体。• 一旦发生异常,硬件会自动切换到对应的异常模式,使用该模式专属的影子寄存器,避免破坏用户程序现场。ARM处理器有7个基础工作模式,分为特权模式和非特权模式,其中5种属于异常模式,由异常事件触发。

c1582914的博客 214

嵌入式软件AI编程】12. Claude Code的基本操作

完成安装模型配置后,读者即可在终端中启动 Claude Code。本节将介绍 Claude Code 的基本会话、任务交互、工作流程和项目上下文管理,为后续在 STM32 工程中使用 Claude Code 做好准备。

youcans的博客 227

嵌入式ARM内核基础体系梳理

arm基础

ouynagda的博客 107
上一篇: 如何利用Video4Linux获取摄像头数据
下一篇: 摄像头(WebCam)在Linux操作系统中的驱动方法 (v0.1b)
zhulingchen
博客等级 码龄20年 71粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值