GoAhead4.1.0 移植
Posted silencehuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GoAhead4.1.0 移植相关的知识,希望对你有一定的参考价值。
环境
官方文档:https://www.embedthis.com/goahead/doc/
源码下载: goahead-4.1.0-src.tgz
系统平台:Ubuntu 12.04.4
gcc version 4.6.3
移植步骤
1.解压与编译
前提:交叉编译工具 arm-none-linux-gnueabi-gcc 已经安装并配置了环境变量;
tar -zxvf goahead-4.1.0-src.tgz cd goahead-4.1.0
// 交叉编译
make CC=arm-none-linux-gnueabi-gcc ARCH=arm
编译之后在 goahead-4.1.0/build 目录下生成了 linux-arm-default 文件夹
里面包含我们需要的 goahead 可执行文件和 库
2.开始测试
新建一个 goahead 文件夹,可nfs挂载,我们使用nfs挂载调试
将 goahead-4.1.0/build/linux-arm-default/bin 里面的 goahead libgo.so 拷贝到 goahead 文件夹
目标arm板开启 mount 挂载
cd /mnt/goahead
// 运行测试
./goahead -v ./web/ 192.168.10.111:80
这里出现不能获取本地IP地址
解决方案一:
修改源码 goahead-4.1.0/src/http.c
#else #if 0 struct hostent *hp; if ((hp = gethostbyname(host)) == NULL) error("Cannot get host address for host %s: errno %d", host, errno); return -1; memcpy((char*) &intaddr, (char *) hp->h_addr_list[0], (size_t) hp->h_length); ipaddr = inet_ntoa(intaddr); #else // wangh 2019-6-4 换种方式获取ip地址 (ipv4) int sockfd; struct sockaddr_in sin; struct ifreq ifr; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd == -1) return -1; strncpy(ifr.ifr_name, "eth0", IFNAMSIZ); //网卡多的得修改下 ifr.ifr_name[IFNAMSIZ - 1] = 0; if (ioctl(sockfd, SIOCGIFADDR, &ifr) < 0) return -1; memcpy(&sin, &ifr.ifr_addr, sizeof(sin)); ipaddr=inet_ntoa(sin.sin_addr); #endif websSetIpAddr(ipaddr); websSetHost(ipaddr); #endif return 0;
修改源码后需重新编译,并重新将 goahead-4.1.0/build/linux-arm-default/bin 里面的 goahead libgo.so 拷贝到 goahead 文件夹
再测试
拷贝 build/linux-arm-default/bin/self.crt self.key 到 goahead
测试发现 不能打开 route.txt
拷贝 goahead-4.1.0/src/route.txt 到 goahead
拷贝 goahead-4.1.0/src/auth.txt 到 goahead
这里说明移植运行成功
再浏览器输入 目标板主机地址 192.168.1.124
这是因为网页的内容还没有添加
3 web内容添加
再 goahead 文件夹下 新建 web 文件夹
编写 测试 首页
<html> <!- Copyright (C) HTGD Co.,Ltd. 2019 All Rights Reserved. -> <head> <!- 文档包含的元数据 -> <title>M283 Web Application</title> <!- 文档标题 -> <meta charset="UTF-8"> <!- 中文编码 -> <link rel="stylesheet" href="style/normal_ws.css" type="text/css"> </head> <body> <!- 元素包含了可见的页面内容 -> <h1>M283 Web Application</h1> <!- 一级标题 -> <h2>The Simplified I/O Device Control</h2> <!- 二级标题 -> <form id="gpio-2-4" action="/goform/gpio_p24" method="post"> <input type="hidden" name="lab_gpio_p2.4" value="gpio-p2.4" /> <table border="0"> <tr> <td width=100><b>DeviceName </b></td> <td width=100><b>Direction </b></td> <td width=100><b>Value </b></td> <td width=100><b>Setting</b></td> </tr> <tr> <td width=100> Gpio P2.4 </td> <td width=100> <input type="checkbox" name="dir24" title="out" />out</td> <td width=100> <input type="checkbox" name="val24" /></td> <td width=100><input type="submit" value="set" /></td> </tr> </table> </form> <form id="gpio-2-5" action="/goform/gpio_p25" method="post"> <input type="hidden" name="lab_gpio_p2.5" value="gpio-p2.5" /> <table> <tr> <td width=100> Gpio P2.5</td> <td width=100> <input type="checkbox" name="dir25" title="out" />out</td> <td width=100> <input type="checkbox" name="val25" /></td> <td width=100><input type="submit" value="set" /></td> </tr> </table> </form> <form id="gpio-2-6" action="/goform/gpio_p26" method="post"> <input type="hidden" name="lab_gpio_p2.6" value="gpio-p2.6" /> <table> <tr> <td width=100> Gpio P2.6</td> <td width=100> <input type="checkbox" name="dir26" title="out" />out</td> <td width=100> <input type="checkbox" name="val26" /></td> <td width=100><input type="submit" value="set" /></td> </tr> </table> </form> <form id="gpio-2-7" action="/goform/gpio_p27" method="post"> <input type="hidden" name="lab_gpio_p2.7" value="gpio-p2.7" /> <table> <tr> <td width=100> Gpio P2.7</td> <td width=100> <input type="checkbox" name="dir27" title="out" />out</td> <td width=100> <input type="checkbox" name="val27" /></td> <td width=100><input type="submit" value="set" /></td> </tr> </table> </form> <form id="gpio-led" action="/goform/led" method="post"> <input type="hidden" name="lab_led" value="led-err" /> <table> <tr> <td width=100> LED-ERR</td> <td width=100> <input type="checkbox" name="dir_led" checked disabled title="out" />out</td> <td width=100> <input type="checkbox" name="val_led" /></td> <td width=100><input type="submit" value="set" /></td> </tr> </table> </form> <form id="gpio-buzzer" action="/goform/buzzer" method="post"> <input type="hidden" name="lab_buzzer" value="buzzer" /> <table> <tr> <td width=100> BUZZER</td> <td width=100> <input type="checkbox" name="dir_buz" checked disabled title="out" />out</td> <td width=100> <input type="checkbox" name="val_buz" /></td> <td width=100><input type="submit" value="set" /></td> </tr> </table> </form> <p> <!- 元素定义一个段落 -> About the GPIO P2.4(,5,6,7), we assume the pin(s) are exported previously<br /> and they can work as GPIO.<br /><br /> The buzzer must connect JP1(BZ) on the board, else it does not buzze<br /> when the control signal is valid. </p> <h2> System LCD Backlight Control</h2> <form id="lcdbkl" action="/goform/lcdbkl" method="post"> <input type="hidden" name="lab_bkl" value="lab_bkl" /> <table> <tr> <td><b>backlight(0-100): </b></td> <td><input type="text" name="bkl_val" value="80" size="3" maxlength="3" />%</td> <td><input type="submit" name="lcd_bk" value="set"/></td> </tr> </table> <hr/> <p align="center"><b> © 2019 HTGD Co.,Ltd.</b> <a href="http://www.htgd.com.cn">公司主页</a></p> </body> </html>
然后执行 ./goahead -v ./web/
默认打开 index.html 其他页面直接写名称
以上是关于GoAhead4.1.0 移植的主要内容,如果未能解决你的问题,请参考以下文章