在网上找了一下,不少关于编译Openwrt系统的资料,不过这些事情芯片厂商提供的开发包都已经办得妥妥了,可是没有找到系统介绍的资料,添加一个包的介绍有很少,其中有两个颇有参考价值:html
http://blog.csdn.net/lj627889343/article/details/7997463linux
http://kamikaze.openwrt.org/docs/openwrt.html#x1-460002.1.2shell
详细步骤以下:网络
在package目录下建立模块目录my_module,内含:app
Makefile 用于创建于OpenWRT的联系,成为OpenWRT的一个包ide
src 包含本身的代码ui
src/hello.c 源代码.net
src/Makefile 源代码的Makefilehtm
后续将主要讲解一下目前的系统Makefile的理解:blog
include $(TOPDIR)/rules.mk 必须包含
#include $(INCLUDE_DIR)/kernel.mk 内核模块包含,目前不须要
PKG_NAME:=my_module 包名称,在menuconfig显示
PKG_VERSION:=0.0.1 包版本号
PKG_BASE_NAME:=my_module 包名称,在build_dir下面建立PKG_BASE_NAME-PKG_VERSION目录,用于存放源代码
#PKG_SOURCE:=$(PKG_BASE_NAME)-$(PKG_VERSION).tar.gz
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_BASE_NAME)-$(PKG_VERSION) 指定代码存放路径
#PKG_RELEASE:=1
#PKG_SOURCE_URL:=http://localhost
PKG_BUILD_DEPENDS:=
PKG_BIN_DIR= 上面注释了三项,是为了避免让OpenWRT去下载代码(而从本地拷贝代码,见后面说明)
include $(INCLUDE_DIR)/package-version-override.mk 不知道干吗用,应该是必定要的
include $(INCLUDE_DIR)/package.mk 不知道干吗用,应该是必定要的
ifeq ($(DUMP),) 不知道干吗用
STAMP_CONFIGURED:=$(strip $(STAMP_CONFIGURED))_$(shell $(SH_FUNC) grep '^CONFIG_GPON_' $(TOPDIR)/.config | md5s)
endif
define Package/$(PKG_NAME) 用于设置menuconfig的选项
SECTION:=application 不知道干吗用,相似的选项有net/sys/driver...应该是linux系统的分类
CATEGORY:=teddy menuconfig顶级目录
TITLE:=the first module by teddy 本包的目录项说明(目录项名称即包名称)
URL:=http://www.teddy.com/ 不知道干吗用,估计用处不大
MAINTAINER:=teddy 不知道干吗用,估计用处不大
DEPENDS:= 依赖的包,还不会用
MENU:=1 目录项使能,若是若是基础模块能够设为0
endef
define Package/$(PKG_NAME)/description 不知道干吗用,估计用处不大
Teddy's First Package On OpenWRT.
endef
define Package/$(PKG_NAME)/config 结合config/Config.in设置比较复杂的目录项,能够不用
menu "detail configurations" 第一个选项,由开发人员自行设置
depends on PACKAGE_$(PKG_NAME)
source "$(SOURCE)/config/Config.in"
endmenu
$(call Package/$(PKG_NAME)/override_version) 第二个选项,由系统提供,应该是另外指定版本号
$(call Package/$(PKG_NAME)/override_source_path) 第三个选项,有系统提供,应该是另外指定代码存放路径的
endef
CONFIGURE_ARGS +=
ifeq ($(CONFIG_mips),y) 不知道干吗用
CONFIGURE_ARGS += --enable-add_drv_cflags="-fno-pic -mno-abicalls -mlong-calls -G 0"
endif
define Build/Prepare 这个很关键,在上面取消了从网络下载,由这里的语句将src的代码拷到指定位置
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Build/Clean 清除语句,没用过
@- rm -Rf $(PKG_BUILD_DIR)/ipkg*
@- [ -e $(PKG_BUILD_DIR)/Makefile ] && $(MAKE) -C $(PKG_BUILD_DIR) clean
$(call Build/Clean/Default)
endef
define Package/$(PKG_NAME)/install 忘记干吗用的了,好像是用来建立目录的,没有这句会致使编译不过
$(INSTALL_DIR) $(1)/$(PKG_BIN_DIR)
endef
$(eval $(call BuildPackage,$(PKG_NAME))) 必须
另外还能够建立
config/Config.in
用于细节定义,如
menu "macros" config FIRST_MACRO 这里的config值能够被Makefile使用,可是尚未发现源代码能够用 bool "first macro defined in my module" default y config SECOND_MACRO bool "second macro defined in my module" default yendmenu