Openwrt 系统宏观结构

  • openwrt 目录结构
    ### 系统自带目录
    config 存着系统的配置文件
    .in--->.config--->编译脚本解析
    CONFIG_HAVE_DOT_CONFIG=y
    作用: 控制整个编译过程,是整个系统的配置文件,默认配置的控制脚本,如果需要增加新的编译选项,需要按照config.in文件格式进行设计
     
    include
    Makefile----/include/.mk
    (Makefile 脚本文件)
    作用: 提供makefile的编译脚本,控制整个编译过程,解析.config文件,生成部分变量,完成各个模块的编译
     
    package
    类型目录---功能目录---软件目录
    第三方软件的Makefile模板
    作用: 提供了第三方软件的版本、下载地址、编译方法、安装地址,具有标准模板,第三方软件需要按照标准模板,自行添加软件的编译脚本
     
    scripts
    存放一些脚本,所有在编译过程中使用的脚本都会存放在此目录.
     
    target
    存放用于编译各类平台适用的二进制文件,定义了各类平台编译固件和内核的具体过程
     
    tools
    通用的编译工具
    toolchain
    嵌入式交叉编译工具
    gcc
    arm arm-linux-gcc ---编译成对应的指令集
    mips mips-linux-gcc
     
    Makefile
    顶层的Makefile,进行编译的总体工作
     
    rules.mk
    定义了系统Makefile使用的各类变量和函数
     
    feeds.conf.default
    由脚本文件feeds使用的配置文件,配置文件中定义了大量第三方软件包的下载地址
     
    ### 编译过程产生目录
    dl
    在编译过程中,各类需要下载包都保存在这个目录下 (编译过程中用的工具)
    当编译过程卡在了某个包下载问题时,可以手动下载并存放在dl包中
    feeds
    系统的软件管理包,所有的第三方应用软件,所有下载的软件包(openwrt系统自用)
    ./sripts/feeds update -a
    ./sripts/feeds install -a
     
    build_dir
    编译过程中产生的工具,交叉编译工具,最终的目标文件等都会存放在此处
    host : tools文件中各类工具编译的结果存放在host中
    target-xxxx:编译完成的目标文件,包含系统的各类软件包,内核、文件系统等
    toolchain-xxx:tools-chain交叉编译工具最终编译的结果文件
     
    bin
    编译完成后,所有的ipk包,所有的内核镜像文件都会在此
    staging_dir
    存放build_dir文件中各类编译成功的软件,所以和build_dir中的目录结构是相同,最终存放编译结果的地方
    各类系统库,头文件等都在该文件下,在自行开发ipk时,编译过程中头文件,链接动态库,链接的静态库都会保存在该子文件夹下
    tmp
    编译过程的大量临时文件都会在此
    logs
    报错日志

 

 

Openwrt 系统微观结构

1.feeds.conf.default

标准语法:src-git telephony https://git.lede-project.org/feed/telephony.git^ac6415e61f147a6892fd2785337aec93ddc68fa9

feed支持的类型:

src-git 通过git的方式从后面的链接进行下载

src-cpy 通过path进行拷贝 (通过U盘更新等)

src-bzr 通过bzr的方式从后面的链接进行下载

src-link 创建一个数据源path的symlink

src-svn 通过svn的方式从后面的链接进行下载

2. 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 解析编译world目标的规则