经过几天折腾,摸索完成了arm-linxu busybox httpd cgi的实现,完成对开发板的网络参数、时钟、串口进行配置
设置网络参数的cgi程序
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int ip[4];
int mask[4];
int gw[4];
int mac[6];
char str[256];
int i,len;
int reset = 0;
FILE *fp=NULL;
char* queryString = getenv("QUERY_STRING");
if((queryString != NULL) && (sscanf(queryString, "ip=%d.%d.%d.%d&mask=%d.%d.%d.%d&gw=%d.%d.%d.%d", &ip[0], &ip[1], &ip[2], &ip[3], &mask[0], &mask[1], &mask[2], &mask[3], &gw[0], &gw[1], &gw[2], &gw[3]) ==12)){
fp = fopen("/etc/network/eth0-setting", "rt+");
if(fp!=NULL){
while (!feof(fp)){
fgets(str, 256, fp);
if(sscanf(str, "MAC=%02x:%02x:%02x:%02x:%02x:%02x", &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) == 6){
reset = 1;
break;
}
}
fseek(fp,0,SEEK_SET);
fprintf(fp, "IP=%d.%d.%d.%d\r\n", ip[0], ip[1], ip[2], ip[3]);
fprintf(fp, "Mask=%d.%d.%d.%d\r\n", mask[0], mask[1], mask[2], mask[3]);
fprintf(fp, "Gateway=%d.%d.%d.%d\r\n", gw[0], gw[1], gw[2], gw[3]);
fprintf(fp, "MAC=%02X:%02X:%02X:%02X:%02X:%02X\r\n \r\n", mac[0], mac[1], mac[2], mac[3],mac[4], mac[5]);
fclose(fp);
}
}else{
fp = fopen("/etc/network/eth0-setting", "r");
if(fp!=NULL){
while (!feof(fp)){
fgets(str, 256, fp);
if(sscanf(str, "IP=%d.%d.%d.%d\r\n", &ip[0], &ip[1], &ip[2], &ip[3]) == 4){
}
if(sscanf(str, "Mask=%d.%d.%d.%d\r\n", &mask[0], &mask[1], &mask[2], &mask[3]) == 4){
}
if(sscanf(str, "Gateway=%d.%d.%d.%d\r\n", &gw[0], &gw[1], &gw[2], &gw[3]) == 4){
}
if(sscanf(str, "MAC=%02x:%02x:%02x:%02x:%02x:%02x\r\n", &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) == 6){
}
}
fclose(fp);
}else{
ip[0] = 192;
ip[1] = 168;
ip[2] = 1;
ip[3] = 100;
mask[0] = 255;
mask[1] = 255;
mask[2] = 255;
mask[3] = 0;
gw[0] = 192;
gw[1] = 168;
gw[2] = 1;
gw[3] = 1;
mac[0] = 11;
mac[1] = 22;
mac[2] = 33;
mac[3] = 44;
mac[4] = 55;
mac[5] = 66;
}
}
printf("Content-Type:text/html\n\n");
printf("<html>\r\n");
printf("<head>");
printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
printf("<script language=\"javascript\" type=\"text/javascript\" src=\"js.js\"></script>");
printf("<link rel=\"stylesheet\" type=\"text/css\" href=\"css.css\" />");
printf("</head>");
printf("<body style=\"\" lang=\"EN-US\" link=\"blue\" vlink=\"blue\">");
printf("<div class=\"Section1\">");
printf("<div style=\"margin-left: 30pt;\">");
printf("<div align=\"center\">");
printf("<table width=500; align=\"left\">");
printf("\r\n<table width=500;align=\"left\">");
printf("<td>\r\n");
printf("<form method=\"GET\" action=\"/cgi-bin/set_net.cgi\">\r\n");
printf("<table width=500;align=\"left\">");
printf("<tr><td width=\"90\">IP地址</td><td><input class=\"input-text\" name=\"ip\" value= \"%d.%d.%d.%d\"></td></tr>\r\n", ip[0], ip[1], ip[2], ip[3]);
printf("<tr><td width=\"90\">子网掩码</td><td><input class=\"input-text\" name=\"mask\" value= \"%d.%d.%d.%d\"></td></tr>\r\n", mask[0], mask[1], mask[2], mask[3]);
printf("<tr><td width=\"90\">网关地址</td><td><input class=\"input-text\" name=\"gw\" value= \"%d.%d.%d.%d\"></td></tr>\r\n", gw[0], gw[1], gw[2], gw[3]);
printf("<tr><td width=\"90\">MAC地址</td><td><input class=\"readonly-text\" readonly=\"readonly\" value= \"%02X:%02X:%02X:%02X:%02X:%02X\"></td></tr>\r\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
printf("<tr><td><input type=\"submit\" value=\"提交\"></td>");
if(reset==1)printf("<td><a href=\"../admin/reset.html\">参数已经修改,请手动复位设备</a></td></tr>");
printf("</tr>\r\n");
printf("</form>\r\n");
printf("</td>\r\n");
printf("</table>");
printf("<p> </p><p> </p>");
printf("</table>");
printf("</body>");
printf("</html>\r\n");
fflush(stdout);
return 0;
}