.in —> .config---->编译脚本解析
CONFIG_HAVE_DOT_CONFIG = y 等等
作用:控制整个编译过程,是整个系统的配置文件,如果需要增加新的编译选
项,需要按照config.in文件格式进行设计
Config-build.in //单纯去编译的最基本的配置文件
config-devel.in //用于开发的配置文件,基于源码开发
config-images.in //基于生成某种镜像
config-kernel.in //内核包括文件系统
所有的 .in文件会生成 .config 文件
/* 镜像不等于编译,bulid后生成的 elf文件 */
*镜像与编译的区别*
elf --> image
对elf文件进行压缩放进镜像体里,把压缩算法的实现放在
镜像头里,运行时,先用自定义格式的内容的镜像头来解
压缩 镜像体,解压后释放进内存里运行
```bash
menu "Global build settings"
config ALL_NONSHARED
bool "Select all target specific packages by default"
default ALL || BUILDBOT
config ALL_KMODS
bool "Select all kernel module packages by default"
default ALL
config ALL
bool "Select all userspace packages by default"
default n
config BUILDBOT
bool "Set build defaults for automatic builds (e.g. via buildbot)"
default n
help
This option changes several defaults to be more suitable for
automatic builds. This includes the following changes:
- Deleting build directories after compiling (to save space)
- Enabling per-device rootfs support
# CONFIG_TARGET_ar7 is not set
# CONFIG_TARGET_omap is not set
# CONFIG_TARGET_uml is not set
# CONFIG_TARGET_zynq is not set
CONFIG_TARGET_x86=y
CONFIG_TARGET_x86_generic=y
# CONFIG_TARGET_x86_legacy is not set
# CONFIG_TARGET_x86_geode is not set
# CONFIG_TARGET_x86_64 is not set
CONFIG_TARGET_x86_generic_Generic=y
CONFIG_HAS_SUBTARGETS=y
CONFIG_TARGET_BOARD="x86"
CONFIG_TARGET_SUBTARGET="generic"
CONFIG_TARGET_PROFILE="Generic"
CONFIG_TARGET_ARCH_PACKAGES="i386_pentium4"
CONFIG_DEFAULT_TARGET_OPTIMIZATION="-Os -pipe -march=pentium4"
CONFIG_CPU_TYPE="pentium4"
CONFIG_LINUX_4_4=y
CONFIG_DEFAULT_base-files=y
CONFIG_DEFAULT_busybox=y
CONFIG_DEFAULT_dnsmasq=y
//设置选项
menu "helloworld"
endmenu
menu "Global build settings"
config ALL_NONSHARED
bool "Select all target specific packages by default"
default ALL || BUILDBOT
menu "helloworld"
config MY_TEST
bool "Select all target specific packages by default"
default n //bool默认值
help
helloman
endmenu
include文件里面定义了一个模块里的细节结构的构成
类型目录—功能目录—软件目录
第三方软件的Makefile模板
作用:提供了第三方软件的版本、下载地址、编译方法、安装地址,具有标准模板,第三方软件需要按照标准模板,自行添加软件编译脚本
存放一些脚本,如python,JavaScript等
所有在编译过程中使用的脚本都会存放在此目录
批量更新或安装的包
存放用于编译各类cpu的平台使用的二进制文件,定义了各类平台的编译固件和内核的具体过程
通用的编译工具
嵌入式交叉编译工具
顶层Makefile 不怎么需要改
定义了系统Makefile使用的各类变量和函数
feeds.conf.default
由脚本文件feeds使用的配置文件,配置文件中定义了大量第三方软件包的下载地址
1.1 在编译过程中,各类编译工具下载包都保存在这个目录下
1.2 当编译过程卡在了某个包下载问题时,可以手动下载并存放在
dl包中
1.3 当下载的包特别慢的时候,可以修改的镜像下载地址
1.开发一个第三方的应用程序,只需要实现helloworld
1.1 在package目录下创建专属的文件夹
1.2 在专属文件夹下进行Makefile创建,以及源码的添加
1.3 利用make menuconfig 进行相关包的选择
1.4 开始系统编译
1.5 bin/package找到对应第三方的(.ipk)包
1.6 使用软件安装程序进行ipk包的安装
1.1 编译过程产生的
1.2 系统的软件管理包,所有的第三方应用软件包,所有下载的软件包(openwrt系统自用)
./sripts/feeds update -a 更新包
./sripts/feeds install -a 去安装这个包
在编译过程中产生的工具,交叉编译工具,最终的目标文件等都会存在此目录
> host : tools文件中各类工具编译链的结果存在host中
> target-xxxx:编译完成的目录文件,包含系统的各类软件包,
内核,文件系统等
> toolchain-xxx:tools_chain交叉编译工具最终编译的结果
文件
编译完成后,所有的ipk包,所有的内核镜像文件都会在此
编译成对应的指令集
x86 gcc
arm arm-linux-gcc
mips mips-linux-gcc
1.1 存放build_dir文件中各类编译成功的软件,所以和build_dir中的目录 结构相同,最终编译存放编译结果的地方
、、
1.2 各类系统库,头文件等都在该文件下,在自行开发ipk时,编译过程中头文件,链接动态库,链接的静态库都会保存在该子文件下
编译过程的大量临时文件都会在此
报错日志,提醒编译过程中产生的错误
1. feeds.config.deafult
2. feed支持的类型:
src-git 通过git的方式从后面的链接进行下载
src-cpy 通过path进行拷贝(通过U盘更新,本地镜像站)
src-bzr 通过bzr的方式从后面的链接进行下载
src-link 创建一个数据源path的symlink
src-svn 通过svn的方式从后面的链接进行下载
标准语法:
src-git packages https://git.lede-project.org/feed/packages.git^cd5c448758f30868770b9ebf8b656c1a4211a240
src-git luci https://git.lede-project.org/project/luci.git^d3f0685d63c1291359dc5dd089c82fa1e150e0c6
src-git routing https://git.lede-project.org/feed/routing.git^d11075cd40a88602bf4ba2b275f72100ddcb4767
src-git telephony https://git.lede-project.org/feed/telephony.git^ac6415e61f147a6892fd2785337aec93ddc68fa9
1. main Makefile
world:
1. 在执行make时,如果不指定任何目标,则默认目标是world
2. 如果在MAKE时不指定OPENWRT_BUILD参数时,进入第一个逻
辑,如果进行make OPENWRT_BUILD=1 则进入第二个逻辑
make V=s -j4 不会指定OPENWRT_BUILD的变量
第一个逻辑:
make V=s
include $(TOPDIR)/include/debug.mk 在编译过程中各个错误
include $(TOPDIR)/include/depends.mk 检查当前系统在编译内核阶段所有需要依赖的包是否安装
include $(TOPDIR)/include/toplevel.mk 解析编译的
.
prereq:: perpare-tmpinfo .config
@make -r -s tmp/.prereq-build
@make V=ss -r -s
prereq %:
@make V=ss -r -s
@make -w -r world
目的为了生成prereq 和 world 这两个目标