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

在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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

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