OpenWRT rootfs 的生成过程[通俗易懂]

OpenWRT rootfs 的生成过程[通俗易懂]在include目录中有一个rootfs.mk,里面主要是:1.定义了opkg=2.定义了prepare_rootfsopkg=省略TARGET_DIR_ORIG:=$(TARGET_ROOTFS_DIR)/root.orig-$(BOARD)defineprepare_rootfs…省略…rootfs.mk被以下两个…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在include目录中有一个 rootfs.mk ,里面主要是:
1.定义了 opkg =
2.定义了 prepare_rootfs

opkg = 省略
TARGET_DIR_ORIG := $(TARGET_ROOTFS_DIR)/root.orig-$(BOARD)
define prepare_rootfs
  ...省略...

rootfs.mk 被以下两个文件使用

root@localhost:/home2/lql/openwrt# grep "rootfs\.mk" include/  package/ scripts/ feeds/  -rn
include/image.mk:22:include $(INCLUDE_DIR)/rootfs.mk
package/Makefile:11:include $(INCLUDE_DIR)/rootfs.mk

这里我们看 package/Makefile,里面有这么一段:

$(curdir)/install: $(TMP_DIR)/.build $(curdir)/merge $(if $(CONFIG_TARGET_PER_DEVICE_ROOTFS),$(curdir)/merge-index)
	- find $(STAGING_DIR_ROOT) -type d | $(XARGS) chmod 0755
	rm -rf $(TARGET_DIR) $(TARGET_DIR_ORIG)
	mkdir -p $(TARGET_DIR)/tmp
	$(call opkg,$(TARGET_DIR)) install \
		$(call opkg_package_files,$(shell cat $(PACKAGE_INSTALL_FILES) 2>/dev/null))
	@for file in $(PACKAGE_INSTALL_FILES); do \
		[ -s $$file.flags ] || continue; \
		for flag in `cat $$file.flags`; do \
			$(call opkg,$(TARGET_DIR)) flag $$flag `cat $$file`; \
		done; \
	done || true

	$(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG)

	$(call prepare_rootfs,$(TARGET_DIR),$(TOPDIR)/files)

这里面关键的地方是

$(call opkg,$(TARGET_DIR)) install \
		$(call opkg_package_files,$(shell cat $(PACKAGE_INSTALL_FILES) 2>/dev/null))

回头看rootfs.mk 里对 opkg 的定义

opkg = \
  IPKG_NO_SCRIPT=1 \
  IPKG_INSTROOT=$(1) \
  TMPDIR=$(1)/tmp \
  $(STAGING_DIR_HOST)/bin/opkg \
	--offline-root $(1) \
	--force-postinstall \
	--add-dest root:/ \
	--add-arch all:100 \
	--add-arch $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(BOARD)):200

最终展开就是

//类似于
staging_dir/host/bin/opkg  --offline-root root-sunxi    install  *.ipk

这条命令作用就是将*.ipk 文件安装到 root-sunxi 目录下
在这里插入图片描述
最终root-sunxi 目录下会有这文件
在这里插入图片描述
TODO
:可继续研究一下OpenWRT 的 Makefile

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188505.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • golang永久激活_在线激活

    (golang永久激活)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月31日
    363
  • PHP工厂模式学习「建议收藏」

    PHP工厂模式学习「建议收藏」PHP工厂模式学习目录PHP工厂模式学习介绍引入定义参与者工厂方法模式实例工厂方法模式的优点工厂方法模式缺点适用环境小结介绍工厂方法模式,可以更好的处理客户的需求变化。引入简单工厂模式把实例化对象的工作推迟到了专门的工厂类中。但是当客户需求出现变化的时候,我们不仅得增加新的类和修改工厂类以适应客户的需求,这是设计模式所不允许的。工厂方法模式应运而生。解决思路:那里变化,封装哪里

    2022年7月25日
    10
  • android m 滑动解锁,滑动解锁Slideunlock[通俗易懂]

    android m 滑动解锁,滑动解锁Slideunlock[通俗易懂]滑动解锁(Slideunlock)在之前的塞班机上可谓光茫四射,惹得一身荣耀,如今登入android市场,依然备受关注,多种解锁截屏法方式,满足不同人的需求。软件介绍滑动解锁(Slideunlock),一款仿Iphone又超越Iphone解锁和加锁的实用软件,华丽百变的UI,多种感应器加锁解锁功能,是您可以做到无需触碰手机即可轻松完成加锁或解锁操作。此软件的Symbian版曾流行国内外,一度在No…

    2022年6月15日
    41
  • 浅析ASP.NET的IIS映射

    浅析ASP.NET的IIS映射

    2021年8月6日
    70
  • Python中“取整”的各种问题[通俗易懂]

    Python向上取整的算法一、初衷:  有时候我们分页展示数据的时候,需要计算页数。一般都是向上取整,例如counts=205pageCouts=20,pages=11页。一般的除法只是取整数部分,达不到要求。二、方法:1、通用除法:  UP(A/B)=int((A+B-1)/B)  取临界值,计算下A+B-1的范围就OK.2、Python除法:…

    2022年4月17日
    92
  • CSS设置超链接样式常用

    CSS设置超链接样式常用伪类名称 含义 示例 a:link 未单击访问时超链接样式 a:link{color:#9ef5f9;} a:visited 单击访问后超链接样式 a:visited{color:#333;} a:hover 鼠标悬浮其上的超链接样式 a:hover{color:#…

    2022年7月19日
    13

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号