openwrt开发 am335x 新手开始

openwrt开发 am335x 新手开始

从linux驱动转openwrt,最开始有很多不理解的地方,在网上找资料发现很多都没有讲到核心点上,导致自己走了很多弯路,希望借这篇文章让大家对openwrt有一定的了解,因为自己也还不是很精通,希望不足的地方大家一起讨论:
文章乃原创,转载表明出处

接下来将从以下几个方面介绍

  • openwrt的理解
  • openwrt的开发
  • openwrt的特点
  • openwrt的wifi
  • openwrt的4G
  • openwrt的4G转网口
  • 总结
  • 附录

openwrt的理解

openwrt可以说成是linux的一个发行版本,类似于ubuntu,帮你做好了很多事情,使你的开发简单,简化了linux的一些功能,加强了linux网络部分的功能,因此大家都拿他来做路由开发

通俗点说,openwrt本质上就是一个修改过的linux,要跑起来同样需要uboot,kernel,rootf等,只不过是为了路由而做了很多优化

其实openwrt是好,但是也存在一些缺点,接下来谈一下我认为的openwrt的优点和缺点:

openwrt 的优点和缺点:

openwrt的优点:
openwrt的官方做了大量的工作,针对市面上常见的芯片,路由,开发板都提供支持,直接下载编译后,就可以基本达到路由器的全部功能
简化了文件系统和内核,只保留网络部分,可以适配基本芯片
配备luci界面,让我们在web端操作,方便开发人员开发市场路由
openwrt的缺点:
正如同上面所说,openwrt做了大量的工作,但是总有没有适配的,这样对于开发人员来说,自己去适配,有点难度
openwrt的适配是根据市面上的开发板,路由器,如果自己设计硬件,那适配起来就很困难
编译的过程中需要从网络上下载大量的文件,还是境外网站,导致编译时间很长,并且容易中断
对于需要自己添加的功能很不友好,如果这款芯片没有自带wifi(或者这款开发板没有自带wifi),需要usb_wifi,那将很难支持,因为这里面是openwrt官方做好的一套系统,要将自己的东西移植进去,因为涉及到web界面的控制,因此有点难度

openwrt整理是怎样运作的呢?

首先openwrt有着完整一套的linux内核,但是,这个内核是一个纯净的内核,openwrt的一些功能基本是通过编译成模块的形式挂载在这个内核上的,当我们make menuconfig的时候,选择的东西都需要从openwrt指定的地方下载,然后编译成模块,在系统运行时挂载在内核上,从而实现各种功能,当然,openwrt最好的地方在于提供luci,将web与系统结合,通过web进行各种命令,因此,需要我们去了解web与系统之间的沟通,这个我到现在也还不是很明白,大家交流交流

同时,我发现介绍openwrt的书籍很少,一般网上的也就是直接用,没有很好的介绍整个openwrt的运行,我再这里介绍一下自己的理解

openwrt的开发

我是尝试在am335x上面跑openwrt,板子是模仿bbblack做的

首先,进入openwrt的官方网站,上面提供了一些发行版本,因为以前的版本对bbblack的支持很少,因此选用最新的trunk版本,git clone git://github.com/openwrt/openwrt.git

当然在开发前,建议看一下openwrt的开发文档,我也是这样摸索过来的,刚开始在网上看别人的,发现不全,不懂,别人都是一上来就搞着搞那的,没有介绍,官方文档都有相关介绍https://wiki.openwrt.org/doc/start

下载完成后就是相关的配置了,这个在网上有很多,官方文档也有介绍,这里就不多说了

前面说过,一个系统分为内核和文件系统,我们都知道linux下,内核中有很多驱动,我们实现摸个功能将其编译进内核就可以了,在openwrt中如何配置内核呢?如何实现web呢?如何编译呢?等等问题
》配置openwrt系统
make menuconfig
openwrt开发 am335x 新手开始_第1张图片
前面两项选择芯片类型和开发板形式,因为我们的板子是模仿bbblack的,因此这里选择bbblack
关于开发者模式,一般我们不动,后面等会附录部分我稍介绍点
base system————里面选择文件系统的命令,基本不动,关于lsusb、wireless-tools等命令时,可以选上
kernel modules——–主要是一些驱动 注意,这些驱动有一些是跟内核关联,相当于选择内核中的驱动,有些是选择从网上下载源码进行编译的,所以openwrt的难就难在这里,等会会重点介绍
luci———————–主要是配置web界面,网上有很多介绍
network—————–主要是网络相关配置
utilities——————这里面放一些额外的工具
配置内核
make kernel_menuconfig
openwrt开发 am335x 新手开始_第2张图片
熟悉linux的同学是不是对这个界面很熟悉?对了,这里面就是内核的相关配置,但我这里有一个忠告,不要随便修改里面的内容

