• WAP手机版 加入收藏  设为首页
路由器

openwrt编译的时候如何添加自定义新机型

时间:2016-4-25 11:27:51   作者:hell、梦魇   来源:恩山无线论坛   阅读:921   评论:0
有的时候买到一个MIPS系列开发板,上面带有Led、以太网以及wifi功能,并且支持Openwrt系统,但是网上没有对应的固件,这时候就需要自己修改源代码添加Openwrt系统对开发板的兼容。下面我用身边的一块MT7620A开发板做个例子。
1、   首先需要找到板子需要的不死Uboot,这里推荐用H大的Breed,Breed有许多对MT7620A系统的版本,我们需要用编程器写入Flash一个个的测试,直到测试到插入网线电脑能识别。
2、   网口能识别后,现在就需要找一个差不多能用(网口可用,但是led不正常)的机型了,这也需要一个个测试MT7620A系列的固件,这里有一个技巧,根据板子Flash类型(Nand flash、SPI flash)的不同,以及Breed系列的不同,可以快速挑选出固件,这里我找到一个机型,华硕(asus)RT-N14。
3、   找到合适的机型后,我们来确定板子上Led的GPIO号,这里我们可以用Breed的一个功能测试。

a)  重启板子,在启动界面不停输入回车,直到出现breed控制台

openwrt编译的时候如何添加自定义新机型

b)  然后输入 btntst ,进入GPIO测试界面。

 c)  拿一根镊子或者其他导电物品,轻轻触摸led两侧的引脚,这时候就会出现led的gpio组号、组内编号以及GPIO号(不懂得见下面)。

      i.     在OpenWrt/Linux里面,对GPIO的操作都是通过寄存器操作的,详细可以看每个板子的DTSI文件,在DTSI文件里描述了板子寄存器的地址。
    ii.     以MT7620A为例,GPIO一共有72个,一共分了四组,组号为0~3。0组拥有24个GPIO,GPIO号为0~23;1组拥有16个GPIO,GPIO号为24~39;2组拥有32个GPIO,GPIO号为40~71,;3组仅拥有一个GPIO—GPIO72。因此,GPIO号=GPIO组号基址+GPIO组内编号。

d)  触碰led引脚后记下GPIO的组号以及组内编号。

 openwrt编译的时候如何添加自定义新机型

4、   前面准备工作完成后下面就开始更改源代码了。

OpenWrt对设备的定义是在./target/linux下的,Linux目录下面对应的各个平台,

我这个板子是MT7620A的,那么久对应的是Rampis, 

 输入grep –rn “rt-n14” ./    注意这里请复制下面一段文字修改引号中间机型去搜索

 grep -rn "hello,world!" ./

查看包含rt-n14的项,设备声明项的文件如下

openwrt编译的时候如何添加自定义新机型

openwrt编译的时候如何添加自定义新机型

5、   我将这个开发板命名为huang-7620a(下面修改的文件都是用这个名字)下面对文件进行更改:
      i.     Diag.sh文件不用更改,这个是给led标志名称的。

    ii.     Board.d 下的02_network为网络配置脚本,我们可以看到,这个脚本基于shell语言脚本,

用case语句匹配型号设定led,包括下面的led脚本也是。我们在ramips_setup_interfaces函数里面的in语句后面加入

   huang-7620a )
      ucidef_set_interface_lan "eth0"
      ;;
注意:eth0是你测试rt-n14固件得出来的值,大概意思就是让系统将eth0配置为lan。
   iii.     01_leds文件为led的配置脚本,在in语句后面加入
huang-7620a)
      ucidef_set_led_default"power" "power" "huang:blue:power" "1"
      ucidef_set_led_interafce"lan" "huang:blue:lan"
      ucidef_set_led_netdev"eth" "ETH" "huang:blue:wan" "eth0"
      set_wifi_led"huang:blue:air"
      set_usb_led"huang:blue:usb"
   ;;
注意:这里我写的有点问题,有的项开机不配置。_(:з)∠)_
    iv.     Platform.sh文件是 机型的固件头,在刷机的时候,系统就是根据固件头判断固件是否适合该机型,我们只需要找到rt-n14u,复制这一行放到下一行,将rt-n14u改成huang-7620a。
      v.     Rampis.sh文件,这个文件非常重要,系统识别当前机型就是通过这个文件,大概原理有兴趣的可以仔细看看里面代码。固件启动后会在/tmp/sysinfo目录生成一个board_name文件,该文件会被led network配置脚本引用,通过case语句匹配然后配置网口以及led。我们找到rt-n14u,将这几行复制放到下一行,将rt-n14u更改为huang-7620a。如下:
  *"huang-7620a")
      name="huang-7620a"
      ;;
    vi.     .DTS文件,这个文件是device tree source简拼,是Linux里面对设备硬件信息描述的一个文件,里面涉及了系统flash类型(nand flash、spi flash)、系统分区、网口寄存器、led gpio声明等。具体的可以到网上查相关的资料。我们这里要改的不多,只需要复制一份RT-N14U.dts,更名为huang-7620a.dts。然后打开文件,进行编辑。
