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

时间: 2025-01-01 23:21:37

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

Openwrt 编译添加模块 Package

3.  添加模块 一般我们需要建立自己的模块(package),在编译固件时可以选择是否将自己的模块编译到固件中去. 3.1. 建立package 最终helloword文件目录结构为: helloword/ ├──Makefile └── src ├── helloworld.c └── Makefile 在./openwrt/trunk/package/utils/目录下新建helloword文件夹. 然后在helloword文件夹下新建src文件夹. 3.2. 在src目录下编写hello

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

ASP.NET Core已经从IIS中解耦,可以作为自宿主程序运行,不再依赖IIS. 但我们还是需要强大的IIS作为前置服务器,IIS利用httpPlatformHandler模块来对后台的一些web服务器进行进程管理,比如Tomcat, Jetty, Node.exe, Ruby,当然还有dotnet,同时为它们代理分发网络请求. httpPlatformHandler是通用的.闭源的,而且貌似迭代的很慢,半年了还停留在带着一个大BUG的v1.2,可能是由于这些原因吧,.NET小组从httpP

apache添加模块时报错:module status_module is built-in and can't be loaded

在使用cacti监控linux主机上的apache时,apache需要加载 mod_status.so 模块. 编辑httpd.conf,手动添加下行: LoadModule status_module modules/mod_status.so 在重启apache时报错如下: httpd: Syntax error on line 58 of /etc/httpd/httpd.conf: module status_module is built-in and can't be loaded

centos 7下nginx搭建流媒体服务器【动态添加模块】

1.安装nginx依赖包 yum install gcc gcc-c++ openssl-devel zlib-devel pcre pcre-devel yamdi 2.下载解压nginx_mod_h264_streaming,让nginx支持flv,mp4流播放 wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz 解压后需要修改src目录下的ngx_http_streaming_modul

nginx添加模块与https支持

实例1:为已安装nginx动态添加模块 以安装rtmp媒流模块为例: 1)下载第三方模块到 [[email protected] nginx-1.8.1]# git clone https://github.com/arut/nginx-rtmp-module.git 2)查看nginx编译安装时安装的模块 [[email protected] nginx-1.8.1]# nginx -V nginx version: nginx/1.8.1 built by gcc 4.4.7 2012031

python在Ubuntu添加模块搜索路径

本文我们来分享python添加模块搜索路径的3个方法,另外不补充了篇"为Python添加默认模块搜索路径". 大约有这么几种方法: 1.添加环境变量PYTHONPATH,python会添加此路径下的模块,在.bashrc文件中添加如下类似行: export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages 2.在site-packages路径下添加一个路径配置文件,文件的扩展名为.pth,内容为要添加的路径即可

手动添加模块路径

# -*- coding: utf-8 -*- #python 27 #xiaodeng #手动添加模块路径 #文件名的后缀(.py)是刻意从import语句中省略的,python会选择在搜索路径中第一个符合导入文件名的文件 # #手动添加模块路径方法 #sys.path.append(dirname)

MVC动态添加模块cshtml页面

@model Lixise.HealthCloud.ServiceOrder.Models.ServiceOrderEdit @using Lixise.HealthCloud.ServiceOrder.Utils @{ ViewBag.Title = "CreateOrder"; } <style type="text/css"> #close { /*background: url(img/close.png) no-repeat; width: 3

Linux下Nginx的安装、升级及动态添加模块

系统基于ubuntu server 14.04.4 amd64 安装 第一步 下载并解压Nginx压缩包 从Nginx官网下载Nginx,或者在Linux上执行wget http://nginx.org/download/nginx-1.10.1.tar.gz命令直接下载解压nginx-1.10.1.tar.gz文件: tar zxvf nginx-1.10.1.tar.gz 第二步 配置 cd nginx-1.10.1 ./configure --prefix=/usr/local/nginx