经过几天折腾,摸索完成了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=x:x:x:x:x:x", &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=X:X:X:X:X:X\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=x:x:x:x:x:x\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= \"X:X:X:X:X:X\"></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; }
