一、openwrt结构分析

openwrt 系统宏观结构

openwrt目录结构

1. config 存着系统的配置文件

.in —> .config---->编译脚本解析
CONFIG_HAVE_DOT_CONFIG = y 等等
作用:控制整个编译过程,是整个系统的配置文件,如果需要增加新的编译选
项,需要按照config.in文件格式进行设计


Config-build.in  		 //单纯去编译的最基本的配置文件
config-devel.in			//用于开发的配置文件,基于源码开发
config-images.in		//基于生成某种镜像
config-kernel.in		//内核包括文件系统
所有的 .in文件会生成 .config 文件
  • config-images.in
    在这里插入图片描述
/* 	镜像不等于编译,bulid后生成的 elf文件	*/
*镜像与编译的区别*
elf	-->	image

对elf文件进行压缩放进镜像体里,把压缩算法的实现放在
镜像头里,运行时,先用自定义格式的内容的镜像头来解
压缩 镜像体,解压后释放进内存里运行
  • config-bulid.in
    用于管理各种文件,在以后安装模块时用
```bash
menu "Global build settings"

	config ALL_NONSHARED
		bool "Select all target specific packages by default"
		default ALL || BUILDBOT

	config ALL_KMODS
		bool "Select all kernel module packages by default"
		default ALL

	config ALL
		bool "Select all userspace packages by default"
		default n

	config BUILDBOT
		bool "Set build defaults for automatic builds (e.g. via buildbot)"
		default n
		help
		  This option changes several defaults to be more suitable for
		  automatic builds. This includes the following changes:
		  - Deleting build directories after compiling (to save space)
		  - Enabling per-device rootfs support
  • 在 .config文件中最关键的是 y 和 n 和其他关键字选项
  • 脚本会使用它,#代表注释
# CONFIG_TARGET_ar7 is not set
# CONFIG_TARGET_omap is not set
# CONFIG_TARGET_uml is not set
# CONFIG_TARGET_zynq is not set
CONFIG_TARGET_x86=y
CONFIG_TARGET_x86_generic=y
# CONFIG_TARGET_x86_legacy is not set
# CONFIG_TARGET_x86_geode is not set
# CONFIG_TARGET_x86_64 is not set
CONFIG_TARGET_x86_generic_Generic=y
CONFIG_HAS_SUBTARGETS=y
CONFIG_TARGET_BOARD="x86"
CONFIG_TARGET_SUBTARGET="generic"
CONFIG_TARGET_PROFILE="Generic"
CONFIG_TARGET_ARCH_PACKAGES="i386_pentium4"
CONFIG_DEFAULT_TARGET_OPTIMIZATION="-Os -pipe -march=pentium4"
CONFIG_CPU_TYPE="pentium4"
CONFIG_LINUX_4_4=y
CONFIG_DEFAULT_base-files=y
CONFIG_DEFAULT_busybox=y
CONFIG_DEFAULT_dnsmasq=y

  • 比如我们可以自己设置选项 在 config-build.in文件中
//设置选项 
menu "helloworld"

endmenu
menu "Global build settings"

	config ALL_NONSHARED
		bool "Select all target specific packages by default"
		default ALL || BUILDBOT
  • make menuconfig
    在这里插入图片描述
    这里就会出现 helloworld的 选项,至于它所属的子选项
menu "helloworld"
	config MY_TEST
	bool "Select all target specific packages by default"
	default n  //bool默认值
	help
		helloman 

endmenu

在这里插入图片描述
此时有了子选项
在这里插入图片描述
选择 HELP选项,出现下面的画面
在这里插入图片描述

2. include 文件

  • 存放着openwrt的makefile的 头文件 是一个编译控制脚本
  • 上层makefile可以包含下层makefile
  • 总 Makefile ---->去执行 /include/.mk
    ( Makefile 脚本文件)
  • 作用提供makefile的编译脚本,控制整个编译过程,解析.config文件,生成部分变量,完成各个模块的编译
    在这里插入图片描述
    这是个总的MAKEFILE
    比如
  • 总的makefile里包含大量的 .mk文件
include文件里面定义了一个模块里的细节结构的构成

在这里插入图片描述

3. package 软件包

  • 用来放置各种安装的软件包,要更新的软件全放在这里

类型目录—功能目录—软件目录

第三方软件的Makefile模板
作用:提供了第三方软件的版本、下载地址、编译方法、安装地址,具有标准模板,第三方软件需要按照标准模板,自行添加软件编译脚本

  • 如果本地没有的安装包,它会提供URL镜像地址下载
    在这里插入图片描述
  • 根据下载的包的类型来进行解压
    在这里插入图片描述
  • 根据包的依赖来不同下载的依赖下载安装
    在这里插入图片描述
    在这里插入图片描述

4. scripts

存放一些脚本,如python,JavaScript等
所有在编译过程中使用的脚本都会存放在此目录
批量更新或安装的包

5. target

存放用于编译各类cpu的平台使用的二进制文件,定义了各类平台的编译固件和内核的具体过程

6. tools

通用的编译工具

7. toolchain

嵌入式交叉编译工具

8. Makefile

顶层Makefile 不怎么需要改

9. rules_mk

定义了系统Makefile使用的各类变量和函数

10. feeds.conf.deafult

feeds.conf.default
由脚本文件feeds使用的配置文件,配置文件中定义了大量第三方软件包的下载地址

11. dl 文件夹

1.1 在编译过程中,各类编译工具下载包都保存在这个目录下
1.2 当编译过程卡在了某个包下载问题时,可以手动下载并存放在
dl包中
1.3 当下载的包特别慢的时候,可以修改的镜像下载地址
在这里插入图片描述

Example

1.开发一个第三方的应用程序,只需要实现helloworld
	1.1 在package目录下创建专属的文件夹
	1.2 在专属文件夹下进行Makefile创建,以及源码的添加
	1.3 利用make menuconfig 进行相关包的选择
	1.4 开始系统编译
	1.5 bin/package找到对应第三方的(.ipk)包
	1.6 使用软件安装程序进行ipk包的安装

12. feeds

1.1 编译过程产生的
1.2 系统的软件管理包,所有的第三方应用软件包,所有下载的软件包(openwrt系统自用)

		./sripts/feeds update -a     更新包
 		./sripts/feeds install -a    去安装这个包

13. build_dir

在这里插入图片描述

在编译过程中产生的工具,交叉编译工具,最终的目标文件等都会存在此目录

> host : tools文件中各类工具编译链的结果存在host中
> target-xxxx:编译完成的目录文件,包含系统的各类软件包,
  内核,文件系统等
> toolchain-xxx:tools_chain交叉编译工具最终编译的结果
  文件

14. bin

编译完成后,所有的ipk包,所有的内核镜像文件都会在此
编译成对应的指令集
x86 gcc
arm arm-linux-gcc
mips mips-linux-gcc
在这里插入图片描述

15. staging_dl

1.1 存放build_dir文件中各类编译成功的软件,所以和build_dir中的目录 结构相同,最终编译存放编译结果的地方
、、
1.2 各类系统库,头文件等都在该文件下,在自行开发ipk时,编译过程中头文件,链接动态库,链接的静态库都会保存在该子文件下

16. tmp

编译过程的大量临时文件都会在此

17. logs

报错日志,提醒编译过程中产生的错误

Openwrt 系统微观结构

1. feeds.config.deafult
2. 	feed支持的类型:
		src-git		通过git的方式从后面的链接进行下载
		src-cpy		通过path进行拷贝(通过U盘更新,本地镜像站)
		src-bzr		通过bzr的方式从后面的链接进行下载
		src-link	创建一个数据源path的symlink
		src-svn		通过svn的方式从后面的链接进行下载
	标准语法:
src-git packages https://git.lede-project.org/feed/packages.git^cd5c448758f30868770b9ebf8b656c1a4211a240
src-git luci https://git.lede-project.org/project/luci.git^d3f0685d63c1291359dc5dd089c82fa1e150e0c6
src-git routing https://git.lede-project.org/feed/routing.git^d11075cd40a88602bf4ba2b275f72100ddcb4767
src-git telephony https://git.lede-project.org/feed/telephony.git^ac6415e61f147a6892fd2785337aec93ddc68fa9
1. 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  解析编译的	

.

  • 当按下make V=s -j4时,会执行下面toplevel.mk文件
prereq:: perpare-tmpinfo .config
	@make -r -s tmp/.prereq-build
	@make V=ss -r -s
prereq %:
	@make 	V=ss -r -s
	@make  -w -r world
目的为了生成prereq 和 world 这两个目标
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenWRT是一种针对嵌入式设备的Linux操作系统,旨在提供一个灵活、可定制的框架,使用户能够自定义其网络设备的功能和性能。OpenWRT的框架分析主要涉及其核心构架、软件包管理、配置系统以及安全特性等方面。 首先,OpenWRT框架的核心构架采用了Linux内核和一系列开源软件组件,以及由BusyBox提供的精简工具集。这些组件共同构成了OpenWRT的运行环境,为用户提供了基本的操作系统功能和工具。 其次,OpenWRT的软件包管理系统使用户可以方便地安装、升级和移除软件包,从而实现系统的定制化。用户可以通过opkg工具来管理软件包,也可以根据需要自行编译和定制软件包,以满足特定的功能需求。 此外,OpenWRT还提供了一个灵活的配置系统,用户可以通过web界面或者命令行工具对系统进行设置和管理。这使得用户可以根据实际需求对网络设备进行个性化配置,从而满足不同的应用场景。 最后,OpenWRT在安全特性方面也进行了一系列的设计和实现。它提供了防火墙、VPN、加密和认证等安全功能,同时支持网络流量监测和攻击检测等安全机制,以保障网络设备和数据的安全。 综上所述,OpenWRT框架分析主要是针对其核心构架、软件包管理、配置系统以及安全特性等方面进行分析,以便用户更好地理解和使用OpenWRT系统,并实现个性化定制和安全保障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值