| Server IP : 103.234.187.230 / Your IP : 216.73.216.216 Web Server : Apache System : Linux lserver42043-ind.megavelocity.net 3.10.0-1160.108.1.el7.x86_64 #1 SMP Thu Jan 25 16:17:31 UTC 2024 x86_64 User : apache ( 48) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/src/snapapi26-0.8.25/ |
Upload File : |
#!/bin/bash
KERNELVER=$1
CURR_KERNELVER="$(uname -r)"
if [ ! -z $KERNELVER ]; then
KERNEL_VERSION=$KERNELVER
else
KERNEL_VERSION=$CURR_KERNELVER
fi
OUTPUT_FILE=kernel_config.h
SYSTEM_MAP_DIRS=(/lib/modules/${KERNEL_VERSION}/ /usr/lib/debug/boot/ /boot/)
ACRONIS_SYSTEM_MAPS_DIR=/usr/lib/Acronis/SnapAPIFiles/SystemMaps/
SYSTEM_MAP_MINSIZE=1000
function find_system_map()
{
local dir=$1
if [ -e $dir/System.map-${KERNEL_VERSION} ] ;then
SYSTEM_MAP_FILE_TMP=$dir/System.map-${KERNEL_VERSION}
elif [ -e $dir/System.map ] ;then
SYSTEM_MAP_FILE_TMP=$dir/System.map
fi
if [ ! -z ${SYSTEM_MAP_FILE_TMP} ]; then
local size=$(stat -c%s "${SYSTEM_MAP_FILE_TMP}")
if (( $size > ${SYSTEM_MAP_MINSIZE} )); then
SYSTEM_MAP_FILE=${SYSTEM_MAP_FILE_TMP}
fi
fi
}
function get_acronis_system_map
{
boot_cfg_md5=( $(md5sum /boot/config-${KERNEL_VERSION}) )
if [ -e ${ACRONIS_SYSTEM_MAPS_DIR}/System.map-${KERNEL_VERSION}-$boot_cfg_md5 ]; then
SYSTEM_MAP_FILE=${ACRONIS_SYSTEM_MAPS_DIR}/System.map-${KERNEL_VERSION}-$boot_cfg_md5
fi
}
function get_system_map_from_kallsyms()
{
local dir="$(pwd)"
if [ -e /proc/kallsyms -a "$CURR_KERNELVER" = "$KERNELVER" ]; then
local smap="System.map-${KERNEL_VERSION}.tmp"
cat /proc/kallsyms > "${smap}"
local size=$(stat -c%s "${smap}")
if (( $size > ${SYSTEM_MAP_MINSIZE} )); then
local prink_ADDR="0x$(grep " printk$" "${smap}" | awk '{print $1}')"
if (( $prink_ADDR != 0 )); then
SYSTEM_MAP_FILE="${smap}"
fi
fi
fi
}
function get_media_system_map()
{
if [[ "$KERNELVER" == *"Acronis"* ]]; then
if [ -e ../linux/System.map ];then
SYSTEM_MAP_FILE=../linux/System.map
fi
fi
}
for i in "${SYSTEM_MAP_DIRS[@]}"; do
find_system_map $i
if [ ! -z ${SYSTEM_MAP_FILE} ]; then
break
fi
done
if [ -z "${SYSTEM_MAP_FILE}" ]; then
echo "Prebuilt system map for kernel \"${KERNEL_VERSION}\" is not found."
get_acronis_system_map
fi
if [ -z "${SYSTEM_MAP_FILE}" ]; then
echo "Acronis system map for kernel \"${KERNEL_VERSION}\" is not found."
get_system_map_from_kallsyms
fi
if [ -z "${SYSTEM_MAP_FILE}" -a -e /proc/sys/kernel/kptr_restrict ]; then
echo "/proc/kallsyms system map for kernel \"${KERNEL_VERSION}\" is wrong."
saved_kptr_restrict="$(cat /proc/sys/kernel/kptr_restrict)"
echo "0" > /proc/sys/kernel/kptr_restrict
get_system_map_from_kallsyms
echo "$saved_kptr_restrict" > /proc/sys/kernel/kptr_restrict
fi
if [ -z "${SYSTEM_MAP_FILE}" ]; then
echo "/proc/kallsyms system map for kernel \"${KERNEL_VERSION}\" is wrong after reset kptr_restrict."
get_media_system_map
fi
if [ -z "${SYSTEM_MAP_FILE}" ]; then
echo "Cannot find System.map file."
exit 0
fi
rm -f ${OUTPUT_FILE}
echo "Generate \"${OUTPUT_FILE}\" for kernel \"${KERNEL_VERSION}\" and system map \"${SYSTEM_MAP_FILE}\"."
echo "#ifndef SNAPAPI_KERNEL_CONFIG" >> ${OUTPUT_FILE}
echo "#define SNAPAPI_KERNEL_CONFIG" >> ${OUTPUT_FILE}
if [ -n "${SYSTEM_MAP_FILE}" ]; then
echo "#define SNAPAPI_SYSTEM_MAP \"${SYSTEM_MAP_FILE}\"" >> ${OUTPUT_FILE}
SYMBOLS="printk blk_mq_submit_bio _printk"
for SYMBOL_NAME in ${SYMBOLS}
do
SYMBOL_ADDR=$(grep " ${SYMBOL_NAME}$" "${SYSTEM_MAP_FILE}" | awk '{print $1}')
if [ -z "${SYMBOL_ADDR}" ]
then
echo "Function \"${SYMBOL_NAME}\" not found"
else
MACRO_NAME="$(echo ${SYMBOL_NAME} | awk '{print toupper($0)}')_ADDR"
echo "#define ${MACRO_NAME} 0x${SYMBOL_ADDR}" >> ${OUTPUT_FILE}
echo "Address of the function \"${SYMBOL_NAME}\" was defined"
fi
done
fi
# the end of the config file
echo "#endif" >> ${OUTPUT_FILE}