Goahead在ucLinux下的移植

2024-04-23 02:58
文章标签 移植 uclinux goahead

本文主要是介绍Goahead在ucLinux下的移植,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Goahead是一款适合嵌入式的web Server, 支持asp,cgi,embedded JavaScrip等脚本语言
基本上在windows下或者在redhat9下面只要make一下就能运行了.
在uclinux下面要稍微改动一下代码.
源码改动的地方基本上是
1.把fork改为vfork,
2.把gethostbyname函数替换掉.
 
改动Goahead自带的makefile使其采用arm-elf-gcc编译并转换应用程序elf格式为flt
就差不多了.
 
下面是我的移植过程中记录的详细步骤:
 
首先到  http://www.Goahead.com/webserver/webserver.htm 下Goahead源码包,
看一下web目录下的usr/doc等说明文件。
 
修改Goahead/LINUX/makefile文件
==================================================================
1. makefile 中 加了一个 宏:


    CFLAGS  = -DWEBS -DUEMF -DOS= "LINUX " -DLINUX $(UMSW) $(DASW) $(SSLSW)
$(IFMODSW) -D__NO_PACK
    -D__NO_PACK 是我自己加的。
    __NO_PACK 屏蔽Goahead编译是产生的#program 警告,不加这个宏也没关系。
 
2. 修改Goahead/LINUX/Makefile
   LDFLAGS  += $(SSLLIB) $(IFMODLIB) -Wl,-elf2flt
    -Wl,-elf2flt 与“+” 是自己加的。
 
   CFLAGS 添加 -Wall -O2选项。(优化代码size与速度)
   如下:
   CFLAGS += -Wall -O2 -DWEBS -DUEMF -DOS= "LINUX " -DLINUX $(UMSW) $(DASW)
$(SSLSW) $(IFMODSW) -D__NO_PACK
 
 
3. 修改ucLinux下makefile文件,使其支持 add costume vender/user application.
   可以略过这一步,直接在Goahead,LINUX目录下make clean;make 然后把webs.exe文件
copy到 romfs目录下。
   (在romfs下建立home/web/ 目录)
 
   详见 12.编译过程。
 


   在uclinux下make clean操作会清空romfs目录,所以最好在Goahead的makefile里
   加入如下几段(在make romfs时会自动拷贝到/home/web/目录下。)
   romfs:
    $(ROMFSINST) /home/web/$(NAME)
 
   同时在uclinux/venders/samsung/44b0/makefile里
   ROMFS_DIRS = bin dev etc home lib mnt proc usr var home/httpd home/web
   home/httpd home/web 是自己添加的。
 
4.
在 Goahead/LINUX/makefile 开头添加
#####################################################################
CROSS_COMPILE   = arm-elf-
AS      = $(CROSS_COMPILE)as
LD      = $(CROSS_COMPILE)ld
CC      = $(CROSS_COMPILE)gcc
CPP     = $(CC) -E
AR      = $(CROSS_COMPILE)ar
NM      = $(CROSS_COMPILE)nm
STRIP       = $(CROSS_COMPILE)strip
OBJCOPY     = $(CROSS_COMPILE)objcopy
OBJDUMP     = $(CROSS_COMPILE)objdump


####################################################################
 
同时把 DEBUG = -g -Wall 改为
DEBUG = -Wall
很明显,这里是修改为gcc为arm-elf-gcc编译,同时去掉debug信息。
或者你可以直接把几个 $(cc) 直接修改为 arm-elf-gcc .
 
 
修改Goahead源码部分:
==================================================================
5. uclinux 采用 uClib-c (我得lib是用uClib-c的,用uClibc没有试过)
 
6. 修改所有arm-elf-gcc 不认识的宏。把这些宏改写成一行就可以了。一般就是因为 "/ "
等.
 
7. fork 改为 vfork (main.c (LINUX) )
 
