方法主要有两种:1) SDK编译 2)源码编译
1.SDK编译软件安装包IPK
从上边的教程我们已经可以看到怎么去获得SDK包了,然后怎么使用这个包,看教程:
http://my.oschina.net/hevakelcj/blog/410633
这个教程已经详实地介绍了编译的步骤,步骤是没有问题的。但是!SDK编译比较坑,就算你完全正确,他就是给你报错,我就死在了下图这个错误上:
意思是makefile 32行前边少了个Tab,但是无论是怎么改,他就是报错 = = 所有努力都是徒劳无意义的。
同样的代码同样的makefile,在用源码编译的方法是完全可行的。
所以,强烈采用源码编译而不是SDK编译。
2.源码编译软件安装包IPK
前边的教程已经讲到怎么编译出ipk包了,其实就是那个步骤,下边讲讲怎么写自己package,下边以helloworld为例:
先创建自己的包目录,以及外层makefile:
mkdir helloworld
cd helloworld
mkdir src
vi makefile
然后在这个makefile里边填写如下内容,(内容可以参考官网的说明)
include $(TOPDIR)/rules.mk # Name and release number of this package PKG_NAME:=helloworld PKG_RELEASE:=1 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) include $(INCLUDE_DIR)/package.mk define Package/helloworld SECTION:=utils CATEGORY:=Utilities TITLE:=helloworld -- prints a snarky message endef # Uncomment portion below for Kamikaze and delete DESCRIPTION variable above define Package/helloworld/description It is Duval`s demo. endef define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)/ endef #define Build/Compile # $(MAKE) -C $(PKG_BUILD_DIR) \ # $(TARGET_CONFIGURE_OPTS) CFLAGS="$(TARGET_CFLAGS) -I$(LINUX_DIR)/include" #endef define Package/helloworld/install $(INSTALL_DIR) $(1)/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/ endef $(eval $(call BuildPackage,helloworld))
然后 进入src,去编写helloworld.C
cd src
vi helloworld.c
helloworld.c 里边填写
#include<stdio.h> int main(void) { printf("yyyy\n"); return 0; }
为helloworld.c编写makefile
vi makefile
makefile 里边填写
# build helloworld executable when user executes "make" helloworld: helloworld.o $(CC) $(LDFLAGS) helloworld.o -o helloworld helloworld.o: helloworld.c $(CC) $(CFLAGS) -c helloworld.c # remove object files and executable when user executes "make clean" clean: rm *.o helloworld
然后把 这个helloworld的package包拷贝到源码的./package目录下边。
然后运行
make defconfig
make menuconfig
然后在 menuconfig的菜单中找到helloworld,具体是菜单那里,就看你外层makefile怎么写的。然后找到后在前边勾选M ,表示仅编译不固化到固件中。
然后运行编译
make -j1 V=s
最后在bin目录下可以找到自己要的ipk包。