皮皮网

【edk源码】【echart 源码】【dmi 源码】openwrt源码添加

来源:网络项目源码大全 时间:2024-12-23 18:57:47

1.openwrt编译流程
2.OpenWRT开发之创建软件包
3.给openwrt18.06增加石像鬼QOS支持
4.如何在OpenWRT环境下做开发

openwrt源码添加

openwrt编译流程

       编译OpenWRT源码至Ubuntu下,码添需先进入OpenWRT根目录。码添通常,码添简单操作为执行命令make V=。码添若系统为多核处理器,码添为加速编译过程,码添edk源码可添加-j选项,码添如make –j3 V=。码添在编译过程中,码添系统将自动下载所需软件包,码添请确保网络畅通。码添若在编译时遇到下载失败,码添可先执行make download指令,码添提前下载所需包,码添以避免后续错误。码添echart 源码

       初次编译耗时较长,且需下载大量源码包,建议使用较好的***,以加速过程。完成编译后,会在源码目录中生成一个名为bin的文件夹,其中包含两个文件:openwrt-ramips-rtx-wrn-squashfs-factory.bin 和 openwrt-ramips-rtx-wrn-squashfs-sysupgrade.bin。dmi 源码根据路由器的原始固件或已安装的OpenWRT版本,选择相应的固件进行刷写。

       在编译过程中,掌握一些技巧有助于提升效率。例如,执行make clean可以清理基本编译文件,make dirclean则会深度清理文件,wifimanager 源码相当于执行make clean后再清除交叉编译工具链目录。使用make distclean则会清除所有相关东西,包括下载的软件包、配置文件及feed内容等。在个人开发中,常遇menuconfig无法更新问题,可通过删除tmp缓存目录解决。heartbeat源码预先下载软件包,再执行编译的make download V=方法同样有效。最后,删除.config文件以清空所有配置。

OpenWRT开发之创建软件包

       OpenWRT二次开发时总免不了开发自己的软件包。本文介绍如何在OpenWRT中创建一个新的软件包。

        首先创建软件包所在的目录,在openwrt根目录中执行:

        这里的mypackages目录和helloworld目录都是新建的,helloworld就是我们本次新建的软件包的包名。我们后续可以将自己创建的包都放在mypackages目录下。

        helloworld包的目录结构如下:

        即软件包helloworld目录下的Makefile文件。例子以及注释如下:

        上面的例子中没有定义 define Build/Compile ,表示使用默认的Compile命令。默认的Compile行为就是在$(PKG_BUILD_DIR)目录下执行make命令。

        helloworld.c内容如下:

        与helloworld.c同目录的Makefile内容如下:

        说明:这里的$(CC)、$(CFLAGS)、$(LDFLAGS)都是由OpenWRT的build系统赋值的,CC就是目标平台对应的交叉编译工具链里的gcc。

        在OpenWRT根目录下运行make menuconfig,可以看到多出来一个”Examples —>”菜单,按回车进去后可以看到我们新建的”helloworld” 包。 (从这里也可以看出,在执行make menuconfig时,OpenWRT会自动扫描package目录以及其子目录下所有的包。)

        选中这个”helloworld”包。然后再OpenWRT根目录下执行:

        此命令即为OpenWRT单package编译命令。

        通过log,可以看到我们的包编译成功。编译目录为 build_dir/target-XXXX/helloworld-1.0

        如果要再次编译,可以执行:

        本文源码见: /jian-soft/openwrt-package-example

       å‚考文章:

给openwrt.增加石像鬼QOS支持

       石像鬼(Gargoyle)固件以其出色的QoS性能,备受推崇。在迅雷满速下载的同时,网页可以实现秒开,游戏(如LOL)流畅不卡顿。这主要得益于石像鬼组件提供的强大功能。不单是QoS,单IP精确限速等特性,也离不开石像鬼的支持。例如,QOSV4和Emong's QoS等,皆基于石像鬼QoS实现。

       对于想要自己编译带有石像鬼QoS支持的固件的用户,以下是如何在最新版本的OpenWRT中实现移植步骤:

       首先,获取源代码。

       之后,操作如下:

       1. 添加imq补丁:复制-netfilter-mk.patch和-netfilter-mk.patch文件至/source目录。进入源码目录并执行命令:patch -p1 < -imq.patch 和 patch -p1 < -imq.patch。

       2. 替换默认的iptables,删除OpenWRT .自带的iptables,将新版本的iptables文件放入。

       3. 将gargoyle-package目录复制到/source/package目录内。

       4. 复制-imq.patch到/source/target/linux/generic/pending-4.目录。

       5. 在gargoyle-package/gargoyle/qos-gargoyle/files内替换qos_gargoyle.conf文件为qos_gargoyle。

       值得注意的是,offload和qos_gargoyle配置存在冲突,因此在实际应用中,只能选择其一。

