添加模块编译

在网上找了一下,很多关于编译Openwrt系统的资料,不过这些事情芯片厂商提供的开发包都已经办得妥妥了,但是没有找到系统介绍的资料,添加一个包的介绍有不多,其中有两个很有参考价值:

http://blog.csdn.net/lj627889343/article/details/7997463

http://kamikaze.openwrt.org/docs/openwrt.html#x1-460002.1.2

详细步骤如下:

在package目录下创建模块目录my_module,内含:

Makefile           用于建立于OpenWRT的联系,成为OpenWRT的一个包

src                    包含自己的代码

src/hello.c       源代码

src/Makefile    源代码的Makefile

后续将主要讲解一下目前的系统Makefile的理解:

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 y
endmenu

OpenWRT添加模块 Makefile和Config.in的更多相关文章

  1. openwrt 添加 应用(luci-application)

    openwrt 添加应用的几个步骤如下: (1)在目录 ./feeds/luci/applications 下添加要增加的应用,譬如 "luci-test" (2)里面应该包含以下 ...

  2. Asp.Net Core子应用由于配置中重复添加模块会引起IIS错误500.19

    ASP.NET Core已经从IIS中解耦,可以作为自宿主程序运行,不再依赖IIS. 但我们还是需要强大的IIS作为前置服务器,IIS利用httpPlatformHandler模块来对后台的一些web ...

  3. OpenWrt的主Makefile工作过程

    OpenWrt是一个典型的嵌入式Linux工程,了解OpenWrt的Makefile的工作过程对提高嵌入式Linux工程的开发能力有极其重要意义. OpenWrt的主Makefile文件只有100行, ...

  4. yii2 添加模块过程

    本文以Yii2基本应用程序模板为例,介绍下向该框架下加入新模块的过程: 1. 新建模块相关目录与文件 step 1: 新建目录结构   首先在根目录下新建modules目录,然后在该目录下面添加模块目 ...

  5. linux内核添加模块

    参考: http://blog.csdn.net/gaoguoxin2/article/details/50220665 动态添加模块不需要编译内核. LINUX的模块主要由6部分组成: 1.模块的加 ...

  6. linux内核自己添加模块(内核版本:3.0.101)

    做内核驱动第一步都是学习如何添加模块,这是基础,有了这个基础,剩下就是写代码了. 由于2.4到2.6内核版本的更新,无论是系统调用还是模块添加机制都有了巨大的变化,本人也因此饱经挫折,最后在3.0.1 ...

  7. ansible手动添加模块

    文章目录 安装ansible 验证ansible版本 定义ansible配置文件路径 为ansible添加模块 由于使用pip安装的ansible,自带的模块会比较少,有的模块会不存在,需要自己手动添 ...

  8. Apache不重新编译,利用apxs工具给Apache添加模块,如cgi模块

    想实践下Apache是如何运行cgi程序的,却发现先前编译安装Apache的时候,没有安装Apache的cgi模块. 附:CentOS6.x编译安装LAMP(2):编译安装 Apache2.2.25 ...

  9. apache2添加模块和添加站点

    apache2添加模块和添加站点 linux下的apache2的目录和windows上的区别还是很大的,但是用起来却更方便了,详解请看另一篇文章http://www.cnblogs.com/wancy ...

随机推荐

  1. 201521123017 《Java程序设计》第6周学习总结

    1. 本周学习总结 <> 2. 书面作业 Q1.clone方法 1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 1. ...

  2. Java程序设计第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...

  3. 201521123088 《Java程序设计》第1周学习总结

    第1周学习总结 1.本周学习总结本周我们正式开始了对一门新的编程语言java的学习.Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此J ...

  4. 201521145048 《Java程序设计》第7周学习总结

    1. 本周学习总结 2. 书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 1.2 解释E remove(int index)源代码 1.3 结合1. ...

  5. 201521123001《Java程序设计》第11周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  6. 201521123089《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 1.数据库:为了实现一定目的按某中规划组织起来的"数据"的"集合". 2 ...

  7. 数据库复用代码【c3p0配置文件、数据库连接池】

    前言 为了复用,记载一些以前写过的工具类.方法 c3p0配置文件[c3p0-config.xml] <?xml version="1.0" encoding="UT ...

  8. 06jQuery-02-层级选择器

    因为DOM结构就是层级结构,所以我们经常要根据层级关系进行选择. 1.层级选择器 $('ancestor descendant'),选择祖先中的子孙,中间留空格: $('form[name=uploa ...

  9. 02函数-05-generator(ES6)

    generator(生成器)是ES6标准引入的新的数据类型. generator看上去像一个函数,但可以返回多次,除了return语句,还可以用yield返回多次.定义方式如下: function* ...

  10. Myeclipse黑色主题配置

    Myeclipse自己打造黑色主题: 一.UI Theme(设置黑色主题模式): 如果是自己下载在的.jar主题,则首先将该jar包放在Myeclipse安装目录下的\dropins\plugins\ ...