前言
SDK软件开发工具包(Software Development Kit )是为软件工程师在特定的平台上进行应用程序开发而提供的一系列软件开发工具的集合。嵌入式Linux发行版LEDE提供的SDK环境与发行版环境相兼容,在SDK环境下进行程序开发,不像发行版那样需要编译整个linux系统,只需要指定特定开发的功能包进行交叉编译即可。本文介绍在LEDE提供的SDK环境下编译应用程序的方法,以及如何将生成的可执行文件和ipk包应用在系统中。
SDK环境生成
在LEDE源码目录下执行make menuconfig命令进入LEDE配置界面,选择 [*] Build the LEDE SDK进行编译,之后会在/source-17.01.4/bin/targets/ramips/mt7628下生成SDK软件压缩包 lede-sdk-ramips-mt7628_gcc-5.4.0_musl-1.1.16.Linux-i686.tar.xz。
将软件包lede-sdk-ramips-mt7628_gcc-5.4.0_musl-1.1.16.Linux-i686.tar.xz解压后得到lede-sdk-ramips-mt7628_gcc-5.4.0_musl-1.1.16.Linux-i686目录,目录结构如下图所示,该目录结构与LEDE目录结构基本一致,其中/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16目录为编译工具链的存放位置。
注:在LEDE配置界面选择Package the LEDE based Toolchain选项进行编译,会在bin/targets/ramips/mt7628 路径下生成工具链软件lede-toolchain-ramips-mt7628_gcc-5.4.0_musl-1.1.16.Linux-i686.tar.bz2,提供给eclipse这样的第三方平台调用。
程序创建和编译
1)在lede-sdk-ramips-mt7628_gcc-5.4.0_musl-1.1.16.Linux-i686/package目录下新建开发的功能程序目录yxpr_ipk
2)在yxpr_ipk目录下新建Makefile文件和src目录,Makefile文件内容如下所示,关键内容中PKG_NAME:=yxpr_ipk指定了功能程序名称,define Package/yxpr_ipk中SECTION指定了功能模块在kernel 配置界面的父目录,TITLE指定了功能模块在kernel 配置界面的标题说明
include $(TOPDIR)/rules.mk
PKG_NAME:=yxpr_ipk
PKG_RELEASE:=1
PKG_BUILD_DIR:= $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/yxpr_ipk
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Helloworld-- prints a snarky message
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Package/yxpr_ipk/install
$(INSTALL_DIR) $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/yxpr_ipk $(1)/bin/
endef
$(eval $(call BuildPackage,yxpr_ipk))
3)在src目录下新建程序文件yxpr_ipk.c和Makefile文件
#include
int main(void)
{
printf("this is make ipk and executable file test
");
return 0;
}
yxpr_ipk: yxpr_ipk.o
$(CC) $(LDFLAGS) yxpr_ipk.o -o yxpr_ipk
yxpr_ipk.o: yxpr_ipk.c
$(CC) $(CFLAGS) -c yxpr_ipk.c
clean:
rm *.o yxpr_ipk
4)在lede-sdk-ramips-mt7628_gcc-5.4.0_musl-1.1.16.Linux-i686目录下执行make menuconfig命令进入kernel配置界面,按如下图示进行配置后执行编译
注: 当编译过程中出现“……has both : and :: entries. Stop.”错误时为Makefile文件中行末尾存在空格,出现“ Makefile missing separator. Stop.”错误时为TAB键误用,Makefile文件中只有命令所在行才能以TAB开头
5)编译完成后会在 /ramips/mt7628/lede-sdk-ramips-mt7628_gcc-5.4.0_musl-1.1.16.Linux-i686/bin/packages/mipsel_24kc/base/目录下生成yxpr_ipk_1_mipsel_24kc.ipk,同时会在/lede-sdk-ramips-mt7628_gcc-5.4.0_musl-1.1.16.Linux-i686/build_dir/target-mipsel_24kc_musl-1.1.16/yxpr_ipk/目录下生成yxpr_ipk可执行bin文件
安装和执行
通过WinSCP工具将ipk包和可执行bin文件传输至设备的文件系统根文件目录下,运行./yxpr_ipk直接执行bin文件程序,执行opkg install yxpr_ipk_1_mipsel_24kc.ipk安装ipk包后在/bin/路径下生成yxpr_ipk可执行程序,也可通过opkg list命令查看是否安装成功。
注:需要增加bin文件的可执行权限,否则提示Permission denied