做者:辛勤的摆渡人
来源:CSDN
原文:https://blog.csdn.net/hunter168_wang/article/details/50780597linux
bin目录存放的是一些输出文件,主要是存放OpenWrt编译好的开发环境,好比toolchain, SDK,Image制做工具,还存放一些package安装包(ipk包),
OpenWrt-ImageBuilder-bcm53xx.Linux-x86_64.tar.bz2
OpenWrt-SDK-bcm53xx_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64.tar.bz2
OpenWrt-Toolchain-bcm53xx_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64.tar.bz2git
目录bin/bcm53xx/packages/主要包含下面四个子目录
base:shell
存放的是一些基础的软件安装包;
leadlcore:
存放的是联芯自定义的一些软件安装包;服务器
luci:
存放的是一些UI相关的软件安装包网络
packages:
存放的是一些通用的软件安装包tcp
build_dir存放的是一些软件源码目录,解压缩后的程序源码均放在该目录,build_dir存在三个目录分别以下:工具
host子目录:flex
host子目录下存放的是开机系统须要的一些工具或程序,好比automake, autoconf, flex, sison, gettext,libtool等ui
target-arm_cortex-a9_uClibc-0.9.33.2_eabi子目录:url
该目录下存放的是用过feeds install安装或者用户自定义的一些程序好比samba, vsftpd,hostapd,dbus, iperf等等
toolchain-arm_cortex-a9_gcc-4.8-linaro_uClibc-0.9.33.2_eabi子目录:
该目录存放的是编译toolchain所需的一些源码包,好比linux内核目录, binutils源码包,gcc源码包;
该目录存放的是一些配置文件
Config-build.in
Config-devel.in
Config-images.in
Config-kernel.in
软件源码包download目录,经过网络下载软件包(.tar.bz2, .tar.gz)均存放在此目录,通常编译某个软件时会今后目录找对应的软件源码包,而后解压到指定的源码目录中;
若是此目录没有对应软件的源码包,则根据此软件Makefile文件中指定的网络地址去下载,下载好的软件包会自动存放在该目录;
文档目录,目前此目录下存放的也是代码,须要使用latex编译输出PDF后才能够阅读;
相关资源存放目录;
该目录存放的是编译时所须要的一些通用的Makefile脚本;
编译时会include到该目录中的makefile脚本
顾名思义该目录与软件包有关系,package目录存放的软件包或者程序的配置文件,全部程序或者软件均会被分门别类的存放在package目录下,子目录列表以下
base-files boot devel feeds firmware kernel libs Makefile network system utils
再以网络相关的程序为例进行说明,network子目录下又包含以下目录
config
配置相关的程序或者软件,好比firewall
ipv6
ipv6协议相关的资料
services
网络服务相关的软件或者程序,好比hostapd, samba, odhcpd等等
utils
存放的是网络调试相关的一些工具,好比iperf, iw, tcpdump,等等
对于某一个指定的软件包目录,内部主要包含两个文件,
一个是Makefile,内部包含着软件的名字和版本,以及下载该软件包服务器网络地址;
另外一个是patch目录,下载好对应版本的软件包后,打上对应的patch;
最后一个是files目录,
该目录存放的是此程序的默认配置文件;
说明:Makefile是必须具有的文件,而patch和file目录并不是必选项,根据软件状况无关紧要
该目录存放的是一些程序的脚本,
用户能够经过./script/feeds search/install 进行搜索或者安装相关软件;
stage_dir目录存放的子目录以下:
host
目前字母存放的输出文件为X86格式的,暂不清楚具体做用;
target-arm_cortex-a9_uClibc-0.9.33.2_eabi
该子目录主要存放的是编译出来的根文件系统,即rootfs
toolchain-arm_cortex-a9_gcc-4.8-linaro_uClibc-0.9.33.2_eabi
该子目录存放的是编译好的toolchain目录树,
OpenWrt编译toolchain时依赖的Makefile以及配置文件存放目录;
tools目录相似于packages目录,只不过该目录存放的是系统必须的一些程序或者软件的配置文件目录;
在openwrt的根目录下有feeds.conf
或者feeds.conf.default
文件,里面的内容相似以下
src-git base https://git.openwrt.org/openwrt/openwrt.git^412d80c src-git packages https://git.openwrt.org/feed/packages.git^76ebe2b src-git luci https://git.openwrt.org/project/luci.git^84692e5 src-git routing https://git.openwrt.org/feed/routing.git^e5fe4b6 src-git telephony https://git.openwrt.org/feed/telephony.git^16bad9e
以第一行为例,src-git base https://git.openwrt.org/openwrt/openwrt.git^412d80c
,它包含3个部分,src-git
,base
,url
,它的意思是base
模块的代码要经过git
从url
处下载。
./scripts/feeds update packages luci //对应feeds.conf文件的第二列的模块 ./scripts/feeds update -a //下载全部模块
这时会把文件检出到feeds目录下,下一步就是安装:
./scripts/feeds install feeds/base/package/devel/gdb //这里我要安装gdb
执行完这里,脚本会把gdb编译时全部依赖在package/feeds/base
创建一个同名符号连接,连接到feeds对应的目录下
使用make menuconfig
配置你要编译的模块是何种安装方式。
make package/feeds/base/gdb/{clean,prepare,compile,install} V=99
在clean,prepare,compile,install
各个阶段会作不一样的动做,好比prepare可能就会拉源码包下来,到dl
目录,install就会将ipk安装到bin
对应的目录下。