终于要开始写代码了,好激动。
在一个典型的package目录下,你会看到三个东西:
-
package/Makefile
-
package/patches目录,可选
-
package/files目录,可选
patches目录顾名思义是用来放patch的。因为OpenWrt就像是一个repo仓库,有很多package来源于其他开源项目。而patches里面的patch就是用来修正bug,或者让其他开源项目能够顺利的编译、运行起来,又或者减小最终的可执行文件大小。
files目录下则用来放默认配置文件或者init脚步等。
Makefile当然是非常重要的了,决定了这个package需要如何下载、如何编译。
既然只有Makefile是必须的,我们就从Makefile开始,build from scratch,一点点建起我们的罗马城。
首先,在源码的package/utils/目录下建立一个dingding目录,新建Makefile,内容如下:
include $(TOPDIR)/rules.mk
PKG_NAME:=dingding
PKG_RELEASE:=1 #required
include $(INCLUDE_DIR)/package.mk
define Package/dingding
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Dingding says Hello
endef
define Package/dingding/description
Dingding wanna learning OpenWrt
endef
$(eval $(call BuildPackage,dingding))
然后在源码根目录运行make menuconfig,就会在Utilities下看到我们新建的dingding:
选为"*",make一下,没报错,往下走。
新建dingding.c,内容如下:
#include <stdio.h>
int main(int argc, char **argv) {
printf("Hello This is dingding\n");
return 0;
}
再往Makefile加几行:
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
endef
define Build/Compile
$(TARGET_CC) $(TARGET_CFLAGS) -o $(PKG_BUILD_DIR)/dingding dingding.c
endef
define Package/dingding/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/dingding $(1)/usr/bin/dingding
endef
make一下,在build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/root-ramips/usr/bin 就可以看到我们的dingding了(??)
-rwxr-xr-x 1 ding ding 2295 Feb 17 00:10 build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/root-ramips/usr/bin/dingding
把固件升级上去,ssh登录上路由器,运行一下dingding:
6不6?