OpenWRT添加模块 Makefile和Config.in
添加模块编译
在网上找了一下,很多关于编译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的更多相关文章
- openwrt 添加 应用(luci-application)
openwrt 添加应用的几个步骤如下: (1)在目录 ./feeds/luci/applications 下添加要增加的应用,譬如 "luci-test" (2)里面应该包含以下 ...
- Asp.Net Core子应用由于配置中重复添加模块会引起IIS错误500.19
ASP.NET Core已经从IIS中解耦,可以作为自宿主程序运行,不再依赖IIS. 但我们还是需要强大的IIS作为前置服务器,IIS利用httpPlatformHandler模块来对后台的一些web ...
- OpenWrt的主Makefile工作过程
OpenWrt是一个典型的嵌入式Linux工程,了解OpenWrt的Makefile的工作过程对提高嵌入式Linux工程的开发能力有极其重要意义. OpenWrt的主Makefile文件只有100行, ...
- yii2 添加模块过程
本文以Yii2基本应用程序模板为例,介绍下向该框架下加入新模块的过程: 1. 新建模块相关目录与文件 step 1: 新建目录结构 首先在根目录下新建modules目录,然后在该目录下面添加模块目 ...
- linux内核添加模块
参考: http://blog.csdn.net/gaoguoxin2/article/details/50220665 动态添加模块不需要编译内核. LINUX的模块主要由6部分组成: 1.模块的加 ...
- linux内核自己添加模块(内核版本:3.0.101)
做内核驱动第一步都是学习如何添加模块,这是基础,有了这个基础,剩下就是写代码了. 由于2.4到2.6内核版本的更新,无论是系统调用还是模块添加机制都有了巨大的变化,本人也因此饱经挫折,最后在3.0.1 ...
- ansible手动添加模块
文章目录 安装ansible 验证ansible版本 定义ansible配置文件路径 为ansible添加模块 由于使用pip安装的ansible,自带的模块会比较少,有的模块会不存在,需要自己手动添 ...
- Apache不重新编译,利用apxs工具给Apache添加模块,如cgi模块
想实践下Apache是如何运行cgi程序的,却发现先前编译安装Apache的时候,没有安装Apache的cgi模块. 附:CentOS6.x编译安装LAMP(2):编译安装 Apache2.2.25 ...
- apache2添加模块和添加站点
apache2添加模块和添加站点 linux下的apache2的目录和windows上的区别还是很大的,但是用起来却更方便了,详解请看另一篇文章http://www.cnblogs.com/wancy ...
随机推荐
- 201521123052《Java程序设计》第7周学习总结
1. 本周学习总结 参考资料: XMind 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 public boolean contains(Ob ...
- Java程序设计第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...
- SAP中常用SM系列事务代码总结
SM01 锁定事物 SM02 系统信息 SM04 显示在线用户 SM12 删除,显示锁对象 SM13 看update request SM21 看下系统日志 SM30|SM31 维护table|vi ...
- Window10中利用Windbg与虚拟机(window7)中调试驱动建立方法
想起自己的windbg配置就转载:eqera的windows内核调试配置,真的是获益良多希望他不会介意我转载他的博客,帮了我很多,记录下来给我也给大家, 其中我主要看的是VMWare的pipe建立,而 ...
- Could not execute JDBC batch update; SQL [delete from role where roleId=?]; constraint [null]; neste
今天在写多个删除功能的时候出现了这么一个错误:意思是删除操作的时候,没有找到对应的外键. Cannot delete or update a parent row: a foreign key con ...
- 启动PHPstudy提醒80、3306端口被占用
端口占用会出现如下提醒 解决办法: 进入dos窗口:快捷键win+R,然后输入cmd 在dos窗口中输入命令:netstat -ano(查找各端口所在进程的PID) 找到80和3306的程序PID ...
- Markdown使用简单示例
标题示例: 标题一 #标题一 标题二 #标题二 标题三 ###标题三 标题四 ####标题四 标题五 #####标题五 标题六 ######标题六 连接示例 [![License](图片地址)](跳转 ...
- Linux Ubuntu从零开始部署web环境及项目 -----部署项目 (三)
上一篇讲了如何在linux搭建web环境,这边将如何部署项目. 1,打包项目包 2,上传项目包 将.war项目包通过xftp上传到tomcat目录wabapps目录下 3,启动项目 通过xshell命 ...
- [AHOI2001]质数和分解
[AHOI2001]质数和分解 题目描述 任何大于 1 的自然数 n 都可以写成若干个大于等于 2 且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形 ...
- escape()、encodeURI()、encodeURIComponent()区别详解(转)
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,dec ...