编译自己的程序到openwrt固件中去

我想你大概已经熟悉了在openwrt下方便的安装程序了,即opkg install这个命令已经熟悉了。很多时候我们只会找网上的ipk的包下载下来安装,却不知到这个包到底有什么神秘的地方,如何才能将我们自己写的一个程序编译成一个ipkg的包呢,或者将linux平台下的其他软件编译成一个ipkg的包呢?再或者,如何将我们的程序编译进固件的镜像文件中去呢,这篇日志将会给大家一个解答。

首先说说ipk包是怎么来的吧,既然作为openwrt的标准的包,就如我们平常在android上的包程序一样,只能被相应的系统识别的,即只能是应用于openwrt了。那么怎么才能做出这个包来呢,意识可以利用sdk来进行编译,而是当你搭建好了openwrt后直接使用make package/smustar V=99 就可以编译出来我们的包了,还有就是menuconfig中选择M则只会编译出ipk包来但是不会编译进固件中去。

这些个包有什么用呢,为什么不直接像linux中那样用makefile直接解决呢,因为这个路由系统和其它的有点不同么,比如要搞个config文件,ipk包做的其实就是这个事情。

下面我们来看看这么写一个包,并编译出来,以我们的smustar为例。我们先在编译环境文件夹下进入package这个文件夹,翻翻看看就知道,这里面就是其它软件的未编译的包的源文件件了,那么一个源文件的包需要什么呢?

  1. 建立一个文件加smustar,这个当然必要,就如同建立这个包了。
  2. 下面建立一个src的文件夹,将我们的smustar的c文件都拷贝过去,包括makefile。如果你是想移植一下其它的软件呢,你也可以下载其它软件的源文件防盗这个里面去。
  3. 建立一个files文件夹,里面装有smustar.conf–用来保存密码的 smustar.init–开机启动的加载脚本。
  4. 建立makefile文件,这个很重要,menuconfig靠这个makefile来识别并显示出来,而且靠它来编译出我们要的包来。

这是msutar的makefile(不是src里面的,是放在smustar文件夹下的,用来编译ipk的)

include $(TOPDIR)/rules.mk
PKG_NAME:=smustar
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk

——
define Package/smustar
SECTION:=utils
CATEGORY:=Utilities
TITLE:=smustar — prints a snarky message
endef
——
define Package/smustar/description
If you can’t figure out what this program does, you’re probably
brain-dead and need immediate medical attention.
endef
————
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
———–
define Package/smustar/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/smustar.init $(1)/etc/init.d/smustar
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/smustar.conf $(1)/etc/config/smustar
endef
我把它分割成了五段:

第一段:以定义一下这个包的一些常规的东西,比如版本啊,名字啊,其实还有下载地址和md5校验值我没写的,你可以到官网看看,一大堆,如果有网址的话它就可以从网上下载源码了,保存在dl文件夹中,我们这里是没有的,自己写的程序哈,没上传到网上就先不写了。

第二段:这个就是menuconfig显示出这个包来必要的参数了,按照如上定义,你输入 make menuconfig 然后到Utilities中就可以看到我们的smustar包了,然后你可以选择编译、编译到固件中去、或者不编译了。

第三段:一个描述而已,无它。

第四段:这是个准备工作,系统会在编译前先执行prepar的,我做了什么,就是把src文件夹即我们的源码拷贝到编译文件夹下去。这里你也可以定义编译的cc编辑器或者cflag什么的,或者你想做其它的也行。

第五段:这个就是正题了,它做了什么:将编译好的smutar程序拷贝到系统/usr/sbin文件夹下面,这样子程序命令直接打smustar就行了。将smustar.init拷贝到/etc/init.d/smustar 加载开机启动罗。smustar.conf 拷贝到/etc/config/smustar 这个是程序保存帐号密码的配置文件的。其实这里你可以尽力的写些你需要的,如拷贝个so的库到lib文件夹下去等等,这里你就看出来了为什么要封装ipk包了,因为有特殊需要是吧。好了,至此包的源码完成,你可以到menuconfig中看到smustar了,然后果断按y选择编译到固件中去,之后编译…….

falsh后就发现程序已经在/usr/lib下了。当然,在你电脑上的bin/bcm63xx/package下面也有编译好的ipk文件,你可以上传到路由器中并用opkg命令安装。至此次工作完成,不想搞交叉编译环境的童鞋可以让人发个sdk给你,这样子可以编译出ipk的包来,当然编译不了bin镜像了。sdk怎么弄到,人家有编译环境的在menuconfig中可以选择编译sdk工具的,编译好了出现在bin文件夹下面。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenWrt是一个基于Linux的嵌入式操作系统,可以运行在各种路由器和嵌入式设备上。OpenWrt固件编译是指将OpenWrt源代码编译成可在特定硬件平台上运行的固件的过程。 首先,我们需要准备编译环境。在Ubuntu或其他基于Debian的发行版上,可以通过以下命令安装所需的软件包: ``` sudo apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc wget ``` 接下来,我们需要获取OpenWrt的源代码。可以使用以下命令来获取最新的OpenWrt源代码: ``` git clone https://git.openwrt.org/openwrt/openwrt.git ``` 获取源代码后,进入源代码目录: ``` cd openwrt ``` 在配置编译选项之前,可以运行以下命令更新源代码: ``` ./scripts/feeds update -a ./scripts/feeds install -a ``` 接下来,我们需要选择目标平台和配置编译选项。可以通过以下命令启动配置界面: ``` make menuconfig ``` 在配置界面,可以选择目标平台、应用软件包、内核和其他编译选项。选择完成后,保存配置并退出。 最后,开始编译固件。可以运行以下命令来启动编译: ``` make -j4 ``` 编译过程可能需要一些时间,具体时间取决于计算机性能和配置选项。编译完成后,在`bin/targets`目录下可以找到编译生成的固件文件。 总之,OpenWrt固件编译的过程包括准备编译环境、获取源代码、配置编译选项和开始编译编译完成后,可以得到适用于特定硬件平台的OpenWrt固件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值