8. webs.c Line 1434
fmtAlloc(&msgbuf, WEBS_MAX_URL + 80,
        T( "<html><head></head><body>/r
/
        T( "This  document has moved to a new <a href=/ "%s/ ">location</a>./r
/
        T( "Please update your  documents to reflect the new location./r
/


        T( "</body></html>/r
"), url);
  arm-elf-gcc似乎不认识 “/”这个符合,只能把fmtAlloc语句写成一行。
 
9.  uemf.h 文件  LINE 242
去除 timeval的定义,在uclinux下重复定义了。
#if (defined (LINUX) && !defined (_STRUCT_TIMEVAL))
struct timeval
{
    time_t  tv_sec;     /* Seconds.  */
    time_t  tv_usec;    /* Microseconds.  */
};
#define _STRUCT_TIMEVAL 1
#endif
 
10.  main.c (LINUX) 中
websGetCgiCommName(..)函数中
把pname1 = tempnam(NULL, T( "cgi ")); 改为
pname1 = (char_t*)mkstemp( T( "cgi ")); (估计不改tempnam 也无什么大碍)
 
 
11.
    main.c(linux) 文件


    initwebs(...) 函数中:
    /*
    if ((hp = gethostbyname(host)) == NULL) {
        error(E_L, E_LOG, T( "Can 't get host address "));
        fprintf(stderr, "initWebs: host name %s/r
",host);
        return -1;
    }
    memcpy((char *) &intaddr, (char *) hp->h_addr_list[0],
        (size_t) hp->h_length);
    */
    intaddr.s_addr = inet_addr( "192.168.0.128 ");    // 44B0的网卡IP
 
    gethostbyname函数在此处无效,我屏蔽了这段,不得已只能直接写入IP地址给
intaddr了。
 
    在不能调试的情况下,gethostbyname这一段实在是花了我大半的时间。
    最要命的是,我的44b0板子里的tftp 死活不工作,没办法只好一边一边的编译内核,
下载到板子上运行查看串口的数据。
    不然可以用tftp把webs 通过网络下载到板子运行,就不用编译内核了。
 
12. 编译过程:
 


    >cd uclinux目录下
    >make config;make clean;
    >make lib_only;make user_only
    >make romfs
    >cd 进入Goahead/LINUX目录
    >make clean
    >make
    >cp -i webs.exe /romfs/home/web/webs.exe    ( webs.exe程序编译后大概 80k左
右吧。)
    >cd 到uclinux目录下
    >make image
    >make
 
 
 
13. 要关闭IE的代理。
    先ping一下 目标板,看网络通不通,或者在目标板子上ping一下pc机。
    IP地址就是 第11步中 指定的IP 。
    然后
    > cd /home/web/
    > ./webs
    启动 Goahead。 网页可以放在与webs.exe 同一级的web目录下。 web目录是Goahead源


    在Goahead运行中,有网页请求的时候,我的超级终端中会出现如下东东:
    “> skput:over: 0c071aa4:272 put:272 dev:eth0<2>kernel BUG at skbuff.c:92!”
    不知道什么意思。
 
14. Goahead/web 下有详细的文档说明。关于 configure 跟install的一定要看。
 
--badegg 学习笔记

 

这篇关于Goahead在ucLinux下的移植的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927595

相关文章

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

RT-Thread(Nano版本)的快速移植(基于NUCLEO-F446RE)

目录 概述 1 RT-Thread 1.1 RT-Thread的版本  1.2 认识Nano版本 2 STM32F446U上移植RT-Thread  2.1 STM32Cube创建工程 2.2 移植RT-Thread 2.2.1 安装RT-Thread Packet  2.2.2 加载RT-Thread 2.2.3 匹配相关接口 2.2.3.1 初次编译代码  2.2.3.

libmad音频解码库-Linux交叉编译移植

下载并解压libmad-0.15.1b.tar.gz 下载链接:https://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz $tar -xvf libmad-0.15.1b.tar.gz$cd libmad-0.15.1b 1、先执行下面的命令:这条命令是为了适配高版本的gcc,因为高版本的gcc已经将-fforce-mem去除了:

arm linux lua移植

lua: lua home 1.下载lua源码 lua下载 lua-5.3.4.tar.gz 2.解压: tar xvf lua-5.3.4.tar.gz 3.修改makefile and luaconf.h $修改 lua-5.3.4/Makefile #INSTALL_TOP= /usr/local INSTALL_TOP= $(shell pwd)/out #修改安装目录(当前目录/o

s3c2440---PWM使用之蜂鸣器驱动移植

一、蜂鸣器驱动介绍 1.1.什么是蜂鸣器               蜂鸣器是一种简单的声响发生器,常用于电子产品中作为警示或提醒作用。其基本原理是通过交替改变直流电的电压方向来产生声音,一般使用交替电流产生声音会比较稳定。 1.2.蜂鸣器的类别 1.有源蜂鸣器 1)结构原理 有源蜂鸣器内部自带振荡源,只需接通电源即可发声。内部电路会自动产生一定频率的振荡信号,从而驱动蜂鸣器发声。

【GD32】---- 移植工程模板及点灯测试

1 新建模板文件夹 新建一个名叫03_GD32TemplateProject的文件夹,用于建造工程模板 2 移植官方库文件 在模板文件夹里新建5个文件夹,分别存放官方库文件和系统驱动文件 01_main 存放main函数 02_Startup 存放系统启动文件 03_System 存放官方的系统文件 04_Firmware_PeripheralDriver 存放官方

[rk3588 ubuntu20.04]移植ROS2

目录 1 使用命令行安装ROS2 1.1设置语言 1.2添加源 1.3安装ROS2 1.4设置环境变量 2 在编译源码阶段安装ROS2 2.1调整roofts.img大小 2.2 安装ROS2 3 ROS2功能测试 1 使用命令行安装ROS2 1.1设置语言         设置语言为UTF-8。 sudo apt update && sudo apt insta

让linux下无线网卡变身随身wifi----hostapd移植-Nazgul

有了前面的检测,确定了我们的网卡是能够拥有热点共享功能的,但是如何让它共享出来呢? 于是有了这篇文章的诞生,hostapd移植 hostapd    可以让我们的网线网卡变成热点 1、下载     git clone git://w1.fi/srv/git/hostap.git   得到hostap目录,但是里面wpa_supplicant and hostapd的结合在

让linux下无线网卡变身随身wifi----前言--iw移植-Nazgul

最痛苦的事莫过于--上班 最最痛苦的事莫过于--上班有网不能上 最最最痛苦的事莫过于--上班有网能上却没有wifi 最最最最痛苦的事莫过于--你有无线网卡却没有U口可插 最最最最最痛苦的事莫过于--有U口插却发现U口只在开发板上 最最最最最最痛苦的事莫过于--开发板上有u口但是跑的是linux 最最最最最最最痛苦的事莫过于--linux能驱动网卡,但是如何共享出wifi来啊 于是,,,

游戏图片移植问题!DDS转PVR

折腾了两天,PS转PNG脚本无法批处理执行,Texturepacker PNG转PVR保存文件无效果。 最后还是用了神器PVRTexTool+BAT解决 首先下载:http://ishare.iask.sina.com.cn/f/18008068.html?from=like 配置好环境变量,右键点击我的电脑>属性>高级>环境变量,双击Path变量在最后的位置添加字段:F:\PVRTexTo