openwrt目录结构图
目录结构说明
SDK:开源openwrt源代码根目录
SDK/package:软件包顶层目录
SDK/staging_dir:工具链存放路径
SDK/build_dir:实际编译路径
SDK/package/xxx_package:特定的软件包
SDK/package /xxx_package/patches:存放针对指定软件包patch的文件夹
SDK/package /xxx_package/src:存放.c .h已经符合openwrt规范的基础makefile文件
SDK/package /xxx_package/Makefile:用于构建编译src路径下源文件环境
Openwrt系统编译规则
Openwrt系统编译架构由一套编译规则实现,正是由于这套规则,开发者可以方便编写跨平台的软件包以及易于支持跨平台的开源软件包。
主要规则说
SDK/rules.mk:主要定义编译工具链相关宏、公共路径宏、常用编译选项
SDK/include/autotools.mk:主要实现autoconf相关的一些逻辑
SDK/include/package.mk:主要实现编译过程中用到的各种宏
SDK/include/package-defaults.mk:定义部分编译默认宏,当软件包没指定时,使用此规则里面的宏
基于openwrt系统编译iproute2
Makefile文件及分析如下
include $(TOPDIR)/rules.mk #引用rules.mk,通用规则用户态软件包均需引用
PKG_NAME:=iproute2 #包名,用户自定义
PKG_VERSION:=4.0.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://kernel.org/pub/linux/utils/net/iproute2/#iproute2源码下载地址
PKG_MD5SUM:=3adc263ade4ee76c35032e8f50b54108
PKG_BUILD_PARALLEL:=1
PKG_LICENSE:=GPL-2.0
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
include $(INCLUDE_DIR)/package.mk #引用package.mk,用户态软件包均需引用