--- /dev/null
+Subject: [PATCH] aufs-util: add tool concept to Makefile for cross compiling
+ purpose
+
+In a cross compilation environment, c2sh, c2tmac and ver need to be created first.
+Add a tools target to Makefile to allow for this.
+
+Upstream-Status: Pending
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 2f905ad..49c3cd5 100644
+--- a/Makefile
++++ b/Makefile
+@@ -85,7 +85,7 @@ aufs.5: aufs.in.5 c2tmac
+ chmod a-w $@
+
+ c2sh c2tmac ver: CC = ${HOSTCC}
+-.INTERMEDIATE: c2sh c2tmac ver
++tools: c2sh c2tmac ver
+
+ Install = install -o root -g root -p
+ install_sbin: File = auibusy auplink mount.aufs umount.aufs
+--
+1.7.9.5
+
--- /dev/null
+From 244863eca77fcaa1187884836c3e28d6b6d1504a Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@windriver.com>
+Date: Tue, 9 Apr 2013 18:50:34 -0700
+Subject: [PATCH] aufs-util: don't strip executables
+
+By default, aufs-util strips its binaries. This produces QA warnings
+as follows:
+
+ WARNING: File '/sbin/mount.aufs' from aufs-util was already stripped, this will prevent future debugging!
+ WARNING: File '/sbin/auplink' from aufs-util was already stripped, this will prevent future debugging!
+ WARNING: File '/sbin/umount.aufs' from aufs-util was already stripped, this will prevent future debugging!
+ WARNING: File '/sbin/auibusy' from aufs-util was already stripped, this will prevent future debugging!
+ WARNING: File '/usr/lib/libau.so.2.6' from aufs-util was already stripped, this will prevent future debugging!
+
+To prevent this, we remove -s from LDFLAGS.
+
+Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 2f905ad..e0c6dcd 100644
+--- a/Makefile
++++ b/Makefile
+@@ -56,7 +56,7 @@ all: ver_test ${Man} ${Bin} ${Etc}
+ ver_test: ver
+ ./ver
+
+-${Bin}: LDFLAGS += -static -s
++${Bin}: LDFLAGS += -static
+ ${Bin}: LDLIBS = -L. -lautil
+ ${BinObj}: %.o: %.c ${LibUtilHdr} ${LibUtil}
+
+--
+1.7.10.4
+
--- /dev/null
+diff --git a/Makefile b/Makefile
+index 2f905ad..31a1558 100644
+--- a/Makefile
++++ b/Makefile
+@@ -56,8 +56,8 @@ all: ver_test ${Man} ${Bin} ${Etc}
+ ver_test: ver
+ ./ver
+
+-${Bin}: LDFLAGS += -static -s
+-${Bin}: LDLIBS = -L. -lautil
++# ${Bin}: LDFLAGS += -static -s
++${Bin}: LDLIBS = -L. -Wl,-Bstatic -lautil -Wl,-Bdynamic
+ ${BinObj}: %.o: %.c ${LibUtilHdr} ${LibUtil}
+
+ ${LibUtilObj}: %.o: %.c ${LibUtilHdr}
--- /dev/null
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
+ * This program, aufs is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __AUFS_TYPE_H__
+#define __AUFS_TYPE_H__
+
+#define AUFS_NAME "aufs"
+
+#ifdef __KERNEL__
+/*
+ * define it before including all other headers.
+ * sched.h may use pr_* macros before defining "current", so define the
+ * no-current version first, and re-define later.
+ */
+#define pr_fmt(fmt) AUFS_NAME " %s:%d: " fmt, __func__, __LINE__
+#include <linux/sched.h>
+#undef pr_fmt
+#define pr_fmt(fmt) AUFS_NAME " %s:%d:%s[%d]: " fmt, \
+ __func__, __LINE__, current->comm, current->pid
+#else
+#include <stdint.h>
+#include <sys/types.h>
+#endif /* __KERNEL__ */
+
+#include <linux/limits.h>
+
+#ifndef __user
+#define __user
+#endif
+
+#define AUFS_VERSION "3.2-20120109"
+
+/* todo? move this to linux-2.6.19/include/magic.h */
+#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
+
+/* ---------------------------------------------------------------------- */
+
+#ifdef CONFIG_AUFS_BRANCH_MAX_127
+typedef int8_t aufs_bindex_t;
+#define AUFS_BRANCH_MAX 127
+#else
+typedef int16_t aufs_bindex_t;
+#ifdef CONFIG_AUFS_BRANCH_MAX_511
+#define AUFS_BRANCH_MAX 511
+#elif defined(CONFIG_AUFS_BRANCH_MAX_1023)
+#define AUFS_BRANCH_MAX 1023
+#elif defined(CONFIG_AUFS_BRANCH_MAX_32767)
+#define AUFS_BRANCH_MAX 32767
+#endif
+#endif
+
+#ifdef __KERNEL__
+#ifndef AUFS_BRANCH_MAX
+#error unknown CONFIG_AUFS_BRANCH_MAX value
+#endif
+#endif /* __KERNEL__ */
+
+/* ---------------------------------------------------------------------- */
+
+#define AUFS_FSTYPE AUFS_NAME
+
+#define AUFS_ROOT_INO 2
+#define AUFS_FIRST_INO 11
+
+#define AUFS_WH_PFX ".wh."
+#define AUFS_WH_PFX_LEN ((int)sizeof(AUFS_WH_PFX) - 1)
+#define AUFS_WH_TMP_LEN 4
+/* a limit for rmdir/rename a dir */
+#define AUFS_MAX_NAMELEN (NAME_MAX \
+ - AUFS_WH_PFX_LEN * 2 /* doubly whiteouted */\
+ - 1 /* dot */\
+ - AUFS_WH_TMP_LEN) /* hex */
+#define AUFS_XINO_FNAME "." AUFS_NAME ".xino"
+#define AUFS_XINO_DEFPATH "/tmp/" AUFS_XINO_FNAME
+#define AUFS_XINO_TRUNC_INIT 64 /* blocks */
+#define AUFS_XINO_TRUNC_STEP 4 /* blocks */
+#define AUFS_DIRWH_DEF 3
+#define AUFS_RDCACHE_DEF 10 /* seconds */
+#define AUFS_RDCACHE_MAX 3600 /* seconds */
+#define AUFS_RDBLK_DEF 512 /* bytes */
+#define AUFS_RDHASH_DEF 32
+#define AUFS_WKQ_NAME AUFS_NAME "d"
+#define AUFS_MFS_DEF_SEC 30 /* seconds */
+#define AUFS_MFS_MAX_SEC 3600 /* seconds */
+#define AUFS_PLINK_WARN 100 /* number of plinks */
+
+/* pseudo-link maintenace under /proc */
+#define AUFS_PLINK_MAINT_NAME "plink_maint"
+#define AUFS_PLINK_MAINT_DIR "fs/" AUFS_NAME
+#define AUFS_PLINK_MAINT_PATH AUFS_PLINK_MAINT_DIR "/" AUFS_PLINK_MAINT_NAME
+
+#define AUFS_DIROPQ_NAME AUFS_WH_PFX ".opq" /* whiteouted doubly */
+#define AUFS_WH_DIROPQ AUFS_WH_PFX AUFS_DIROPQ_NAME
+
+#define AUFS_BASE_NAME AUFS_WH_PFX AUFS_NAME
+#define AUFS_PLINKDIR_NAME AUFS_WH_PFX "plnk"
+#define AUFS_ORPHDIR_NAME AUFS_WH_PFX "orph"
+
+/* doubly whiteouted */
+#define AUFS_WH_BASE AUFS_WH_PFX AUFS_BASE_NAME
+#define AUFS_WH_PLINKDIR AUFS_WH_PFX AUFS_PLINKDIR_NAME
+#define AUFS_WH_ORPHDIR AUFS_WH_PFX AUFS_ORPHDIR_NAME
+
+/* branch permissions and attributes */
+#define AUFS_BRPERM_RW "rw"
+#define AUFS_BRPERM_RO "ro"
+#define AUFS_BRPERM_RR "rr"
+#define AUFS_BRRATTR_WH "wh"
+#define AUFS_BRWATTR_NLWH "nolwh"
+
+/* ---------------------------------------------------------------------- */
+
+/* ioctl */
+enum {
+ /* readdir in userspace */
+ AuCtl_RDU,
+ AuCtl_RDU_INO,
+
+ /* pathconf wrapper */
+ AuCtl_WBR_FD,
+
+ /* busy inode */
+ AuCtl_IBUSY
+};
+
+/* borrowed from linux/include/linux/kernel.h */
+#ifndef ALIGN
+#define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a)-1)
+#define __ALIGN_MASK(x, mask) (((x)+(mask))&~(mask))
+#endif
+
+/* borrowed from linux/include/linux/compiler-gcc3.h */
+#ifndef __aligned
+#define __aligned(x) __attribute__((aligned(x)))
+#endif
+
+#ifdef __KERNEL__
+#ifndef __packed
+#define __packed __attribute__((packed))
+#endif
+#endif
+
+struct au_rdu_cookie {
+ uint64_t h_pos;
+ int16_t bindex;
+ uint8_t flags;
+ uint8_t pad;
+ uint32_t generation;
+} __aligned(8);
+
+struct au_rdu_ent {
+ uint64_t ino;
+ int16_t bindex;
+ uint8_t type;
+ uint8_t nlen;
+ uint8_t wh;
+ char name[0];
+} __aligned(8);
+
+static inline int au_rdu_len(int nlen)
+{
+ /* include the terminating NULL */
+ return ALIGN(sizeof(struct au_rdu_ent) + nlen + 1,
+ sizeof(uint64_t));
+}
+
+union au_rdu_ent_ul {
+ struct au_rdu_ent __user *e;
+ uint64_t ul;
+};
+
+enum {
+ AufsCtlRduV_SZ,
+ AufsCtlRduV_End
+};
+
+struct aufs_rdu {
+ /* input */
+ union {
+ uint64_t sz; /* AuCtl_RDU */
+ uint64_t nent; /* AuCtl_RDU_INO */
+ };
+ union au_rdu_ent_ul ent;
+ uint16_t verify[AufsCtlRduV_End];
+
+ /* input/output */
+ uint32_t blk;
+
+ /* output */
+ union au_rdu_ent_ul tail;
+ /* number of entries which were added in a single call */
+ uint64_t rent;
+ uint8_t full;
+ uint8_t shwh;
+
+ struct au_rdu_cookie cookie;
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+struct aufs_wbr_fd {
+ uint32_t oflags;
+ int16_t brid;
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+struct aufs_ibusy {
+ uint64_t ino, h_ino;
+ int16_t bindex;
+} __aligned(8);
+
+/* ---------------------------------------------------------------------- */
+
+#define AuCtlType 'A'
+#define AUFS_CTL_RDU _IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu)
+#define AUFS_CTL_RDU_INO _IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu)
+#define AUFS_CTL_WBR_FD _IOW(AuCtlType, AuCtl_WBR_FD, \
+ struct aufs_wbr_fd)
+#define AUFS_CTL_IBUSY _IOWR(AuCtlType, AuCtl_IBUSY, struct aufs_ibusy)
+
+#endif /* __AUFS_TYPE_H__ */
-DESCRIPTION = "userspace utils for aufs2"
-LICENSE = "GPL"
-DEPENDS = "virtual/kernel"
-PR = "r1"
+SUMMARY = "Tools for managing AUFS mounts"
+SECTION = "base"
+HOMEPAGE = "http://aufs.sourceforge.net/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=892f569a555ba9c07a568a7c0c4fa63a"
-PACKAGE_ARCH = "${MACHINE_ARCH}"
+# DEPENDS = "${PN}-native"
+# DEPENDS_virtclass-native = ""
-SRCREV = "f35ba2292fe40aa94aa83713e0b2719f35a25768"
-SRC_URI = "git://git.c3sl.ufpr.br/pub/scm/aufs/aufs2-util.git;protocol=http"
+SRCREV = "d7f91849723b1f5203c11babe865594ac4b485c3"
+SRC_URI = "git://git.code.sf.net/p/aufs/aufs-util;protocol=git;branch=aufs3.2 \
+# file://aufs-util-don-t-strip-executables.patch;patch=1 \
+ file://aufs-util-use-dynamic-linking.patch;patch=1 \
+ file://aufs-util-add-tool-concept-to-Makefile-for-cross-com.patch;patch=1 \
+ file://aufs_type.h \
+"
+
+PV = "git+3.2+${SRCPV}"
S = "${WORKDIR}/git"
-EXTRA_OEMAKE = "KDIR=${STAGING_KERNEL_DIR} DESTDIR=${D}"
+do_configure_append () {
+ install -d ${S}/include/linux/
+ cp ${WORKDIR}/aufs_type.h ${S}/include/linux/
+}
+
+do_configure_append_virtclass-target () {
+ for i in ver c2sh c2tmac; do
+ cp ${STAGING_BINDIR_NATIVE}/aufs-util-${PV}/$i ./
+ done
+}
do_compile () {
- # c2tmac and c2sh need to be BUILD-arch
- ${BUILD_CC} -I${STAGING_KERNEL_DIR}/include c2tmac.c -o c2tmac
- ${BUILD_CC} -I${STAGING_KERNEL_DIR}/include c2sh.c -o c2sh
- oe_runmake
+ for i in ver c2sh c2tmac; do
+ ${BUILD_CC} -I${S}/include -I${S}/libau $i.c -o $i
+ done
+
+ oe_runmake CPPFLAGS="-I${S}/include -I${S}/libau"
+}
+
+do_compile_virtclass-native () {
+ oe_runmake tools CPPFLAGS="-I${S}/include -I${S}/libau"
}
do_install () {
- install -d ${D}/${base_sbindir}
- install -m 0755 mount.aufs umount.aufs auplink ${D}/${base_sbindir}
- install -d ${D}/${base_bindir}
- install -m 0755 auchk aubrsync ${D}/${base_bindir}
- install -d ${D}/${sysconfdir}/default
- install -m 0644 -T etc_default_aufs ${D}/${sysconfdir}/default/aufs
+ oe_runmake 'DESTDIR=${D}' Install='install -p' install_sbin install_ubin install_etc
}
+
+do_install_virtclass-native () {
+ install -d ${D}${bindir}/aufs-util-${PV}
+ for i in ver c2sh c2tmac; do
+ install -m 755 $i ${D}${bindir}/aufs-util-${PV}/$i
+ done
+}
+
+do_stage_virtclass-native () {
+}
+
+# RRECOMMENDS_${PN} += "kernel-module-aufs"
+
+# BBCLASSEXTEND = "native"
+++ /dev/null
-DESCRIPTION = "Aufs is a stackable unification filesystem such as Unionfs, which unifies several directories and provides a merged single directory."
-HOMEPAGE = "http://aufs.sourceforge.net/"
-LICENSE = "GPL"
-PV = "cvs${SRCDATE}"
-
-RSUGGESTS_${PN} = "${PN}-tools"
-
-inherit module
-
-S = "${WORKDIR}/aufs"
-
-SRC_URI = "cvs://anonymous@aufs.cvs.sourceforge.net/cvsroot/aufs;module=aufs;date=${SRCDATE}"
-
-TARGET_CC_ARCH += "${LDFLAGS}"
-
-EXTRA_OEMAKE = "KDIR=${STAGING_KERNEL_DIR} -f local.mk"
-
-# We need to check the architecture and the kernel version to
-# configure properly lokal.mk. We ignore the export CONFIG_AUFS_STAT option.
-# If you want to have CONFIG_AUFS_STAT enabled you have to add some other ARCH checks.
-# Debian does not enable CONFIG_AUFS_STAT for arm.
-# We disable CONFIG_AUFS_SYSAUFS for arm because arm does not know about cmpxchg.
-# If you want this feature enabled you have to define it.
-# I suggest you to read http://osdir.com/ml/linux.kernel.tracing/2006-12/msg00020.html
-
-do_configure() {
- K_VERSION=$(echo ${KERNEL_VERSION} | awk 'BEGIN{FS="."}{print $3}')
- cd ${S}
- if [ $K_VERSION -ge 24 ] ; then
- sed -i 's/CONFIG_AUFS_FAKE_DM\ =\ y/CONFIG_AUFS_FAKE_DM\ =/g' local.mk
- fi
- if [ $K_VERSION -eq 25 ] || [ $ARCH = "arm" ] ; then
- sed -i 's/CONFIG_AUFS_SYSAUFS\ =\ y/CONFIG_AUFS_SYSAUFS\ =/g' local.mk
- fi
-}
-
-do_compile_prepend() {
-#compile binaries for host
- cd ${S}/util
- BRANCH_MAX=$(fgrep CONFIG_AUFS_BRANCH_MAX ../local.mk | grep y | cut -d " " -f 2)
- ${BUILD_CC} -D ${BRANCH_MAX} c2tmac.c ../include/linux/aufs_type.h -o c2tmac
- ${BUILD_CC} -D ${BRANCH_MAX} c2sh.c ../include/linux/aufs_type.h -o c2sh
- cd ${S}
-}
-
-do_compile(){
- LDFLAGS=""
- oe_runmake
-}
-
-do_install() {
- install -d ${D}/${sbindir}
- install -m 0500 mount.aufs umount.aufs auplink aulchown ${D}/${sbindir}
- install -d ${D}/etc/default
- echo FLUSH=ALL > ${D}/etc/default/auplink
- install -d ${D}/${base_libdir}/modules/${KERNEL_VERSION}/drivers/extra/
- install -m 0644 aufs.ko ${D}/${base_libdir}/modules/${KERNEL_VERSION}/drivers/extra/
-}
-
-FILES_${PN} = "/lib/modules"
-PACKAGES += "${PN}-tools"
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-FILES_${PN}-tools = "${sbindir} /etc/default/auplink"
+++ /dev/null
-#!/bin/sh
-
-DESC="AUFS2 union file system module."
-NAME="aufs2"
-
-d_stop() {
- if `grep -q aufs /proc/modules` ; then
- rmmod aufs
- fi
-}
-
-d_start() {
- insmod $(busybox find /lib/modules/$(uname -r) -name "aufs.ko")
-}
-
-case "$1" in
- start)
- echo -n "Starting $DESC: $NAME"
- d_start
- echo "."
- ;;
- stop)
- echo -n "Stopping $DESC: $NAME"
- d_stop
- echo "."
- ;;
- restart|force-reload)
- echo -n "Restarting $DESC: $NAME"
- d_stop
- sleep 1
- d_start
- echo "."
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|force-reload}" >&2
- exit 1
- ;;
-esac
-
-exit 0