好了,基本命令介绍到这里,接下来谈谈上面说到的问题:
kernel modules选项:
(1)通过进入package/kernel/mac80211文件夹下,打开Makefile查看一下,你会发现这里指定了网址,是的,放你选择上kernel modules里面的相关wireless driver的时候,他进入这里面,然后指定了网址,从该网址下载好源码,然后编译成模块,最终是挂载在内核上,比如这里选择kmod-rtl8192cu,————–但是,当我们make kernel_menuconfig的时候,熟悉linux的同学都知道,内核里面也提供了rtl8192的相关驱动的,但是这里就是不用内核里面提供的,要使用下载下来的,这个是我不理解的地方,这对于熟悉linux驱动的同学不友好,因为不明白为什么,明显驱动里面的是最好的!
(2)当然,并不是所有的驱动,openwrt都去下载,有些它是直接关联到linux内核里面的驱动,将其编译成模块,然后挂载,openwrt开发 am335x 新手开始_第3张图片
看这里,进入package/kernel/linux/modules,打开usb.mk你会发现,关于USB里面的选项基本上是编译的linux内核源码里面的东西,然后将.ko文件进行关联
(3)所以,最好不要选择make kernel_menuconfig里面的内容,因为一旦冲突,在编译的时候将会出问题,中断编译,但是如果保证不冲突,对于linux驱动的开发人员将很方便,将以前的驱动进行移植,我尝试过,是可以的

一般就是选择芯片,对应开发板等相关配置后,就可以编译了,然后基本与linux的开发相同,在bin文件目录下会生成相关的文件系统和内核等,然后就看能不能跑起来

openwrt的特点

**说实话openwrt很方便,里面的特色就是opkg,可以实现很多工具的直接安装
**同时luci的web界面,可以方便我们的开发,例如我们要开发一款路由器,我们可以直接修改web界面即可,而不需要自己完全从零开始
**openwrt里面的驱动的特点在上面已经介绍过了

openwrt的wifi

想当年尝试实现usb_wifi下了多少工夫,哎。真心是不知道怎么去实现了,可能自己的功力还不够,感觉还是要好好努力,注重实践的同时,好好的补充自己的知识,下面介绍自己对openwrt——wifi的理解,到现在还没搞明白,希望明白的交流一下
openwrt中的wifi驱动都是从网上下载,然后编译成模块,挂载在内核的
自己以前在linux系统上移植过一款rtl8821usb_wifi的usb无线,在linux系统下,可以通过命令行完成连接wifi和释放热点等工作,但是将其移植到openwrt上面就不那么完美了,最主要的问题不能再web界面进行wifi等相关操作
其实本质上涉及以下几个问题:
(1)openwrt上面的wifi命令是通过nl80211这个api来进行操作的
**对于linux系统,一般采用Wext这个api就可以了,但openwrt是通过nl80211来进行的,因此就有相关问题,在编译驱动的时候需要将cfg80211等关联起来才可以
(2)openwrt的相关web界面如何控制wifi的我到现在还没弄明白,因此有些在命令行下已经可以通过wifi命令自动化生成wireless文件,但还是不行,因为不懂web与openwrt之间是如何沟通的
(3)make menuconfig选择wifi驱动的时候,会自动选择mac80211和cfg80211等,这些都是从网络上下载的,所以如何将自己的usb——wifi驱动融合进openwrt也是一个问题

总结:目前我的wifi是可以通过wifi config命令自动生成wireless配置文件,但不能再web端进行相关控制,我也不知道为什么,希望大神交流一下

openwrt的4G

openwrt的4G在网上有很多教程,我这里说一下要注意的点:
(1)驱动:关于4G驱动,linux内核并不是所有的4G模块都支持,因此需要根据4G模块的数据手册修改一下linux内核,所在目录为build_dir这个目录,我的是在build_dir/target-arm_cortex-a8+vfpv3_musl_eabi/linux-omap/linux-4.9.77这个目录
(2)最好编译命令lsusb命令进入文件系统,方便查看usb
(3)编译的时候注意命令的冲突,不然编译不能通过
我参考的为:http://blog.csdn.net/aa120515692/article/details/46775515,注意,这里面提到的需要的工具里面,关于chat,,注意,当我们编译了comgt之后,chat就自动编译了,因此千万不要再选择一个chat

openwrt的4G转网口

我想实现4G拨号成功后,能够将4G的网络转网口输出,实现4G路由器的功能
以前在linux系统上用命令行实现过,这里需要web界面进行相关配置实现该功能,由于对路由器不是很懂,因此配置了很长时间,大致总结一下:
(1)通过防火墙去实现这个功能,提示一个点,在防火墙的配置界面,如果是4G转网口,应该是将网口转发到4G,进入web界面后,直接进入防火墙,应该会有默认的相关配置,模仿着配置就可以了
(2)实现不行,还是想用以前的命令行的方法的话,可以在/etc目录下好像有一个关于Firewall的文件,将相关命令输入,重启就可以了

总结

搞openwrt也有一段时间了,在学校也是自己摸索,没有人商量,基本都是网络上看一些资料,感觉还有很多地方都不是很明白,希望大家懂得的交流交流,我的邮箱:

今年一年又过去了,这个学期做了一些东西都还没来得及整理,借这个机会,将这些都记录在网络上,方便自己以后查阅,也方便大家一起交流
因为自己做的东西比较广泛,因此有点乱,感兴趣的同学可以看一下,接下来将介绍一下:
(1)自己对墨水屏的理解–基于stm32
(2)自己对二维码识别的理解–基于stm32
(3)旋钮驱动

附录

关于openwrt我做过很多尝试,相关自己的经验总结一下:
(1)交叉编译工具
参考:http://www.xuebuyuan.com/1041761.html?mobile=1
(2)想要使用自己的内核
参考:http://blog.csdn.net/wind0419/article/details/78036522
(3)关于uboot bbblack相关
参考:http://blog.csdn.net/sunnyleevip/article/details/45938299
大家可以在评论区交流交流

你可能感兴趣的:(openwrt)