环境

官方文档: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.-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 -;
}
memcpy((char*) &intaddr, (char *) hp->h_addr_list[], (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, );
if (sockfd == -)
{
return -;
}
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ); //网卡多的得修改下
ifr.ifr_name[IFNAMSIZ - ] = ;
if (ioctl(sockfd, SIOCGIFADDR, &ifr) < )
{
return -;
}
memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
ipaddr=inet_ntoa(sin.sin_addr);
#endif
websSetIpAddr(ipaddr);
websSetHost(ipaddr);
}
#endif
return ;
}

修改源码后需重新编译,并重新将 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> &copy; 2019 HTGD Co.,Ltd.</b> <a href="http://www.htgd.com.cn">公司主页</a></p>
</body>
</html>

然后执行 ./goahead -v ./web/

默认打开 index.html  其他页面直接写名称

最新文章

  1. 多线程知识点总结 -NSThread4
  2. 20.cocoapods的安装和使用
  3. linux笔记:用户和用户组管理-用户配置文件
  4. Libfilth(一个滤波器C库)使用
  5. Jquery - Select 和 Checkbox 、Textarea的操作
  6. 20145305 《Java程序设计》实验四
  7. OC基础(6)
  8. Android开发之神奇的Fading Edge,让你的View更有层次感!
  9. Jsp学习(1)
  10. X86架构与ARM架构比较
  11. Maven+SpringMVC+Mybatis 开发环境整合
  12. mahout入门指南之基于mahout的itembased算法
  13. [Linux 使用(2)] 64位Linux下安装jboss-as-7.1 以及jdk1.7
  14. vs2015 制作安装包额外需要安装的软件VSI_bundle
  15. Python爬虫入门教程 21-100 网易云课堂课程数据抓取
  16. linux服务器性能——CPU、内存、流量、磁盘使用率的监控
  17. ONOS架构-系统组件
  18. Spark:java.net.BindException: Address already in use: Service &#39;SparkUI&#39; failed after 16 retries!
  19. 解决Visual Studio(2017)软件无法重新生成问题
  20. (转)java基础-反射

热门文章

  1. 添物零基础到架构师(基础篇) - JavaScript
  2. 全文搜索(A)-相关性
  3. 网页js粘贴截图
  4. Spring Boot实现多个数据源教程收集(待实践)
  5. ibatis中isNotNull与isNotEmpty区别
  6. test markdown 写博客
  7. 必测的支付漏洞(一)——使用fiddler篡改支付金额
  8. no matching function transform?
  9. 【转】c++中placement new操作符
  10. AutoCAD如何设置线宽