|
废话少说,第一步工作在编译前修改源码配置,打开gpio控制权,以便在lede系统中测试连接led灯的gpio号
1:打开source/target/linux/ramips/dts/psg1218.dts(这里的psg1218.dts是我编译时选择的机型,你们根据自己的机型选择相应的dts文件),接下来我们要修改它,为了避免不必要的麻烦,我们先复制它,并保存到一个可以记住的地方,以便在完成测试,真正使用的时候把他们复制过来。
2:修改dts文件,首先删除以下的语句,你的可能不一样,但语法是一样的,找到他们,删除他们
^^^以上图片中语句的意思是注册3个led灯,他们的名字分别是lan,wan,d. lan口的指示led灯连接到第2组的第1个, wan口的指示led灯连接到第2组的第0个, 自己定义了一个d,它连接到第0组的第9个灯,(mt7620在lede系统中把可以使用的gpio分成了组,注册使用时需要填写相应的组和他们在组中的位置,组和位置都是从0开始的,具体组,位置和gpio的对应关系我会在下文中解释)
3:完成上面的删除工作之后,找到以下语句
^^^以上图片中的语句意思是开放gpio0这一个组,由于每个路由器所连接led灯的gpio组不一样,所以你的数字可能会不一样,修改成下面的样子
^^^以上这些代码的意思是依次打开gpio0,gpio1gpio2,gpio3,这4个组的gpio的控制权限,以便我们在系统中控制测试他们
4:保存修改好的dts文件,然后执行编译(在黑框框中执行make V=99),将编译好的固件刷到路由器中,接下来就要进行测试工作了,
5:用putty登录路由器(不会连接的朋友自己查下)
输入代码echo 44 > /sys/class/gpio/export按下回车
^^^以上代码的意思是申请使用第44号引脚,也就是gpio44,申请成功会接着让你输入代码,如果申请失败,会输出错误提示信息。(为啥会申请失败呢?因为有可能我们申请的引脚被电路设计师用来连接其他硬件了,这个引脚正在被使用,它正在传输数据,所以无法被我们所控制,另外一个引脚无法被申请两次,假设我们再次申请使用gpio44引脚就会报错,因为它已经被申请过了)
出现上图对话框后,我们接着输入echo out > /sys/class/gpio/gpio44/direction按下回车
^^^这条代码的意思是把gpio44号引脚设定为输出(此时观察下路由器led灯,有些设备由于硬件原因此时就已经亮了(如果有一个led正好连接这44号引脚的话))
出现上图对话框后,我们接着输入echo 0 > /sys/class/gpio/gpio44/value按下回车
^^^这条命令的意思是把gpio44这个引脚的输出设置成低电平,0=低电平(观察路由器led灯有没有亮起来,如果没有亮请看下面)
如果仍然没有亮起led灯,我们接着输入echo 1 > /sys/class/gpio/gpio44/value按下回车
^^^以上这条命令的意思是把gpio44号引脚设置成高电平,1=高电平(此时观察下led灯,如果亮起一个,记录下路由器上此灯对应的名字(也就是灯旁边印上的名字),比如wan.lan.sys,wifi等)(假设如果此时仍然没有任何灯亮起来,那说明gpio44号引脚没有连接任何灯,继续测试下个引脚)
PS:哪些引脚有可能连着led灯,我们应该测试哪些呢?接下来就说明这个问题,看下图,MT7620开放的gpio有这么多
^^^上图中的意思是mt7620n给我们提供了0组1组2组3组,总共4组gpio(注意组是从0开始的)
-------------------------------------------------------------------------------------------------------------------------------------------
>>>第0组包含了24个引脚,0-23共24个,如果要在dts中使用这些引脚,他们是这样的
0 , 0 表示第0组第0个引脚,也就是gpio0
0 , 1 表示第0组第1个引脚,也就是gpio1
…………
…………
0 , 23 表示第0组第23个引脚,也就是gpio24
-------------------------------------------------------------------------------------------------------------------------------------------
>>>第1组包含了16个引脚,24-39共16个,如果要在dts中使用这些引脚,他们是这样的
1 , 0 表示第1组第0个引脚,也就是gpio24
1 , 1 表示第1组第1个引脚,也就是gpio25
…………
…………
1 , 38 表示第1组第16个引脚,也就是gpio39
-------------------------------------------------------------------------------------------------------------------------------------------
>>>第2组包含了32个引脚,40-71共32个,如果要在dts中使用这些引脚,他们是这样的
2 , 0 表示第2组第0个引脚,也就是gpio40
2 , 1 表示第2组第1个引脚,也就是gpio41
…………
…………
2 , 31 表示第2组第32个引脚,也就是gpio71
-------------------------------------------------------------------------------------------------------------------------------------------
>>>第3组包含了1个引脚,gpio72,这个引脚通常是wifi指示灯,他在dts中是这样表示的
3 , 0 表示第3组中的第0个引脚,也就是gpio72
-------------------------------------------------------------------------------------------------------------------------------------------
PS:知道了哪些引脚可以测试了之后,我们就可以把所有的4组gpio引脚挨个测试,直到找到连接led灯的gpio引脚为止
PS:现在我们假设已经找到了连接led灯的gpio引脚,现在把他编译到lede系统中去
首先我们定位到dts目录,也就是上次修改dts的地方source/target/linux/ramips/dts/找到psg1218.dts这个文件(这个文件需要根据你的机型),删除它(我示列是psg1218.dts),然后找到我们之前备份的psg1218.dts复制原来的psg1218.dts到source/target/linux/ramips/dts/这个目录
然后打开它,找到默认注册的lan,wan,wifi等,如下图所示
把尖括号里的数字替换成你测试出来的gpio值,上图中lan的注册 gpios =< &gpio2 1 1>; 这行代码表示lan口的led灯连接着第2组gpio的第1个引脚,也就是gpio41号引脚,至于尖括号中最后那个1,应该是默认让次脚输出高电平吧(此处凭猜测,具体用处不明,可以是1,也可以是0)
把测试的gpio组和号写到注册项里(注册项是开头的lan,wan,wifi这些),确保准确无误后,再次执行编译,把得到的固件刷入路由器,就可以完美点亮led啦
error:啥?还没有点亮?这样做,登录路由器,打开左侧栏的系统,点击LED配置,配置一下(关于如何配置的问题自己多点几下就明白了。我说不明白)
如果此时还没有亮起来,请在dts文件中检查下图中所示的gpio组开关打开没有
PS:至此,led的适配工作就完成了。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
外篇:怎样自定义一个led灯,需要打开如下文件
source/target/linux/ramips/base-files/board.d/01-leds 对没错,就是01-leds这个文件,先在这里申请好注册项,然后在上面讲过的dts文件里注册
看下图就明白了
^^^^上图是01-leds文件中我的led项目申请情况,d,a,b,c就是我自己定义的led灯项目,下面看下我的dts里对应的注册情况(此处是psg1218.dts)
可以看出这两个文件是一一对应的关系。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|