这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 开源硬件 » 【Joytag 香蕉R1学习】OpenWrt for R1:设置主机名、时区、L

共2条 1/1 1 跳转至

【Joytag 香蕉R1学习】OpenWrt for R1:设置主机名、时区、LED

专家
2015-02-14 14:49:30     打赏
《【Joytag 香蕉R1学习】OpenWrt for R1有线路由, Telnet,SSH, LuCI》一文中,
我们为R1设置了密码,开启了SSH,并安装了web管理界面。

本文中,我们将讲述如何修改主机名,时区,以及设置R1上那个绿色的LED。
除此之外,我们还将探索一下,这些修改是如何实现的。

配置主机名、时区、LED

有了web界面,配置主机名,时区,LED那是相当的简单了。
http://192.168.1.1
登录管理界面


在System->System界面下,即可设置主机名(hostname),以及时区
在此例中,我们将默认主机名(OpenWrt)修改为(JoyWrt)
时区从UTC修改为Asia/Hong Kong (东八区,北京时间,北京和香港同为东八区)

点"Save & Apply" (保存并应用), 即可生效。是不是很简单。

按照之前系列的文章一步一步设置过来的兄弟,一定会对R1左上角的绿色LED印象深刻。
用家乡话说,那叫贼亮贼亮的,尤其是夜晚,有些刺眼恼人。
现在不必纠结了,是关掉还是让它偶尔闪烁一下,你都可以做到。

在System->LED Configuration界面,你可以自定义LED灯的行为。
其中Trigger代表如何触发, 默认是defaulton(常亮),我们可以将之关闭(none)
甚至可以让其规律闪烁(blink)。
上图既通过定时器,控制绿色LED亮一秒,暗两秒。

设置机制

通过上述内容,我们学会了如何设置主机名,时区,LED。
但是我们的本意是折腾,而不是简单应用。
那么接下来,就是探究一下这些设置是如何起作用的呢?

我们知道,大部分设置(Or 所有设置?)都是保存在/etc/config/目录下,
那么我们来看看之前这三项设置都保存到哪里呢?
/etc/config/system 这个文件看起来很贴边,打开看看:
  1. config system
  2.         option conloglevel '8'
  3.         option cronloglevel '8'
  4.         option hostname 'JoyWrt'
  5.         option zonename 'Asia/Hong Kong'
  6.         option timezone 'HKT-8'

  7. config timeserver 'ntp'
  8.         list server '0.openwrt.pool.ntp.org'
  9.         list server '1.openwrt.pool.ntp.org'
  10.         list server '2.openwrt.pool.ntp.org'
  11.         list server '3.openwrt.pool.ntp.org'
  12.         option enabled '1'

  13. config led
  14.         option default '0'
  15.         option name 'TEST'
  16.         option sysfs 'lamobo:green:usr'
  17.         option trigger 'timer'
  18.         option delayon '1000'
  19.         option delayoff '2000'

复制代码 是不是找到啦? 主机名,时区,LED,还有NTP设置(本例中我们没改)

通过测试,我们直接修改这些配置,并重启,也是一样的效果。
现在我们多了一种修改配置的手段了。

那么,接下来,这些设置又是被如何读取以及应用的呢?
让我们关注这个文件:
/etc/init.d/system
#!/bin/sh /etc/rc.common
# Copyright (C) 2014 OpenWrt.org

START=10
USE_PROCD=1

validate_system_section()
{
        uci_validate_section system system "${1}" \
                'hostname:string:OpenWrt' \
                'conloglevel:uinteger' \
                'buffersize:uinteger' \
                'timezone:string:UTC' \
                'zonename:string'
}

system_config() {
        local cfg="$1"

        local hostname conloglevel buffersize timezone zonename

        validate_system_section "${1}" || {
                echo "validation failed"
                return 1
        }

        echo "$hostname" > /proc/sys/kernel/hostname
        [ -z "$conloglevel" -a -z "$buffersize" ] || dmesg ${conloglevel:+-n $conloglevel} ${buffersize:+-s $buffersize}
        echo "$timezone" > /tmp/TZ
        [ -n "$zonename" ] && [ -f "/usr/share/zoneinfo/$zonename" ] && ln -s "/usr/share/zoneinfo/$zonename" /tmp/localtime

        # apply timezone to kernel
        date -k
}

reload_service() {
        config_load system
        config_foreach system_config system
}

service_triggers()
{
        procd_add_reload_trigger "system"
        procd_add_validation validate_system_section
}

start_service() {
        reload_service
}

从这个脚本可以看出,当我们启动或者重载这个服务时,会:读取配置文件、加载配置项、遍历配置项(验证、设置)

而这个脚本
/etc/init.d/led
负责从/etc/config/system中读取led设置部分,并对其设置。
以文中配图为例,主要起作用的是这部分代码:
  1.                 "timer")
  2.                         [ -n "$delayon" ] && \
  3.                                 echo $delayon > /sys/class/leds/${sysfs}/delay_on
  4.                         [ -n "$delayoff" ] && \
  5.                                 echo $delayoff > /sys/class/leds/${sysfs}/delay_off
  6.                         ;;

复制代码
一点困惑

对于设置时区部分,我曾尝试直接在配置文件中写入UTC+8
结果得出的时间竟然与北京时间相差16个小时。
写入UTC-8,结果正常。
对此很难理解。
http://en.wikipedia.org/wiki/Time_zone
http://en.wikipedia.org/wiki/UTC_offset
http://en.wikipedia.org/wiki/List_of_UTC_time_offsets
从维基百科的资料描述,我们无疑属于东八区UTC+8,为何要设置成UTC-8才对呢?
希望各路高手予以解答。

专家
2015-02-14 15:19:35     打赏
2楼
没用过r1,晚上我试试micro吧,看看是不是wrt的通病

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]