文件结构
编译完以后的文件结构如下
moqi@ubuntu:~/sources$ tree -L 1 ./openwrt/
./openwrt/
├── BSDmakefile
├── COPYING
├── Config.in
├── LICENSES
├── Makefile
├── README.md
├── bin
├── build_dir
├── config
├── dl
├── feeds
├── feeds.conf.default
├── include
├── key-build
├── key-build.pub
├── key-build.ucert
├── key-build.ucert.revoke
├── logs
├── package
├── rules.mk
├── scripts
├── staging_dir
├── target
├── tmp
├── toolchain
└── tools
常用目录介绍
bin
编译完成后的最终成果目录。例如烧录用的固件及ipk安装包
moqi@ubuntu:~/sources/openwrt$ tree -L 3 ./bin/
./bin/
├── packages
│ └── mipsel_24kc
│ ├── base
│ ├── luci
│ ├── packages
│ ├── routing
│ └── telephony
└── targets
└── ramips
└── mt76x8
- bin/bin/packages/mipsel_24kc/:编译完的ipk包存放路径。
- bin/targets/ramips/mt76x8/:编译完以后的生成映像存放路径。
dl
下载软件代码包临时目录。编译前使用 make download V=s,可以将编译时需要的软件代码包下载到该目录。
feeds
扩展软件包目录。将一些不常用的软件包放在其他代码库中,通过feed机制可以自定义下载及配置。软件包的下载网址放在feeds.conf.default文件里。
moqi@ubuntu:~/sources/openwrt$ tree -L 1 feeds
feeds
├── luci
├── luci.index -> luci.tmp/.packageinfo
├── luci.targetindex -> luci.tmp/.targetinfo
├── luci.tmp
├── packages
├── packages.index -> packages.tmp/.packageinfo
├── packages.targetindex -> packages.tmp/.targetinfo
├── packages.tmp
├── routing
├── routing.index -> routing.tmp/.packageinfo
├── routing.targetindex -> routing.tmp/.targetinfo
├── routing.tmp
├── telephony
├── telephony.index -> telephony.tmp/.packageinfo
├── telephony.targetindex -> telephony.tmp/.targetinfo
└── telephony.tmp
- feeds/luci:Luci代码。
build_dir
编译中间文件目录。如生成的.o文件。
staging_dir
编译安装目录,文件安装到这里,并由这里的文件生成最终的编译成果。
moqi@vmserver:~/sources/openwrt$ tree -L 1 ./staging_dir/
./staging_dir/
├── host
├── hostpkg
├── packages
├── target-mipsel_24kc_musl
└── toolchain-mipsel_24kc_gcc-11.3.0_musl
- staging_dir/host:该文件夹是一个微型的Linux 根目录,有自己的目录bin/, lib/等等。这是主机工具安装的位置,构建系统的其余部分会将该区域的目录前缀到环境变量PATH中。
- staging_dir/toolchain-*:交叉编译链的解压后的存放文件,编译时使用不同的主控芯片后缀会不一样。
- staging_dir/target-*:包含每个目标包已安装的版本;根目录形式,包含bin/,lib/等等,并且将会变成实际的根目录,仅作出一些调整就会打包进固件镜像中,像root-ramips之类。这里也有一些其他的文件在其中,主要生成软件包和开发软件包。编译时使用不同的主控芯片后缀会不一样。
target
指的是嵌入式平台,包括特定嵌入式平台的内容。如果需要对特定芯片修改内容,都在这个目录下。
moqi@vmserver:~/sources/openwrt$ tree -L 1 target/
target/
├── Config.in
├── Makefile
├── imagebuilder
├── linux
├── llvm-bpf
├── sdk
└── toolchain
- target/linux/ramips/:ramips系列芯片代码存放的位置,包括设备树文件、芯片初始化代码。
logs
如果打开了针对开发人员log选项,则将编译log保存在这个目录下,否则该目录不会创建。
make-menuconfig菜单
在Openwrt源码的顶层目录下输入 make menuconfig就可以编译菜单。
Target System (MediaTek Ralink MIPS) --->
Subtarget (MT76x8 based boards) --->
Target Profile (Jotale JS76x8 32M) --->
Target Images --->
[ ] Enable experimental features by default
Global build settings --->
[ ] Advanced configuration options (for developers) ----
[ ] Build the OpenWrt Image Builder
[ ] Build the OpenWrt SDK
[ ] Package the OpenWrt-based Toolchain
[ ] Image configuration --->
Base system --->
Administration --->
Boot Loaders --->
Development --->
Extra packages --->
Firmware --->
Fonts --->
Kernel ----
Kernel modules --->
Languages --->
Libraries --->
LuCI --->
Mail --->
Multimedia --->
Network --->
Sound --->
Utilities --->
Xorg --->
- Target System:目标平台,例如一般Windows系统均为X86系统架构,嵌入式路由器通常有ARM、MIPS系统和博通系统。
- Target Images:编译生成物控制,根据目标平台不同选项不同。例如根文件系统格式、内核空间大小和是否生成VirtualBox映像文件等。
- Global build settings:全局编译设置,例如是否打开内核namespace等。
- Advanced configuration options:针对开发人员的高级配置选项,包含设置下载文件目录、编译log和外部编译工具等。
- Build the OpenWrt SDK:是否生成Openwrt的软件开发包,这样就可以离开Openwrt整体环境而进行模块编译和增加功能。
- Image configuration:固件生成的软件包模块,即是否打开feed;.conf中的各个模块。
- Base System:Openwrt基本系统。包括Openwrt的基本文件系统Base-file模块、实现DHCP和DNS代理的dnsmasq模块、软件包管理模块opkg、通用库ubox、系统总线ubux和防火墙firewall。
- Development:开发包。例如调试工具gdb,代码检查和调优工具valarind等。
- Firmware:各种硬件平台固件。
- Kernel modules:内核模块,运行在操作系统内部。例如加密模块、各种USB渠道和netfilter扩展模块等。
- Languages:不是国际化中的多语言支持模块,而是软件开发语言模块。如lua,Python。
- libraries:一些动态链接库。例如XML语言解析库libxml2,和内核通信的libnfnetlink库,压缩和解压缩算法zlib,微型数据库libsqlite3等。
- LuCI:Openwrt管理UI模块,例如动态DNS管理模块luci-app-ddns、防火墙管理模块luci-app-firewall和QOS管理模块luci-app-qos等。
- Mail:邮件传输客户端模块,例如msmtp软件包。
- Multimedia:多媒体模块,例如ffmpeg。
- Network:网络功能,Openwrt最具特色的核心模块。例如防火墙、路由、VPN和文件传输等。
- Sound:音频模块
- Utilities:一些不常用的工具模块。