02 make和目录结构


1 make

1.1 整体编译

make V=s
make -j 2 

1.2单独编译一个模块

make package/tcpdump/clean          清除编译生成文件
make package/tcpdump/prepare        进行编译准备,包含下载软件代码包,并解压缩和打补丁  
make package/tcpdump/configure      根据设置选项镜像配置并生成Makefile
make package/tcpdump/compile        根据生成的Makefile进行编译
make package/tcpdump/install        生成安装包

目标文件在bin目录下
以上命令都可以添加V=s选项查看编译过程

2 make menuconfig解析

  • Target System机型的系列
  • Subarget机型系列的二级子菜单
  • Target Profile机型的配置
  • Target Imagerootfs嵌入到kennel
  • Global build setting
  • Administration管理工具
  • Development开发工具
  • Firmware无线网卡的操作系统
  • Kernel modules内核模块
  • Libraries常用库

3 目录结构

  • bin或者sbin
    放可执行文件
  • etc
    配置文件
  • mnt
    挂在点
  • procsys
    内核创建,两者并存。proc不容易管理
  • usr
    用户目录
  • www
    Luci等相关的资源文件
  • dev
    设备
  • lib
  • overlay
    overlay文件系统则表示一个文件系统覆盖在另一个文件系统上面。平时操作时,不会直接去修改底层文件系统,而是在overlay上进行操作
  • rom
    静态文件,初始文件
  • tmp
    临时目录
  • var
    存放临时文件

4 顶层目录概述

编译生成的结果会存储在3个目录下:
build_dir/host:是一个临时目录,用来储存不依赖目标平台的工具
build_dir/toolchain-*:用来储存依赖于平台的编译工具链
staing_dir/toolchain-*:编译工具链最终安装的位置

4.1 openwrt编译生成目录

5 编译脚本

5.1 scripts

目录scripts为编译工具脚本文件,在编译时首先将patch目录下的所有补丁打上(如果失败则直接退出编译)。

5.2 feeds编译扩展机制

feed:非官方的包
package:官方的包
feed最后会合入到package
feeds由两部分组成:
扩展包位置配置文件feed.conf.default
脚本工具feeds

./scripts/feeds update -a
./scripts/feeds install -a

上述操作就是利用feeds提供的接口将OpenWrt所需的全部扩展软件包进行下载并安装

update:    下载feeds.conf或feeds.conf.default文件中的软件包,并创建索引。
            -a 表示更新所有的软件包。只要更新后才能进行后面的操作
list:      从创建的索引文件 feed.index 中读取列表并显示(只有更新之后才可以使用)
install:   安装软件包及它所依赖的软件包。从feeds目录安装到package目录。及在package/feeds目录下创建软链接。只有安装之后才能对相关的软件包进行编译。
search:    按照传入的字符串,查找软件包
uninstall: 卸载软件包,仅删除本软件包的软链接
clean:     删除update命令下载和生成的索引文件。不会删除install创建的链接

feeds处理过程:读取并解析feeds.conf配置文件。然后执行相关的命令。
编译扩展安装过程就是将feeds目录下的软件包链接到package/feeds对应目录下。可以使用feeds.conf或者feeds.conf.default。优先选择feeds.conf。此文件包含3部分,feed方法,feed名字,feed