Openwrt 系统结构

大耗子 2020年02月21日 281次浏览

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
    报错日志

1570888603170

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变量

如何开发一个自定义应用

1. 在packet下建立相关的自定义的包 
	mkdir src 
	touch Makefile 
2. 拷贝一个makefile模板,进行修改 
$(eval $(call BuildPackage,$(PKG_NAME)))	当前编译的包需要在主机内使用
3. 进行源码文件中的源码设计与Makefile设计
4. 进行make menuconfig 的配置
	选择对应的应用模块程序,选择为M 进行模块类型编译 
5. make package/hello/compile V=s 
6. 在/bin/packages/i386_pentium4/base 下找到对应的IPK包 
7.  python -m SimpleHTTPServer 8080 wget方式进行ipk包传递
	scp方式进行包的传递 
8. 安装ipk包,测试是否满足 
	opkg install hello_1-1.0_i386_pentium4.ipk 
9. 卸载ipk包
	opkg remove hello(包名)