asuswrt-merlin.ng/release/src-rt-5.04axhnd.675x/targets/buildFS

652 lines
26 KiB
Bash
Executable file

#!/bin/bash
export LD_LIBRARY_PATH=$HOSTTOOLS_DIR/libelf/lib:$LD_LIBRARY_PATH
source $KERNEL_DIR/.config
TARGETS_DIR=`pwd`
BUILD_DIR=$TARGETS_DIR/..
if [ "$MOD_DIR" == "" ] ; then
MOD_DIR=$PROFILE/modules
fi
if [ "$FSSRC_DIR" == "" ]; then
FSSRC_DIR=./fs.src
fi
if [ "$INSTALL_DIR" == "" ]; then
INSTALL_DIR=./$PROFILE/fs.install
fi
ROOTFS=$PROFILE/fs
# Create file system dir
if [ -L $ROOTFS ]; then
rm -rf $ROOTFS/*
else
rm -rf $ROOTFS
mkdir $ROOTFS
fi
chmod 777 $ROOTFS
# Copy files onto root file system
echo "Creating target root file system..."
cp -av $FSSRC_DIR/* $ROOTFS
# Update mdev.conf with 'ignore' entries for proprietary drivers
echo "Updating mdev.conf"
chmod 0644 $ROOTFS/rom/etc/mdev.conf
grep /dev $ROOTFS/rom/etc/make_static_devnodes.sh | cut -d' ' -f 2 | cut -d'/' -f 3 | awk '{print $1 " " "0:0 666 !"}' >> $ROOTFS/rom/etc/mdev.conf
# Remove all svn metadata files
find $ROOTFS -name ".svn" -exec rm -rf '{}' \;
bfiles="cms_entity_info.d init.d ld.so.cache ld.so.conf rc3.d rdpa_init.sh wlan openssl.cnf"
mkdir -p ${ROOTFS}/tmp/etc
(cd ${ROOTFS} && rm -rf etc && ln -sf tmp/etc etc)
for f in $bfiles
do
echo "ln -sf /rom/etc/$f /etc/$f"
(cd ${ROOTFS} && rm -rf tmp/etc/$f && ln -sf /rom/etc/$f tmp/etc/$f)
done
# convert Snn*.symlink and Knn*.symlink files to real symlinks
flist=`ls ${ROOTFS}/rom/etc/rc3.d/S*.symlink ${ROOTFS}/rom/etc/rc3.d/K*.symlink 2> /dev/null`
for f in $flist
do
f=$(basename $f)
numbase=${f%.*}
namebase=`echo $numbase | cut -c 4-`
(cd ${ROOTFS}/rom/etc/rc3.d; rm -f ${numbase}.symlink; ln -s ../init.d/${namebase}.sh ${numbase})
done
# Remove unneeded (wlan prebuilt) files
find $INSTALL_DIR -name "*_saved-*" | xargs rm -fv
# Copy over all files to ROOTFS
rsync -av --exclude="/lib" $INSTALL_DIR/* $ROOTFS
# Setup lib directories
mkdir $ROOTFS/lib
if [ "$ARCH" == "arm64" ]; then
# In aarch64 build, all 64-bit libs are in /lib, but the
# default search path for Dynamic Linker is /lib64
rsync -av --exclude="/public" --exclude="/private" --exclude="/gpl" --exclude="/arm" $INSTALL_DIR/lib/* $ROOTFS/lib64
cp -av $INSTALL_DIR/lib/public/* $ROOTFS/lib64
cp -av $INSTALL_DIR/lib/private/* $ROOTFS/lib64
cp -av $INSTALL_DIR/lib/gpl/* $ROOTFS/lib64
# If there are 32-bit libs present in 64-bit build
if [ -d $INSTALL_DIR/lib/arm ] ; then
cp -av $INSTALL_DIR/lib/arm/* $ROOTFS/lib
fi
# Move all loaders to /lib, thats where linux looks for them
mv $ROOTFS/lib64/ld* $ROOTFS/lib
else
rsync -av --exclude="/public" --exclude="/private" --exclude="/gpl" --exclude="/aarch64" $INSTALL_DIR/lib/* $ROOTFS/lib
cp -av $INSTALL_DIR/lib/public/* $ROOTFS/lib
cp -av $INSTALL_DIR/lib/private/* $ROOTFS/lib
cp -av $INSTALL_DIR/lib/gpl/* $ROOTFS/lib
# If there are 64-bit libs present in 32-bit build
if [ -d $INSTALL_DIR/lib/aarch64 ] ; then
mkdir $ROOTFS/lib64
cp -av $INSTALL_DIR/lib/aarch64/* $ROOTFS/lib64
fi
fi
if [ "$BUILD_OPEN_PLATFORM" == "y" ]; then
mkdir -p $ROOTFS/lib/ops
ln -s /local/modsw/tr157du/Broadcom/OPS_HOSTEE/lib $ROOTFS/lib/ops/plugins
fi
EXECSTACK=`which execstack`
if [ "x$EXECSTACK" == "x" ]; then
EXECSTACK=$HOSTTOOLS_DIR/prelink/src/execstack
fi
if [ "$BUILD_DISABLE_EXEC_STACK" == "y" ]; then
#clear execute bit on binaries
rm .exestack_error
find $INSTALL_DIR -type f -perm /u=x,g=x,o=x -print |(while read filename; do\
IS_ELF=$(dd if=$filename count=3 skip=1 bs=1 2> /dev/null); \
if [ "x${IS_ELF}" == "xELF" ]; then\
E=$($EXECSTACK -c $filename); \
if [ "x$?" == "x127" ]; then \
echo "Fatal error " . $E;\
touch .exestack_error
exit 1;\
fi;\
fi;\
done;\
)
if [ -f .exestack_error ]; then
rm .exestack_error
exit 1
fi
fi
# Create directories as needed
mkdir $ROOTFS/dev
#mkdir $ROOTFS/mnt
mkdir $ROOTFS/sys
mkdir $ROOTFS/proc
mkdir $ROOTFS/var
mkdir $ROOTFS/rom/etc/adsl
mkdir $ROOTFS/data
cp -av $BRCMDRIVERS_DIR/broadcom/char/adsl/bcm9$BRCM_CHIP/*.bin $ROOTFS/rom/etc/adsl
# debugfs
if [ "$BUILD_DEBUG_TOOLS" == "y" ] ; then
chmod +w $ROOTFS/rom/etc/fstab
echo -e "debugfs\t/sys/kernel/debug\tdebugfs\tnofail\t0\t0\n" >> $ROOTFS/rom/etc/fstab
chmod -w $ROOTFS/rom/etc/fstab
rm -rf $ROOTFS/sys/kernel/debug
mkdir -p $ROOTFS/sys/kernel/debug
rm -f $ROOTFS/debug
ln -s sys/kernel/debug $ROOTFS/debug
fi
# Update kernel directory based on kernel:
sed -i "s|^KERNELVER=_set_by_buildFS_$|KERNELVER=$LINUX_VER_STR|" $ROOTFS/rom/etc/init.d/*.sh;
if [ "$BRCM_KERNEL_OPROFILE" == "y" ] ; then
mkdir -p $ROOTFS/dev/oprofile
fi
# this tells busybox to set the core rlimit to unlimited, thus allowing
# apps to dump their core when they crash
if [ "$CONFIG_ELF_CORE" == "y" ]; then
touch $ROOTFS/.init_enable_core
fi
# copy our top level PROFILE file and image version to filesystem
# We use some of the profile settings to configure the kernel through /proc settings
echo "Include a copy of PROFILE file in system image"
rm -f $ROOTFS/rom/etc/$PROFILE
cp $PROFILE_DIR/$PROFILE $ROOTFS/rom/etc
ln -s $PROFILE $ROOTFS/rom/etc/build_profile
echo $IMAGE_VERSION > $ROOTFS/rom/etc/image_version
cp $BUILD_DIR/patch.version $ROOTFS/rom/etc
DEFAULTCFG=`echo $BRCM_DEFAULTCFG | tr -d '"'`
if [ ! -z $DEFAULTCFG ]; then
if [[ $DEFAULTCFG != /* ]]; then
DEFAULTCFG=$DEFAULTCFG_DIR/$DEFAULTCFG
fi
if [ -f "$DEFAULTCFG" ]; then
echo "Using $DEFAULTCFG as default config"
mkdir -p $ROOTFS/rom/etc
cp -v $DEFAULTCFG $ROOTFS/rom/etc/default.cfg && chmod 444 $ROOTFS/rom/etc/default.cfg || exit 1
else
echo
echo " No default run-time config file called $DEFAULTCFG"
echo " Check your profile setting!"
echo
exit 1
fi
fi
#
# The logic to test BRCM_CERT_FILE must be different than the logic to test
# BRCM_DEFAULTCFG (above) because BRCM_CERT_FILE can have 3 possible values:
# 1. If user does not select TR69_BCM_SSL, then BRCM_CERT_FILE=
# 2. If user selects TR69_BCM_SSL, but does not specify a cert file, then BRCM_CERT_FILE=""
# 3. If user selects TR69_BMC_SSL, and specifies a cert file, then BRCM_CERT_FILE="somefilename"
#
# The elif line tests for case 1 first, so that if BRCM_CERT_FILE is blank,
# the first condition will be false and the second condition [ $BRCM_CERT_FILE != '""' ]
# will not be tested. That second condition will cause bash to complain if BRCM_CERT_FILE is blank.
#
DEFAULT_CERT_FILE=`echo $DEFAULTCFG_DIR/$BRCM_CERT_FILE|sed -e 's/\"//g'`
if [ -f "$DEFAULT_CERT_FILE" ]; then
cp -v $DEFAULT_CERT_FILE $ROOTFS/rom/etc/acscert.cacert; chmod a+r $ROOTFS/rom/etc/acscert.cacert
elif [ "X$BRCM_CERT_FILE" != "X" ] && [ $BRCM_CERT_FILE != '""' ]; then
echo
echo " No certificate file called $BRCM_CERT_FILE in $DEFAULTCFG_DIR"
echo " Check your profile setting!"
exit 1
else
echo
fi
# Create symbolic links
mkdir $ROOTFS/dev/misc
ln -s /var/fuse $ROOTFS/dev/misc/fuse
ln -s /var/fuse $ROOTFS/dev/fuse
ln -s /var/mtab $ROOTFS/etc/mtab
ln -s /var/sysmsg $ROOTFS/etc/sysmsg
ln -s /var/passwd $ROOTFS/etc/passwd
ln -s /var/group $ROOTFS/etc/group
ln -s /var/ppp/pppmsg $ROOTFS/etc/pppmsg
ln -s /var/fyi/sys/dns $ROOTFS/etc/resolv.conf
ln -s /var/fyi/sys/gateway $ROOTFS/etc/gateway.conf
ln -s /var/udhcpd/udhcpd.conf $ROOTFS/etc/udhcpd.conf
ln -s /var/udhcpd/udhcpd.leases $ROOTFS/etc/udhcpd.leases
ln -s /var/TZ $ROOTFS/etc/TZ
ln -s /var/timezone $ROOTFS/etc/timezone
ln -s /var/localtime $ROOTFS/etc/localtime
ln -s /var/dms.conf $ROOTFS/etc/dms.conf
ln -s /var/ipsec/ipsec.conf $ROOTFS/etc/ipsec.conf
ln -s /var/ipsec/racoon.conf $ROOTFS/etc/racoon.conf
ln -s /var/ipsec/psk.txt $ROOTFS/etc/psk.txt
ln -s /var/iproute2/rt_tables $ROOTFS/etc/iproute2/rt_tables
#ln -s /var/tmp $ROOTFS/tmp
ln -s /var/samba $ROOTFS/etc/samba
#ln -s /data $ROOTFS/usr/local/data
if [ "$BUILD_DBUS" == "y" ]; then
ln -s /var/dbus-1/system.d $ROOTFS/share/dbus-1/system.d
fi
if [ -x $PROFILE/special-buildFS ]; then
$PROFILE/special-buildFS
fi
# Copy proprietary binaries if any
FSBIN=`ls $TARGETS_DIR/fs.bin|wc -l`
if [ $FSBIN != 0 ]; then
echo "Copying proprietary binaries..."
cd $TARGETS_DIR
cp -avf fs.bin/* $ROOTFS
fi
# Copy 3rdParty supplied .ko onto dummy .ko
if [ "$BRCM_DRIVER_ISDN" == "m" ] ; then
echo "Copying 3rdParty kernel objects (.ko) ..."
eval "find $TARGETS_DIR/$ROOTFS/../modules/lib/modules/. -name '*isdn.ko' | xargs cp -f $BRCMDRIVERS_DIR/broadcom/char/isdn/bcm9$BRCM_CHIP/3rdParty/*isdn.ko_3rdParty "
fi
if [ -d $ROOTFS/opt/modules ]; then
pushd $ROOTFS/opt/modules && for f in *.ko.save; do mv "$f" "${f%.ko.save}.ko"; done
popd
fi
cd $MOD_DIR
kd=${LINUX_VER_STR}
mkdir -p lib/modules/${kd}/extra
#go through every directory other than the lib/modules/${LINUX_VER_STR}
for dir in `ls lib/modules/ |grep -v ${kd}`
do
for file in `find lib/modules/${dir} -type f`
do
mv $file lib/modules/${kd}/extra/
done
rm -rf lib/modules/$dir
done
#some modules are built with full build path (e.g. adsl, wl), treat them diferently
bd=$(realpath ${BUILD_DIR})
for file in `find lib/modules/${kd}/kernel/${bd}/ -type f -name \*.ko`
do
mv $file lib/modules/${kd}/extra/
done
if [ ! "x${bd}" == "x" ]; then
rm -rf lib/modules/${kd}/kernel/${bd}/
fi
cp -a lib $TARGETS_DIR/$ROOTFS/.
if [ "$CONFIG_BCM_UBUSCAP" == "y" ]; then
# copy UBUSCAP control script
cp -avf $BRCMDRIVERS_DIR/broadcom/char/ubuscap/impl$CONFIG_BCM_UBUSCAP_IMPL/ubcap_$BRCM_CHIP.sh $TARGETS_DIR/$ROOTFS/opt/scripts/ubcap
fi
#DMfiles="bin etc lib sbin share tmp usr include doc"
#for f in $DMfiles
#do
# echo "ln -sf /tmp/opt/$f opt/$f"
# (cd $TARGETS_DIR/$ROOTFS && ln -sf /tmp/opt/$f opt/$f)
#done
if [ "$KSTRIP" != "/bin/touch" ]; then
# Stripping unneeded module symbols only when strip is "enabled"
echo "Stripping kernel modules..."
find $TARGETS_DIR/$ROOTFS/lib/modules -name "*.ko"
if [ "$CONFIG_KALLSYMS" == "y" ]; then
#if KALLSYMS is enabled only strip debug symbols from all modules, this helps
#to retain symbols of static functions
eval "find $TARGETS_DIR/$ROOTFS/lib/modules -name '*.ko' |xargs $KSTRIP --strip-debug"
else
#Modules that need parameters cannot be stripped
eval "find $TARGETS_DIR/$ROOTFS/lib/modules -name '*.ko' ! -name 'ip*.ko' |xargs $KSTRIP --strip-unneeded"
# However do strip debug symbols, in case debug symbols are included
eval "find $TARGETS_DIR/$ROOTFS/lib/modules -name 'ip*.ko' |xargs $KSTRIP --strip-debug"
fi
fi
if [ -f $TARGETS_DIR/$PROFILE/filesystem.tgz ]
then
echo "consumer build -- not dynamically generating bcm-base-drivers.sh"
else
cat $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.head > $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
cat $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.list | ( while IFS= read -r driver_line
do
read a b c <<< $driver_line
if echo $a | egrep -q '^\s*(#.*)?$'
then
if echo $a | egrep -q '^\s*(#KP:.*)?$'
then
echo "${driver_line:4}" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
else
echo "$a $b" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
fi
else
if echo $a | egrep -q '^-!'
then
eval v=\$${a:2}
elif echo $a | egrep -q '^-'
then
eval v=\$${a:1}
if [ -z "$v" ]
then
v=y
else
v=
fi
fi
if echo $a | egrep -q '^-'
then
echo "considering $a for $b $c"
if [ -z "$v" ]
then
echo "passed"
a=$b
b=$c
c=
else
echo "skipped"
a=NEVER
fi
fi
# Special insmod needed for rdpa/rdpa_prv ko depend on rdpa_prv existence and pspctl
if echo $a | egrep -q 'extra/rdpa.ko'
then
if test -e $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/extra/rdpa.ko || test -e $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/extra/rdpa_prv.ko
then
echo -e "if test -e /lib/modules/$LINUX_VER_STR/extra/rdpa_prv.ko\nthen" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo -e " if echo \$(/bin/pspctl dump OperationMode) | grep -q 'FC'\n then" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo -e " insmod /lib/modules/$LINUX_VER_STR/extra/rdpa.ko $b $c\n echo 'FC operation mode loaded!'" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo " else" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo -e " insmod /lib/modules/$LINUX_VER_STR/extra/rdpa_prv.ko $b $c\n echo 'Provision operation mode loaded!'" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo " fi" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo -e "else\n insmod /lib/modules/$LINUX_VER_STR/$a $b $c" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo "fi" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
fi
elif echo $a | egrep -q 'extra/pktflow.ko'
then
if test -e $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/extra/rdpa_prv.ko
then
echo -e "if echo \$(/bin/pspctl dump OperationMode) | grep -q 'FC'\nthen" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo -e " insmod /lib/modules/$LINUX_VER_STR/$a $b $c" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo "fi" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
else
echo -e "insmod /lib/modules/$LINUX_VER_STR/$a $b $c" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
fi
elif echo $a | egrep -q 'extra/pktrunner.ko'
then
if test -e $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/extra/rdpa_prv.ko
then
echo -e "if echo \$(/bin/pspctl dump OperationMode) | grep -q 'FC'\nthen" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo -e " insmod /lib/modules/$LINUX_VER_STR/$a $b $c" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo "fi" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
else
echo -e "insmod /lib/modules/$LINUX_VER_STR/$a $b $c" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
fi
elif echo $a | egrep -q 'extra/bcm_spdsvc.ko|extra/bcm_tcpspdtest.ko'
then
if test -e $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/$a
then
echo -e "if test -e /lib/modules/$LINUX_VER_STR/extra/rdpa_prv.ko\n then" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo -e " if echo \$(/bin/pspctl dump OperationMode) | grep -q 'FC'\n then" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo " insmod /lib/modules/$LINUX_VER_STR/$a $b $c" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo " fi" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo -e "else\n insmod /lib/modules/$LINUX_VER_STR/$a $b $c" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
echo "fi" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
fi
else
if test -e $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/$a
then
echo "insmod /lib/modules/$LINUX_VER_STR/$a $b $c" >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
fi
fi
fi
done
)
cat $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.tail >> $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
chmod +x $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.sh
rm -f $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.tail
rm -f $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.head
rm -f $TARGETS_DIR/$ROOTFS/rom/etc/init.d/bcm-base-drivers.list
fi
#delete unwanted module
echo "deleting intermediate wl modules"
MODULE_CLEAN_UP="wldrv.ko wl_tmp_partial.ko wlpartial.ko"
#remove unnecessary wlan driver
if [ "${WLBUS}" != "" ]; then
if [ `expr index $WLBUS pci` == 0 ]; then
MODULE_CLEAN_UP=${MODULE_CLEAN_UP}" wl.ko"
fi
if [ `expr index $WLBUS usb` == 0 ]; then
MODULE_CLEAN_UP=${MODULE_CLEAN_UP}" wl-usb.ko"
fi
else
MODULE_CLEAN_UP=${MODULE_CLEAN_UP}" wl-usb.ko"
fi
for f in $MODULE_CLEAN_UP; do \
eval "find $TARGETS_DIR/$ROOTFS/lib/modules -name $f |xargs rm -f";\
done
eval "find $TARGETS_DIR/$ROOTFS/lib/modules -name wlobj-*.ko | xargs rm -f"
#$BUSYBOX_DIR/examples/depmod.pl -k $LINUXDIR/vmlinux -b $INSTALL_DIR/../modules/lib/modules/$LINUX_VER_STR
#$BUSYBOX_DIR/examples/depmod.pl -k $LINUXDIR/vmlinux -b $INSTALL_DIR/../fs/lib/modules/$LINUX_VER_STR
# put rtecdc.bin to file system
if [ -f ${HND_SRC}/bcmdrivers/broadcom/net/wl/impl${BCM_WLIMPL}/sys/src/dongle/bin/43684b0/rtecdc.bin ]; then
mkdir -p ${TARGET_FS}/rom/etc/wlan/dhd/43684b0
if [ "${DHD_43684B0}" == "y" ]; then
cp ${HND_SRC}/bcmdrivers/broadcom/net/wl/impl${BCM_WLIMPL}/sys/src/dongle/bin/43684b0/rtecdc.bin ${TARGET_FS}/rom/etc/wlan/dhd/43684b0
fi
fi
if [ -f ${HND_SRC}/bcmdrivers/broadcom/net/wl/impl${BCM_WLIMPL}/sys/src/dongle/bin/43684c0/rtecdc.bin ]; then
mkdir -p ${TARGET_FS}/rom/etc/wlan/dhd/43684c0
if [ "${DHD_43684C0}" == "y" ]; then
cp ${HND_SRC}/bcmdrivers/broadcom/net/wl/impl${BCM_WLIMPL}/sys/src/dongle/bin/43684c0/rtecdc.bin ${TARGET_FS}/rom/etc/wlan/dhd/43684c0
fi
fi
if [ -f ${HND_SRC}/bcmdrivers/broadcom/net/wl/impl${BCM_WLIMPL}/sys/src/dongle/bin/6715a0/rtecdc.bin ]; then
mkdir -p ${TARGET_FS}/rom/etc/wlan/dhd/6715a0
if [ "${DHD_6715A0}" == "y" ]; then
cp ${HND_SRC}/bcmdrivers/broadcom/net/wl/impl${BCM_WLIMPL}/sys/src/dongle/bin/6715a0/rtecdc.bin ${TARGET_FS}/rom/etc/wlan/dhd/6715a0
fi
fi
if [ -f ${HND_SRC}/bcmdrivers/broadcom/net/wl/impl${BCM_WLIMPL}/sys/src/dongle/bin/6715b0/rtecdc.bin ]; then
mkdir -p ${TARGET_FS}/rom/etc/wlan/dhd/6715b0
if [ "${DHD_6715B0}" == "y" ]; then
cp ${HND_SRC}/bcmdrivers/broadcom/net/wl/impl${BCM_WLIMPL}/sys/src/dongle/bin/6715b0/rtecdc.bin ${TARGET_FS}/rom/etc/wlan/dhd/6715b0
fi
fi
mkdir -p ${TARGET_FS}/rom/etc/fw
cp ${HND_SRC}/bcmdrivers/opensource/phy/firmware/*.bin ${TARGET_FS}/rom/etc/fw/
if [ -f $BRCMDRIVERS_DIR/broadcom/char/pktflow/bcm9$BRCM_CHIP/scripts/FcStats.sh ]; then
cp $BRCMDRIVERS_DIR/broadcom/char/pktflow/bcm9$BRCM_CHIP/scripts/FcStats.sh $TARGETS_DIR/$ROOTFS/bin/
fi
if [ "$BUILD_NAME" == "RT-AX3000N" ]; then
find $TARGETS_DIR/$ROOTFS/lib/modules -name usb | xargs rm -rf
find $TARGETS_DIR/$ROOTFS/lib/modules -name cdrom | xargs rm -rf
find $TARGETS_DIR/$ROOTFS/lib/modules -name scsi | xargs rm -rf
find $TARGETS_DIR/$ROOTFS/lib/modules -name hid | xargs rm -rf
find $TARGETS_DIR/$ROOTFS/lib/modules -name fs | xargs rm -rf
find $TARGETS_DIR/$ROOTFS/lib/modules -name nls | xargs rm -rf
find $TARGETS_DIR/$ROOTFS/lib/modules -name bonding | xargs rm -rf
find $TARGETS_DIR/$ROOTFS/lib/modules -name bcm_bca_usb.ko | xargs rm -f
find $TARGETS_DIR/$ROOTFS/lib/modules -name tcp_bic.ko | xargs rm -f
find $TARGETS_DIR/$ROOTFS/lib/modules -name tcp_htcp.ko | xargs rm -f
find $TARGETS_DIR/$ROOTFS/lib/modules -name tcp_westwood.ko | xargs rm -f
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/9*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/X*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/E*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/RP*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/T*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/usr/sbin/dhd
fi
if [ "$BUILD_NAME" == "XD6_V2" ]; then
rm -rf $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/kernel/drivers/cdrom
rm -rf $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/kernel/drivers/net/phy
rm -rf $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/kernel/drivers/scsi
rm -rf $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/kernel/drivers/usb/host/ehci*
rm -rf $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/kernel/drivers/usb/host/xhci*
rm -rf $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/kernel/drivers/usb/mon
rm -rf $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/kernel/drivers/usb/storage
rm -rf $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/kernel/drivers/net/bonding
rm -rf $TARGETS_DIR/$ROOTFS/lib/modules/$LINUX_VER_STR/kernel/fs
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/9*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/usr/lib/libusb*
rm -rf $TARGETS_DIR/$ROOTFS/usr/sbin/mk*
rm -rf $TARGETS_DIR/$ROOTFS/usr/sbin/*fsck*
fi
if [ "$BUILD_NAME" == "BR63" ]; then
find $TARGETS_DIR/$ROOTFS/lib/modules -name bonding | xargs rm -rf
find $TARGETS_DIR/$ROOTFS/lib/modules -name tcp_bic.ko | xargs rm -f
find $TARGETS_DIR/$ROOTFS/lib/modules -name tcp_htcp.ko | xargs rm -f
find $TARGETS_DIR/$ROOTFS/lib/modules -name tcp_westwood.ko | xargs rm -f
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/9*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/X*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/E*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/RP*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/rom/etc/wlan/nvram/T*.nvm
rm -rf $TARGETS_DIR/$ROOTFS/usr/sbin/dhd
fi
# strip userspace binaries is sstrip is "enabled"
# sstrip is set to /bin/touch if BUILD_GDBSERVER=y
if [ "$SSTRIP" != "/bin/touch" ]; then
# Even though libcreduction did some stripping, we can make the
# libraries even smaller by doing sstrip here. Also libcreduction
# does not process all libs, e.g. libmdm.so
echo "Stripping userspace binaries..."
if [ "$BUILD_DISABLE_EXEC_STACK" == "y" ]; then
rm .exestack_error
#clear execute bit on binaries
find $TARGETS_DIR/$ROOTFS -type f -perm /u=x,g=x,o=x -print |(while read filename; \
do \
IS_ELF=$(dd if=$filename count=3 skip=1 bs=1 2> /dev/null); \
if [ "x${IS_ELF}" == "xELF" ]; then\
E=$($EXECSTACK -c $filename 2>&1); \
if [ "x$?" == "x127" ]; then \
echo "Fatal error " . $E;\
touch .exestack_error
exit 1;\
fi;\
fi;\
done;)
if [ -f .exestack_error ]; then
rm .exestack_error
exit 1;
fi
fi
$SSTRIP $TARGETS_DIR/$ROOTFS/bin/* $TARGETS_DIR/$ROOTFS/sbin/* $TARGETS_DIR/$ROOTFS/usr/bin/* $TARGETS_DIR/$ROOTFS/usr/sbin/* $TARGETS_DIR/$ROOTFS/lib/*.so* $TARGETS_DIR/$ROOTFS/lib/*/*.so*
fi
cp ${HND_SRC}/targets/nvram/6756/96756SV.nvm ${TARGET_FS}/rom/etc/wlan/nvram/96756SV.nvm
# Copy over and strip vmlinux
cp $KERNEL_DIR/vmlinux $PROFILE_DIR/.
$KSTRIP --remove-section=.note --remove-section=.comment $PROFILE_DIR/vmlinux
# Generate vmlinux.bin
$KOBJCOPY -O binary $PROFILE_DIR/vmlinux $PROFILE_DIR/vmlinux.bin
# Generate vmlinux_rd_boot
if [ "$BRCM_IKOS" != "y" ]; then
# when using ramdisk boot from CFE/boot loader, change of the virtual address in the vmlinux elf file is required for ARM-based device
la=""
if [ $KARCH == "arm64" ]; then
la=0xffffffffffffffff
offset=0x80000
elif [ "$KARCH" == "arm" ] ; then
offset=0x00018000
la=0xffffffff
fi
if [ ! "x$la" == "x" ]; then
entry=$(readelf -l $PROFILE_DIR/vmlinux |grep Entry |sed -e 's/.* //')
let entry=$entry-$offset
let change_addr=${la}-${entry}
let change_addr=${change_addr}+1
$KOBJCOPY --change-start ${change_addr} --change-addr ${change_addr} $PROFILE_DIR/vmlinux $PROFILE_DIR/vmlinux_rd_boot
else
cp $PROFILE_DIR/vmlinux $PROFILE_DIR/vmlinux_rd_boot
fi
fi
echo -en "@(#) \$imageversion: " > $PROFILE_DIR/image_ident
cat $TARGET_FS/etc/image_version | tr -d "\n" >> $PROFILE_DIR/image_ident
echo -en " $\n@(#) \$imageversion: " >> $PROFILE_DIR/image_ident
cat $TARGET_FS/etc/image_version | tr -d "\n" >> $PROFILE_DIR/image_ident
echo -e " $" >> $PROFILE_DIR/image_ident
if [ -f $TARGET_FS/etc/JENKINS_CHANGELIST ];
then
echo -en "@(#) \$changelist: " >> $PROFILE_DIR/image_ident
cat $TARGET_FS/etc/JENKINS_CHANGELIST | tr -d "\n" >> $PROFILE_DIR/image_ident
echo -en " $\n@(#) \$changelist: " >> $PROFILE_DIR/image_ident
cat $TARGET_FS/etc/JENKINS_CHANGELIST | tr -d "\n" >> $PROFILE_DIR/image_ident
echo -e " $" >> $PROFILE_DIR/image_ident
fi
svnc=$TARGET_FS/etc/SVN_COMMIT_LIST.txt
if [ -f $svnc ]
then
svnr=`grep Revision $svnc | head -1`
echo -en " $\n@(#) \$svnrevision: $svnr " >> $PROFILE_DIR/image_ident
echo -e " $" >> $PROFILE_DIR/image_ident
echo -en " $\n@(#) \$svnrevision: $svnr " >> $PROFILE_DIR/image_ident
echo -e " $" >> $PROFILE_DIR/image_ident
fi
bid=$TARGET_FS/etc/build_id.txt
if [ -f $bid ]
then
tt=/tmp/bldfs$$
cat $bid | sed -e "s/: */=/" > $tt
svb=`( . $tt ; echo $BRANCH@$Revision)`
rm $tt
echo -en " $\n@(#) \$svnsource: $svb " >> $PROFILE_DIR/image_ident
echo -e " $" >> $PROFILE_DIR/image_ident
echo -en " $\n@(#) \$svnsource: $svb " >> $PROFILE_DIR/image_ident
echo -e " $" >> $PROFILE_DIR/image_ident
fi
echo -en "@(#) \$imgversion: " >> $PROFILE_DIR/image_ident
echo -en $BRCM_VERSION >> $PROFILE_DIR/image_ident
echo -en "." >> $PROFILE_DIR/image_ident
echo -en $BRCM_RELEASE >> $PROFILE_DIR/image_ident
echo -en "L." >> $PROFILE_DIR/image_ident
echo -en $BRCM_EXTRAVERSION >> $PROFILE_DIR/image_ident
echo -e " $" >> $PROFILE_DIR/image_ident
echo -en "@(#) \$imgversion: " >> $PROFILE_DIR/image_ident
echo -en $BRCM_VERSION >> $PROFILE_DIR/image_ident
echo -en "." >> $PROFILE_DIR/image_ident
echo -en $BRCM_RELEASE >> $PROFILE_DIR/image_ident
echo -en "L." >> $PROFILE_DIR/image_ident
echo -en $BRCM_EXTRAVERSION >> $PROFILE_DIR/image_ident
echo -e " $" >> $PROFILE_DIR/image_ident
# If a consumer release has created a filesystem tarball, fill in
# any missing proprietary binaries using that tarball
( cd $TARGETS_DIR/$ROOTFS ; tar xzkf ../filesystem.tgz 2>/dev/null ; true )