|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
经过好多个小时的努力,终于获取了路由器GPIO的控制权:lol:
不知道主板上引出来多少个GPIO引脚,但是看源码上大部分的GPIO是没有使用的:lol:
下面以7620A为例。
首先你得有源码,一般都是git clone下来的,进入target/linux/ramips目录。
- alvin@W500 ~/openwrt/openwrt $ cd target/linux/ramips/
- alvin@W500 ~/openwrt/openwrt/target/linux/ramips $ ls
- base-files dts files image Makefile modules.mk mt7620 patches-5.4
- alvin@W500 ~/openwrt/openwrt/target/linux/ramips $
复制代码 除了MT7620之外的几个目录被我删掉了,别觉得跟我的不一样哈。
我前面的时间都搞错方向了,一直在用grep命令,find命令查找我这块板的LED的GPIO口24和26,结果人家代码里面压根不是以24和26来定义的!
用vi打开dts/7620a.dtsi,vi的用法自己上网查,不查保证你不会用:lol::lol::lol:
- alvin@W500 ~/openwrt/openwrt/target/linux/ramips $ vi dts/mt7620a.dtsi
复制代码 往下翻到gpio0,gpio1的地方
- gpio0: gpio@600 {
- compatible = "ralink,mt7620a-gpio", "ralink,rt2880-gpio";
- reg = <0x600 0x34>;
- resets = <&rstctrl 13>;
- reset-names = "pio";
- interrupt-parent = <&intc>;
- interrupts = <6>;
- gpio-controller;
- #gpio-cells = <2>;
- ralink,gpio-base = <0>;
- ralink,num-gpios = <24>;
- ralink,register-map = [ 00 04 08 0c
- 20 24 28 2c
- 30 34 ];
- };
- gpio1: gpio@638 {
- compatible = "ralink,mt7620a-gpio", "ralink,rt2880-gpio";
- reg = <0x638 0x24>;
- interrupt-parent = <&intc>;
- interrupts = <6>;
- gpio-controller;
- #gpio-cells = <2>;
- ralink,gpio-base = <24>;
- ralink,num-gpios = <16>;
- ralink,register-map = [ 00 04 08 0c
- 10 14 18 1c
- 20 24 ];
- /* status = "disabled"; */
- };
- gpio2: gpio@660 {
- compatible = "ralink,mt7620a-gpio", "ralink,rt2880-gpio";
- reg = <0x660 0x24>;
- interrupt-parent = <&intc>;
- interrupts = <6>;
- gpio-controller;
- #gpio-cells = <2>;
- ralink,gpio-base = <40>;
- ralink,num-gpios = <32>;
- ralink,register-map = [ 00 04 08 0c
- 10 14 18 1c
- 20 24 ];
- status = "disabled";
- };
- gpio3: gpio[url=home.php?mod=space&uid=827553]@688[/url] {
- compatible = "ralink,mt7620a-gpio", "ralink,rt2880-gpio";
- reg = <0x688 0x24>;
- interrupt-parent = <&intc>;
复制代码 仔细看,看出不同了吗?除了GPIO0这组,其它gpio1,gpio2,gpio3三组GPIO都被停用了!
我们要把这行代码注释掉
- /* status = "disabled"; */
复制代码
C语言的注释就是用 /* aaaaaaaaaaa */把aaaaaaaaaa围起来.
因为我的板子上的LED用的GPIO口是24和26,我注释掉GPIO1就够了,然后保存,编译,刷机,ssh进去。
进去/sys/class/gpio目录。
- root@OpenWrt:~# cd /sys/class/gpio
复制代码 我们把相应的GPIO口从内核中释放到用户空间,比如我这里要用gpio24,用下面的命令
- root@OpenWrt:/sys/class/gpio# echo 24 > export
复制代码 然后当前目录就会多出来一个gpio24文件夹,我们要操作里面的两个文件direction和value
direction控制的是GPIO的方向是输出还是输入,value是开关
- echo out > gpio24/direction
- echo 1 > gpio24/value
复制代码 点亮LED都是输出,然后开关的话试下0和1,因为有的是0开有的是0关。
到这里我的LED就已经点亮了:lol:
可以在外围加个三极管放大电流接继电器控制开关:lol:智能家居!
板上引出的GPIO口肯定不止一个,TTL刷机那里就有两个,要找的话可以进breed运行btntst命令然后一个一个试,用个几百欧的电阻把电流限制到几ma,把引脚拉到正或者负,如果是GPIO口就会显示是哪个GPIO口,这个也是坛友昨天告诉我的:lol:
完了,欢迎讨论。
|
打赏
-
查看全部打赏
|