如何在OpenWRT环境下做开发

       1、搭建开发环境

       é¦–先,我们需要一个为路由器定制的开发环境,具体可以参考我的另一篇日志:《搭建自己的OpenWrt开发环境》。这里只做一个简单的补充,在执行make menuconfig后,会出现下图:

       å…¶ä¸­ï¼Œå›¾ä¸­çº¢æ¡†éƒ¨åˆ†æ˜¯æˆ‘定制路由器的系统版本,大家可以根据不同的路由器进行不同的选择;绿框部分表示我们需要编译一个SDK开发环境(默认情况下,此项未勾选)。

       ç¼–译过程中需要通过官网下载很多相关的软件包,所以必须保证能够顺利连上外网。由于下载速度的限制,编译过程大概需要数小时。编译结束后,所有的产品都会放在编译根目录下的bin/yourtarget/. 例如:我所编译的产物都放在./bin/brcmxx/下,其中文件主要有几类:

       ï¼ˆ1).bin/.trx 文件: 这些都是在我们所选的target-system的类别之下,针对不同路由器型号、版本编译的路由器固件。这些不同路由器的型号和版本是openwrt预先设置好的,我们不需要更改。至于.bin和.trx的区别,一种说法是,第一次刷路由器的时候,需要用.bin文件,如果需要再升级,则不能再使用.bin文件,而需要用.trx文件。原因是,.bin是将路由器的相关配置信息和.trx封装在一起而生成的封包,也就是说是包含路由器版本信息的.trx。在第一次刷固件的时候,我们需要提供这样的信息,而在后续升级时,则不再需要,用.trx文件即可。

       ï¼ˆ2)packages文件夹: 里面包含了我们在配置文件里设定的所有编译好的软件包。默认情况下,会有默认选择的软件包。

       ï¼ˆ3)OpenWrt-SDK.**.tar.bz2:  这个也就是我们定制编译好的OpenWRT SDK环境。我们将用这个来进行OpenWrt软件包的开发。例如,我所编译好的SDK环境包为:/bin/brcmxx/OpenWrt-SDK-brcmxx-for-Linux-x_-gcc-4.3.3+cs_uClibc-0.9..1.tar.bz2

       å¯ä»¥ä»Žåç§°ä¸Šçœ‹å‡ºï¼Œtarget system是brcmxx,host system是Linux-x_,使用的编译工具以及库是4.3.3+cs_uClibc-0.9..1。

       ï¼ˆ4)md5sums 文件: 这个文件记录了所有我们编译好的文件的MD5值,来保证文件的完整性。因为文件的不完整,很容易将路由器变成“砖头”。

       éœ€è¦ä¸»è¦çš„是,编译完成后,一定要将编译好的bin目录进行备份(如果里面东西对你很重要的话),因为在下次编译之前,执行make clean 会将bin目录下的所有文件给清除掉!!

       2、 æ›´æ”¹åŽŸæœ‰packages

       åœ¨ç¼–译根目录下会有一个dl的目录,这个目录其实是“download”的简写,在编译前期,需要从网络下载的数据包都会放在这个目录下,这些软件包的一个特点就是,会自动安装在所编译的固件中,也就是我们make menuconfig的时候,为固件配置的一些软件包。如果我们需要更改这些源码包,只需要将更改好的源码包打包成相同的名字放在这个目录下,然后开始编译即可。编译时,会将软件包解压到build_dir目录下。

       å½“然,你也可以自己在dl里面创建自己的软件包,然后更改相关的配置文件,让openwrt可以识别这个文件包。

       ç”±äºŽæˆ‘的项目更改的内容是底层的,需要跟固件一起安装。所以,我使用的方法就是直接更改dl目录下软件包,然后重新进行固件编译。感觉类似于Linux的内核编译。反复编过十多次,没有任何问题。

       3、 æ–°å»ºè‡ªå·±çš„packages

       å¯¹äºŽè‡ªå·±æ–°å»ºçš„package,而这个package又不需要随固件一起安装,换句话说,就是可以当做一个可选软件包的话。我们可以利用我们的SDK环境来单独编译,编译后会生成一个ipk的文件包。然后利用 opkg install xxx.ipk 来安装这个软件。

       ä¸‹é¢å…·ä½“说下,如何编译一个helloword的软件包。

       ï¼ˆ1)首先,编写helloworld程序

       ç¼–写helloworld.c

       /