openwrt交叉编译自己的应用程序(openwrt应用开发)
2016-05-26 18:27
344 查看
openwrt 版本:15.05(cc)
OpenWrt上面应用程序开发有两种方式,一种是利用OpenWrt SDK,一种是利用OpenWrt源码。其实过程都差不是很多。源码会直接生成可执行程序的demo,SDK只生成ipk包,进行opkg安装。
在编译根目录下会有一个dl的目录,这个目录其实是“download”的简写,在编译前期,需要从网络下载的数据包都会放在这个目录下,这些软件包的一个特点就是,会自动安装在所编译的固件中,也就是我们make menuconfig的时候,为固件配置的一些软件包。如果我们需要更改这些源码包,只需要将更改好的源码包打包成相同的名字放在这个目录下,然后开始编译即可。编译时,会将软件包解压到build_dir目录下。
利用OpenWrt源码开发:
1、进入package目录,创建软件目录
#cd openwrt/package
#mkdir test
2、进入test目录,创建Makefile文件和代码路径
该Makefile基本内容格式都差不多,可参照以下进行修改
#
# Copyright (C) 2009-2010 Jo-Philipp Wich <xm@subsignal.org>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=test
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
PKG_USE_MIPS16:=0
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
define Package/test
SECTION:=utils
CATEGORY:=Base system
TITLE:=Userspace test
DEPENDS:=@TARGET_ar71xx
endef
define Package/test/description
This package contains an utility to manipulate NVRAM on Broadcom based devices.
It works on bcm47xx (Linux 2.6) without using the kernel api.
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Configure
endef
define Package/test/install
$(INSTALL_DIR) $(1)/$(PKG_BIN_DIR) #没有此句不会编译
endef
$(eval $(call BuildPackage,test))
注意以上凡是命令行,必须以tab开头,否则会出现Makefile:3: *** missing separator. Stop.
#mkdir src
3、进入src目录,创建相关源文件
#cd src
创建源文件,如下
#include <stdio.h>
int main(void)
{
printf("hello openwrt!!!\n");
return 0;
}
创建源文件的Makefile
SRC:=test.c
test: $(SRC)
$(cc) $(SRC) -o test
# remove object files and executable when user executes "make clean"
clean:
rm *.o
4、回到顶层目录
make menuconfig
Base system —>
test
选中我们刚刚创建的test。保存退出
make package/test/compile V=99,编译test模块,观察编译过程可以发现交叉编译工具为CC="mips-openwrt-linux-uclibc-gcc"
位置大概是staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/mips-openwrt-linux-uclibc/bin/ 编译成功后,
# ls build_dir/target-mips_34kc_uClibc-0.9.33.2/tes/
ipkg-ar71xx Makefile test test.c test.o
把test拷贝到开发板,执行就ok了。
OpenWrt上面应用程序开发有两种方式,一种是利用OpenWrt SDK,一种是利用OpenWrt源码。其实过程都差不是很多。源码会直接生成可执行程序的demo,SDK只生成ipk包,进行opkg安装。
在编译根目录下会有一个dl的目录,这个目录其实是“download”的简写,在编译前期,需要从网络下载的数据包都会放在这个目录下,这些软件包的一个特点就是,会自动安装在所编译的固件中,也就是我们make menuconfig的时候,为固件配置的一些软件包。如果我们需要更改这些源码包,只需要将更改好的源码包打包成相同的名字放在这个目录下,然后开始编译即可。编译时,会将软件包解压到build_dir目录下。
利用OpenWrt源码开发:
1、进入package目录,创建软件目录
#cd openwrt/package
#mkdir test
2、进入test目录,创建Makefile文件和代码路径
该Makefile基本内容格式都差不多,可参照以下进行修改
#
# Copyright (C) 2009-2010 Jo-Philipp Wich <xm@subsignal.org>
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=test
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
PKG_USE_MIPS16:=0
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
define Package/test
SECTION:=utils
CATEGORY:=Base system
TITLE:=Userspace test
DEPENDS:=@TARGET_ar71xx
endef
define Package/test/description
This package contains an utility to manipulate NVRAM on Broadcom based devices.
It works on bcm47xx (Linux 2.6) without using the kernel api.
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Configure
endef
define Package/test/install
$(INSTALL_DIR) $(1)/$(PKG_BIN_DIR) #没有此句不会编译
endef
$(eval $(call BuildPackage,test))
注意以上凡是命令行,必须以tab开头,否则会出现Makefile:3: *** missing separator. Stop.
#mkdir src
3、进入src目录,创建相关源文件
#cd src
创建源文件,如下
#include <stdio.h>
int main(void)
{
printf("hello openwrt!!!\n");
return 0;
}
创建源文件的Makefile
SRC:=test.c
test: $(SRC)
$(cc) $(SRC) -o test
# remove object files and executable when user executes "make clean"
clean:
rm *.o
4、回到顶层目录
make menuconfig
Base system —>
test
选中我们刚刚创建的test。保存退出
make package/test/compile V=99,编译test模块,观察编译过程可以发现交叉编译工具为CC="mips-openwrt-linux-uclibc-gcc"
位置大概是staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/mips-openwrt-linux-uclibc/bin/ 编译成功后,
# ls build_dir/target-mips_34kc_uClibc-0.9.33.2/tes/
ipkg-ar71xx Makefile test test.c test.o
把test拷贝到开发板,执行就ok了。
相关文章推荐
- logback取代 log4j的理由
- 除了升级tomcat版本外,还能怎么解决?
- 项目中用到logback的例子
- Logback配置详解(三)
- 大数据分析界的“神兽”Apache Kylin初解
- Logback配置详解(二)
- Logback配置详解(一)
- Linux使用Shell脚本实现ftp的自动上传下载
- 利用C#的Type.GetProperty实现高效的数据转换
- [Git]第二讲:Git安装
- 转: OpenResty最佳实践
- PG监控命令
- Log4j配置详解
- Log4j的详细讲解
- centOS系统下安装Androguard工具
- linux解压大全
- [转载]NGINX原理分析 之 SLAB分配机制
- 大流量的网站如何解决访问量的问题
- CentOS系统常用命令
- linux 常用设置