1. 程式人生 > >RT5350 openwrt新增Reset按鍵,實現短按重啟系統,長按復位系統

RT5350 openwrt新增Reset按鍵,實現短按重啟系統,長按復位系統

新增Reset按鍵,實現短按重啟系統,長按復位系統

1、檢視目前的gpio
cat /sys/kernel/debug/gpio
GPIOs 0-21, platform/10000600.gpio, 10000600.gpio:
 gpio-0   (S1               ) in  hi

顯示系統已經新增S1按鍵

2、將S1改為reset按鍵,其中S1按鍵使用的是GPIO0管腳,高電平有效:
修改openwrt/trunk/target/linux/ramips/dts/MPRA2.dts這個配置檔案:
    gpio-keys-polled {
        compatible = "gpio-keys-polled";
        #address-cells = <1>;
        #size-cells = <0>;
        poll-interval = <20>;
        wps {
            label = "reset"; //由S1改為reset
            gpios = <&gpio0 0 1>;
            linux,code = <0x198>;
        };
    };
按鍵名稱為 reset 按鍵值為 0x198。為什麼是0x198呢?
檢視按鍵驅動的原始碼 gpio-button-hotplug.c
可以看到一個結構體陣列 button_map[] 。該陣列對鍵值做了對映


3、當用戶按下按鈕時,驅動會嚮應用層傳送事件,最終執行 /etc/rc.button/reset 這個指令碼,對

應的內容如下:
#!/bin/sh

[ "${ACTION}" = "released" ] || exit 0

. /lib/functions.sh

logger "$BUTTON pressed for $SEEN seconds"

if [ "$SEEN" -lt 2 ]
then
    echo "REBOOT" > /dev/console
    sync
    reboot
elif [ "$SEEN" -gt 5 ]
then
    echo "zllgateway file data FACTORY RESET" > /dev/console
    rm /zllgateway/*.dat
    killall zllgateway
fi

當按下reset按鍵不超過 2s 時,會執行 reboot 重啟命令

當按下reset按鍵超過 5s 時,則清除檔案,並停止程式,重啟程式

4、在/openwrt/trunk/files/etc/rc.button目錄下新增上面的reset指令碼,重新make編譯系統