添加模块编译

在网上找了一下,很多关于编译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. 团队作业4---第一次项目冲刺(AIpha版本)第二天

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 1.界面 完成了主页及登录页面 2.功能 完成了后端数据处理的全部基本功能:a.数据结构设计及数据交互操作 b.博客页面数据采 ...

  2. Swing-布局管理器之FlowLayout(流式布局)-入门

    FlowLayout应该是Swing布局管理器学习中最简单.最基础的一个.所谓流式,就是内部控件像水流一样,从前到后按顺序水平排列,直到达到容器的宽度时跳转到第二行.既然是水平排列,那么就存在三种基本 ...

  3. 201521123074 《Java程序设计》第7周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. (嗯..都画了那么久的导图,还是用导图归纳吧~) 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList ...

  4. 201521123074 《Java程序设计》第5周学习总结

    1.本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 接口定义了解:接口(interface)就是方法声明和常量值的集合. 几种接口讲解 ...

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

    1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1.2 ...

  6. 201521123070 《JAVA程序设计》第1周学习总结

    本周学习总结 1.认识了三大平台Java SE.Java EE.Java ME. 2.认识了解了JDK,JVM与JRE,且熟悉JDK的操作并下载安装. 3.学会用博客写作业了. 书面作业 Q1.为什么 ...

  7. 201521123075 《Java程序设计》第12周学习总结

    1. 本周学习总结 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文件读出显示. 1 ...

  8. 201521123110 《Java程序设计》第1周学习总结

    第一周学习总结 本周开始了对java的初次学习接触,Java是一门新的编程语言不同于C,由于有了c的基础,对于Java的理解和学习也相对从前学C更容易些. 也学习了Java的诞生发展以及运用包括JVN ...

  9. POJ-2299 Ultra-QuickSort (树状数组,离散化,C++)

    Problem Description In this problem, you have to analyze a particular sorting algorithm. The algorit ...

  10. Magento 2.1.X 插件(Plugin)的创建

    Magento 2的插件主要作用:在Magento 1中,为了自定义不同的类和方法,你可以重写一个类. 这是一个非常强大和灵活的定制平台的方式. 这也造成了麻烦,因为两个模块不可以重写同一个类, 重写 ...