Linux系统设备相关参数配置


《ARM Linux开发-warewin 2G/3G无线传输(DTU)和路由器—笔记》

4.1、参数的整体设计

总参数是设备参数,存放在flash中,掉电不丢失。进程参数是在每次系统初始化时由主程序生成到参数配置文件中,存在内存中,掉电丢失。

设备参数第一次由默认列表参数生成参数文件,保存参数文件的同时备份参数文件,当读取参数文件出问题时可读取备份文件,避免参数文件丢失后读不出参数变成出厂默认值。

设置参数通过WEB页面进行设置,设置后需重启系统新参数才生效。

4.2参数按照功能分类

1、系统基本参数:登录系统用户名和密码、系统重启时间、工作模式、本地IP等。

2PPP拨号:连接广域网拨号用的用户名、密码、APN、拨号号码等。

3DTU功能:使用无线数据传输包括串口相关、协议相关、远程通信相关的参数等。

4、条件触发:电话触发包括5个电话号码参数,定时上下线触发包括5个时间段参数,及下线间隔参数。

5、网络检测:ICMP检测包括5IP地址参数,DNS检测包括5个域名参数,及检测间隔参数。

6DDNS:登录花生壳DDNS的用户名和密码2个参数。

7、防火墙:MAC地址过滤包括5MAC地址参数,客户端过滤用的一个包含10IP和端口范围的列表参数。

8、虚拟服务器:端口转发用的一个包含10IP和端口范围的列表参数、DMA主机功能用的IP地址参数。

9NTP网络校时:设置时区用的时区参数、包含3NTP时间服务器IP地址的参数。

10DHCP服务:给主机动态分配置IP的范围,包括起始地址、结束地址及过期时间3个参数。

4.3、参数按照范围分类

1、设备参数,设备所用的全部参数,包括设备本身用的基本参数、进程参数、某些功能所用参数等。

2、进程参数,设备启动很多个进程,每个进程需要用到自己相关的参数,这些参数是从设备参数中生成到各个进程的配置文件里。

4.4、设备参数文件的格式及存放

设备参数文件格式为文本格式。

参数文件para和其备份文件para_back存放在flash/dev/mtdblock3分区。系统初始化时在根文件系统的/usr目录下建立了parapara_back链接,分别指向/mnt/jffs2目录下的parapara_back文件。在参数初始化中直接访问/usr/para/usr/para_back链接文件读取参数。

4.5、设备参数的读取及设置

参数进行初始化时读取/usr/para设备参数文件,如果参数文件丢失再读取参数备份文件/usr/para_back,以回车为分隔符按行读取,每行再以“=”为分隔符读取出参数名和参数值。

设备参数通过WEB页面设置,提交给后台进行验证,验证通过再设置到参数中,提交参数并返回给WEB页面成功提示,验证不通过直接返回错误提示给WEB页面。提交函数先打开参数文件/usr/para和参数备份文件/usr/para_back,把所有参数写入这两个文件中。

参数文件部分内容格式如下图所示:

 

4.1 参数配置文件内容图

4.6、设备参数的整体读取和整体设置

因所有参数都存在/etc/para文件中,所以只需拷贝或读取此文件可获取所有参数。

整体设置只需将所有的参数写入/etc/para文件,覆盖原有内容即可。

4.7、设备参数恢复出厂设置处理

路由器进入系统后读取restore_defaults参数的值,如果为1则从默认参数列表中读出默认值设置到参数中,非默认列表中的参数值不改变,否则按照原有的参数值初始化参数。实现方法有硬件恢复和软件恢复两种。

4.7.1、硬件恢复

使用路由器上“恢复出厂设置”按键,按下按键约4秒左右待指示灯亮起松开。应用程序中会每隔4秒钟使用GPIO读取PC0(连接“恢复出厂设置”按键)的IO状态,当状态为1(按键按下状态)时做恢复出厂设置的相关处理,把restore_defaults参数设为1并点亮指示灯提示,然后关闭看门狗进程使系统重启,系统重启后开始恢复其出厂默认的设置。

4.7.2、软件恢复

点击WEB页面上的“恢复出厂设置”按钮,提交给后台处理,后台把恢复出厂默认值标志restore_defaults参数设为1,然后关闭看门狗进程使系统重启,系统重启后开始恢复其出厂默认的设置。

4.8、进程参数的保存格式和存放

进程使用的参数由主程序在参数初始化后将相关参数读出,写到该进程的参数配置文件中,并存放在系统的/etc目录下。写入文件的参数格式为参数名+空格+参数值+回车。

进程参数文件格式为*.conf文本文件。

例如:DTU相关进程参数内空格式如下图所示:

 

4.2 DTU参数配置文件内容图

4.9、进程参数的读取和设置

因进程编译到Buysobox中,可使用busybox中函数读取参数。例如:在应用程序中要读取/etc/telephone.conf中的tel_num0~45个参数,如以下步骤:

参数内容如下:

 

4.3 电话列表参数内容图

1、定义参数结构:

struct config_t {

u8_t *tel_num[5];     

};

struct config_t telephone_config;

2、使用busybox里的结构config_keyword定义参数关键字:

static const struct config_keyword keywords[] = {

//keyword       handler   variable address               default 

{"tel_num0",    read_str, &(telephone_config.tel_num[0]),    ""},

{"tel_num1",    read_str, &(telephone_config.tel_num[1]),    ""},

{"tel_num2",    read_str, &(telephone_config.tel_num[2]),    ""},

{"tel_num3",    read_str, &(telephone_config.tel_num[3]),    ""},

{"tel_num4",    read_str, &(telephone_config.tel_num[4]),    ""},

}; 

enum { KWS_WITH_DEFAULTS = ARRAY_SIZE(keywords)};// - 6 

int read_str()函数将参数转换为字符串。

3将参数配置参数读取出来,处理过程如以下函数:

void dtu_read_config(const char *file,struct config_keyword *keywords,int size)

{

parser_t *parser;

const struct config_keyword *k;

unsigned i;

char *token[2];

int KWS_WITH_DEFAULTS= size;

for (i = 0; i < KWS_WITH_DEFAULTS; i++)

keywords[i].handler(keywords[i].def, keywords[i].var);

parser = config_open(file);

while (config_read(parser, token, 2, 2, "# \t", PARSE_NORMAL)) {

for (k = keywords, i = 0; i < size; k++, i++) {

if (!strcasecmp(token[0], k->keyword)) {

if (!k->handler(token[1], k->var)) {

bb_error_msg("can't parse line %u in %s",

parser->lineno, file);

k->handler(k->def, k->var);

}

break;

}

}

}

config_close(parser);

}

因进程参数是主程序从设备参数中生成,所以只需在WEB页面设置相关参数,保存后重启系统,即可重新将新的参数生成到配置文件中。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值