1.  找到
compatible= "asus,rt-n14u", "ralink,mt7620n-soc";
   model = "Asus RT-N14U";
改成
   compatible ="huang-7620a", "ralink,mt7620a-soc";
   model = "huang-7620a";
2.  找到gpio-leds这部分,这里面是对led gpio 的声明
3.  Label是led的名称,对应01_leds里面的led名称,自己可以随便更改,但是这两个文件里面的leds名称必须一致。
4.  Gpios就是对应的gpio号了,这里填上前面用breed测试出的组号以及组内编号,不能有错。
   gpio-leds{
      compatible= "gpio-leds";
      wan{
         label= "huang:blue:wan";
         gpios= <&gpio2 12 1>;
      };
      lan{
         label= "huang:blue:lan";
         gpios= <&gpio2 15 1>;
      };
      usb{
         label= "huang:blue:usb";
         gpios= <&gpio2 8 1>;
      };
      power{
         label= "huang:blue:power";
         gpios= <&gpio2 14 1>;
      };
      air{
         label= "huang:blue:air";
         gpios= <&gpio2 10 1>;
      };
   };
   vii.     Mt7620a.mk,这个文件是对机型的一些描述,包括固件空间的最大值。
1.  找到Image/Build/Profile/RT-N14U=$(callBuildFirmware/Default8M/$(1),$(1),rt-n14u,RT-N14U),这一行,在下面添加Image/Build/Profile/huang-7620a=$(call BuildFirmware/Default16M/$(1),$(1),huang-7620a,huang-7620a)这一行,Default后面是你的固件空间最大值,可以自行修改。
2.  找到$(call Image/Build/Profile/RT-N14U,$(1)),在下面一行添加$(call Image/Build/Profile/huang-7620a,$(1))
  viii.     最后的,我们需要添加机型的profiles信息,在mt7620\profiles下面(OpenWrt的每个版本可能不一样)新建一个huang-7620a.mk文件,这个文件是为了在menuconfig里面显示的,里面写入
define Profile/huang-7620a
   NAME:=HUANG-EvilBox-7620A
   PACKAGES:=\
      kmod-usb-corekmod-usb2 kmod-usb-ohci \
      kmod-ledtrig-usbdev
endef
defineProfile/Default/Description
   Huangevilbox 7620a
endef
$(eval $(callProfile,huang-7620a))
6、   更改完毕后,删除编译目录下的tmp,然后输入make menuconfig,Target System选择Ralink RT288x/RT3xxx,Subtarget选择(MT7620 based boards),在Target Profile里面应该就能看见HUANG-EvilBox-7620A,然后简单的选择下,编译,不出错的话就能在bin里面看到固件了。
注意: led gpio配置需要更改/build_dir/target-mipsel_24kec+dsp_musl-1.1.14/linux-ramips_mt7620/linux-4.4.6/arch/mips/ralink下的mt7620.c文件,更改static struct rt2880_pmx_funcwled_grp[] = { FUNC("wled", 0, 72, 1) };这一行,72改成led gpio最小的号码,1改成连续占用的gpio个数,比如,我led用了4849 55 51,这四个号,那么72就应该改成48,1改成55-48=7

原文地址:http://www.right.com.cn/forum/thread-185335-1-7.html

补充一个我自己15.05的openwrt适配触云爱路由i1(cy-i1)的视频,初学,见谅!
链接:http://pan.baidu.com/s/1c2bQ3JU 密码:tzzl  视频初学比较啰嗦且不效率,估计丢优酷也不会通过,故直接丢百度云盘咯!
编译出来的固件下载

      版权声明,所有转载都有注明出处,本站不负责承担任何法律责往。若有侵权,请联系我。我会及时删除。

专业从事于个人电脑维护,系统安装,软 、硬件维修,电脑配件,零售业务,网站建设,路由器安装设置 服务器维护,电脑、网络维护,智能手机刷机,安装WIFI 调试!

        咨询电话:13762514403  点击这里给我发消 息
        手机用户选择任意下面一种方法关注微文号
       点击我关注微信、扫描二维码、添加 订阅号
cz612459”     分享资讯、享受生活          


      

相关评论
免责申明:本站部分资料来源互联网,如果侵犯了您的版权,请作者速来电或QQ与本站联系,我们将第一时间给予以改正或删除。
Copyright© 2014-2016 哎丫丫 湘ICP备14010293号 湘公网安备43100202000036号
点击这里给我发消息