Code récupéré grâce à un scraper. Je l'ai lu dans les grandes lignes et il permet d'intégrer des modules spéciaux au kernel et de les gérer. Il semble destiné à ArchLinux et une architecture 32bits.
Code:
#!/bin/sh
# make sure we are in the directory containing this script
SCRIPTDIR=`dirname $0`
cd $SCRIPTDIR
PATH="${PATH}:/bin:/sbin"
#
# HOSTCC vs. CC - if a conftest needs to build and execute a test
# binary, like get_uname, then $HOSTCC needs to be used for this
# conftest in order for the host/build system to be able to execute
# it in X-compile environments.
# In all other cases, $CC should be used to minimize the risk of
# false failures due to conflicts with architecture specific header
# files.
#
CC="$1"
HOSTCC="$2"
ISYSTEM=`$CC -print-file-name=include 2> /dev/null`
SOURCES=$3
HEADERS=$SOURCES/include
OUTPUT=$4
XEN_PRESENT=1
RET=0
test_xen() {
#
# Determine if the target kernel is a Xen kernel. It used to be
# sufficient to check for CONFIG_XEN, but the introduction of
# modular para-virtualization (CONFIG_PARAVIRT, etc.) and
# Xen guest support, it is no longer possible to determine the
# target environment at build time. Therefore, if both
# CONFIG_XEN and CONFIG_PARAVIRT are present, text_xen() treats
# the kernel as a stand-alone kernel.
#
FILE="linux/autoconf.h"
if [ -f $HEADERS/$FILE -o -f $OUTPUT/include/$FILE ]; then
#
# We are looking at a configured source tree; verify
# that it's not a Xen kernel.
#
echo "#include
#if defined(CONFIG_XEN) && !defined(CONFIG_PARAVIRT)
#error CONFIG_XEN defined!
#endif
" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
XEN_PRESENT=0
fi
else
CONFIG=$HEADERS/../.config
if [ -f $CONFIG ]; then
if [ -z "$(grep "^CONFIG_XEN=y" $CONFIG)" ]; then
XEN_PRESENT="0"
return
fi
if [ -n "$(grep "^CONFIG_PARAVIRT=y" $CONFIG)" ]; then
XEN_PRESENT="0"
fi
fi
fi
}
build_cflags() {
ARCH=`uname -m | sed -e 's/i.86/i386/'`
BASE_CFLAGS="-D__KERNEL__ \
-DKBUILD_BASENAME=\"#conftest$$\" -DKBUILD_MODNAME=\"#conftest$$\" \
-nostdinc -isystem $ISYSTEM"
if [ "$OUTPUT" != "$SOURCES" ]; then
OUTPUT_CFLAGS="-I$OUTPUT/include2 -I$OUTPUT/include"
fi
CFLAGS="$CFLAGS $OUTPUT_CFLAGS -I$HEADERS"
test_xen
if [ "$OUTPUT" != "$SOURCES" ]; then
MACH_CFLAGS="-I$HEADERS/asm-$ARCH/mach-default"
if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]; then
MACH_CFLAGS="$MACH_CFLAGS -I$HEADERS/asm-x86/mach-default"
MACH_CFLAGS="$MACH_CFLAGS -I$SOURCES/arch/x86/include/asm/mach-default"
fi
if [ "$XEN_PRESENT" != "0" ]; then
MACH_CFLAGS="-I$HEADERS/asm-$ARCH/mach-xen $MACH_CFLAGS"
fi
else
MACH_CFLAGS="-I$HEADERS/asm/mach-default"
if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]; then
MACH_CFLAGS="$MACH_CFLAGS -I$HEADERS/asm-x86/mach-default"
MACH_CFLAGS="$MACH_CFLAGS -I$SOURCES/arch/x86/include/asm/mach-default"
fi
if [ "$XEN_PRESENT" != "0" ]; then
MACH_CFLAGS="-I$HEADERS/asm/mach-xen $MACH_CFLAGS"
fi
fi
CFLAGS="$BASE_CFLAGS $MACH_CFLAGS $OUTPUT_CFLAGS -I$HEADERS"
if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]; then
CFLAGS="$CFLAGS -I$SOURCES/arch/x86/include"
fi
if [ -n "$BUILD_PARAMS" ]; then
CFLAGS="$CFLAGS -D$BUILD_PARAMS"
fi
}
CONFTEST_PREAMBLE="#include
#if defined(CONFIG_XEN) && \
defined(CONFIG_XEN_INTERFACE_VERSION) && !defined(__XEN_INTERFACE_VERSION__)
#define __XEN_INTERFACE_VERSION__ CONFIG_XEN_INTERFACE_VERSION
#endif"
compile_test() {
case "$1" in
remap_page_range)
#
# Determine if the remap_page_range() function is present
# and how many arguments it takes.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_remap_page_range(void) {
remap_page_range();
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#undef NV_REMAP_PAGE_RANGE_PRESENT" >> conftest.h
rm -f conftest$$.o
return
fi
echo "$CONFTEST_PREAMBLE
#include
int conftest_remap_page_range(void) {
pgprot_t pgprot = __pgprot(0);
return remap_page_range(NULL, 0L, 0L, 0L, pgprot);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_REMAP_PAGE_RANGE_PRESENT" >> conftest.h
echo "#define NV_REMAP_PAGE_RANGE_ARGUMENT_COUNT 5" >> conftest.h
rm -f conftest$$.o
return
fi
echo "$CONFTEST_PREAMBLE
#include
int conftest_remap_page_range(void) {
pgprot_t pgprot = __pgprot(0);
return remap_page_range(0L, 0L, 0L, pgprot);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_REMAP_PAGE_RANGE_PRESENT" >> conftest.h
echo "#define NV_REMAP_PAGE_RANGE_ARGUMENT_COUNT 4" >> conftest.h
rm -f conftest$$.o
return
else
echo "#error remap_page_range() conftest failed!" >> conftest.h
return
fi
;;
set_pages_uc)
#
# Determine if the set_pages_uc() function is present.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_set_pages_uc(void) {
set_pages_uc();
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#undef NV_SET_PAGES_UC_PRESENT" >> conftest.h
return
else
echo "#ifdef NV_CHANGE_PAGE_ATTR_PRESENT" >> conftest.h
echo "#undef NV_CHANGE_PAGE_ATTR_PRESENT" >> conftest.h
echo "#endif" >> conftest.h
echo "#define NV_SET_PAGES_UC_PRESENT" >> conftest.h
return
fi
;;
change_page_attr)
#
# Determine if the change_page_attr() function is
# present.
#
echo "$CONFTEST_PREAMBLE
#include
#include
#include
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
#include
#endif
void conftest_change_page_attr(void) {
change_page_attr();
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#undef NV_CHANGE_PAGE_ATTR_PRESENT" >> conftest.h
rm -f conftest$$.o
return
else
echo "#ifndef NV_SET_PAGES_UC_PRESENT" >> conftest.h
echo "#define NV_CHANGE_PAGE_ATTR_PRESENT" >> conftest.h
echo "#endif" >> conftest.h
return
fi
;;
pci_get_class)
#
# Determine if the pci_get_class() function is
# present.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_pci_get_class(void) {
pci_get_class();
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#undef NV_PCI_GET_CLASS_PRESENT" >> conftest.h
rm -f conftest$$.o
return
else
echo "#define NV_PCI_GET_CLASS_PRESENT" >> conftest.h
return
fi
;;
remap_pfn_range)
#
# Determine if the remap_pfn_range() function is
# present.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_remap_pfn_range(void) {
remap_pfn_range();
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#undef NV_REMAP_PFN_RANGE_PRESENT" >> conftest.h
rm -f conftest$$.o
return
else
echo "#define NV_REMAP_PFN_RANGE_PRESENT" >> conftest.h
return
fi
;;
signal_struct)
#
# Determine if the 'signal_struct' structure has an
# 'rlim' member.
#
echo "$CONFTEST_PREAMBLE
#include
int conftest_signal_struct(void) {
return offsetof(struct signal_struct, rlim);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_SIGNAL_STRUCT_HAS_RLIM" >> conftest.h
rm -f conftest$$.o
return
else
echo "#undef NV_SIGNAL_STRUCT_HAS_RLIM" >> conftest.h
return
fi
;;
agp_backend_acquire)
#
# Determine if the agp_backend_acquire() function is
# present and how many arguments it takes.
#
echo "$CONFTEST_PREAMBLE
#include
#include
typedef struct agp_bridge_data agp_bridge_data;
agp_bridge_data *conftest_agp_backend_acquire(struct pci_dev *dev) {
return agp_backend_acquire(dev, 0L);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#undef NV_AGP_BACKEND_ACQUIRE_PRESENT" >> conftest.h
rm -f conftest$$.o
return
fi
echo "$CONFTEST_PREAMBLE
#include
#include
typedef struct agp_bridge_data agp_bridge_data;
agp_bridge_data *conftest_agp_backend_acquire(struct pci_dev *dev) {
return agp_backend_acquire(dev);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_AGP_BACKEND_ACQUIRE_PRESENT" >> conftest.h
echo "#define NV_AGP_BACKEND_ACQUIRE_ARGUMENT_COUNT 1" >> conftest.h
rm -f conftest$$.o
return
fi
echo "$CONFTEST_PREAMBLE
#include
#include
typedef struct agp_bridge_data agp_bridge_data;
agp_bridge_data *conftest_agp_backend_acquire(void) {
return agp_backend_acquire();
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_AGP_BACKEND_ACQUIRE_PRESENT" >> conftest.h
echo "#define NV_AGP_BACKEND_ACQUIRE_ARGUMENT_COUNT 0" >> conftest.h
rm -f conftest$$.o
return
else
echo "#error agp_backend_acquire() conftest failed!" >> conftest.h
return
fi
;;
vmap)
#
# Determine if the vmap() function is present and how
# many arguments it takes.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_vmap(void) {
vmap();
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#undef NV_VMAP_PRESENT" >> conftest.h
rm -f conftest$$.o
return
fi
echo "$CONFTEST_PREAMBLE
#include
void *conftest_vmap(struct page **pages, int count) {
return vmap(pages, count);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_VMAP_PRESENT" >> conftest.h
echo "#define NV_VMAP_ARGUMENT_COUNT 2" >> conftest.h
rm -f conftest$$.o
return
fi
echo "$CONFTEST_PREAMBLE
#include
#include
void *conftest_vmap(struct page **pages, int count) {
return vmap(pages, count, 0, PAGE_KERNEL);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_VMAP_PRESENT" >> conftest.h
echo "#define NV_VMAP_ARGUMENT_COUNT 4" >> conftest.h
rm -f conftest$$.o
return
else
echo "#error vmap() conftest failed!" >> conftest.h
return
fi
;;
i2c_adapter)
#
# Determine if the 'i2c_adapter' structure has inc_use()
# and dec_use() members.
#
echo "$CONFTEST_PREAMBLE
#include
int conftest_i2c_adapter(void) {
return offsetof(struct i2c_adapter, inc_use);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_I2C_ADAPTER_HAS_INC_USE" >> conftest.h
rm -f conftest$$.o
else
echo "#undef NV_I2C_ADAPTER_HAS_INC_USE" >> conftest.h
fi
echo "$CONFTEST_PREAMBLE
#include
int conftest_i2c_adapter(void) {
return offsetof(struct i2c_adapter, dec_use);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_I2C_ADAPTER_HAS_DEC_USE" >> conftest.h
rm -f conftest$$.o
return
else
echo "#undef NV_I2C_ADAPTER_HAS_DEC_USE" >> conftest.h
return
fi
;;
sysctl_max_map_count)
#
# Determine if the 'sysctl_max_map_count' symbol is
# present.
#
echo "$CONFTEST_PREAMBLE
#include
int conftest_sysctl_max_map_count(void) {
return sysctl_max_map_count;
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_SYSCTL_MAX_MAP_COUNT_PRESENT" >> conftest.h
rm -f conftest$$.o
return
else
echo "#undef NV_SYSCTL_MAX_MAP_COUNT_PRESENT" >> conftest.h
return
fi
;;
pm_message_t)
#
# Determine if the 'pm_message_t' data type is present
# and if it as an 'event' member.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_pm_message_t(pm_message_t state) {
pm_message_t *p = &state;
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_PM_MESSAGE_T_PRESENT" >> conftest.h
rm -f conftest$$.o
else
echo "#undef NV_PM_MESSAGE_T_PRESENT" >> conftest.h
echo "#undef NV_PM_MESSAGE_T_HAS_EVENT" >> conftest.h
return
fi
echo "$CONFTEST_PREAMBLE
#include
int conftest_pm_message_t(void) {
return offsetof(pm_message_t, event);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_PM_MESSAGE_T_HAS_EVENT" >> conftest.h
rm -f conftest$$.o
return
else
echo "#undef NV_PM_MESSAGE_T_HAS_EVENT" >> conftest.h
return
fi
;;
pci_choose_state)
#
# Determine if the pci_choose_state() function is
# present.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_pci_choose_state(void) {
pci_choose_state();
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#undef NV_PCI_CHOOSE_STATE_PRESENT" >> conftest.h
rm -f conftest$$.o
return
else
echo "#define NV_PCI_CHOOSE_STATE_PRESENT" >> conftest.h
return
fi
;;
vm_insert_page)
#
# Determine if the vm_insert_page() function is
# present.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_vm_insert_page(void) {
vm_insert_page();
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#undef NV_VM_INSERT_PAGE_PRESENT" >> conftest.h
rm -f conftest$$.o
return
else
echo "#define NV_VM_INSERT_PAGE_PRESENT" >> conftest.h
return
fi
;;
irq_handler_t)
#
# Determine if the 'irq_handler_t' type is present and
# if it takes a 'struct ptregs *' argument.
#
echo "$CONFTEST_PREAMBLE
#include
irq_handler_t conftest_isr;
" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ ! -f conftest$$.o ]; then
echo "#undef NV_IRQ_HANDLER_T_PRESENT" >> conftest.h
rm -f conftest$$.o
return
fi
rm -f conftest$$.o
echo "$CONFTEST_PREAMBLE
#include
irq_handler_t conftest_isr;
int conftest_irq_handler_t(int irq, void *arg) {
return conftest_isr(irq, arg);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_IRQ_HANDLER_T_PRESENT" >> conftest.h
echo "#define NV_IRQ_HANDLER_T_ARGUMENT_COUNT 2" >> conftest.h
rm -f conftest$$.o
return
fi
echo "$CONFTEST_PREAMBLE
#include
irq_handler_t conftest_isr;
int conftest_irq_handler_t(int irq, void *arg, struct pt_regs *regs) {
return conftest_isr(irq, arg, regs);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_IRQ_HANDLER_T_PRESENT" >> conftest.h
echo "#define NV_IRQ_HANDLER_T_ARGUMENT_COUNT 3" >> conftest.h
rm -f conftest$$.o
return
else
echo "#error irq_handler_t() conftest failed!" >> conftest.h
return
fi
;;
acpi_device_ops)
#
# Determine if the 'acpi_device_ops' structure has
# a match() member.
#
echo "$CONFTEST_PREAMBLE
#include
int conftest_acpi_device_ops(void) {
return offsetof(struct acpi_device_ops, match);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#define NV_ACPI_DEVICE_OPS_HAS_MATCH" >> conftest.h
return
else
echo "#undef NV_ACPI_DEVICE_OPS_HAS_MATCH" >> conftest.h
return
fi
;;
acpi_device_id)
#
# Determine if the 'acpi_device_id' structure has
# a 'driver_data' member.
#
echo "$CONFTEST_PREAMBLE
#include
int conftest_acpi_device_id(void) {
return offsetof(struct acpi_device_id, driver_data);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
echo "#define NV_ACPI_DEVICE_ID_HAS_DRIVER_DATA" >> conftest.h
rm -f conftest$$.o
return
else
echo "#undef NV_ACPI_DEVICE_ID_HAS_DRIVER_DATA" >> conftest.h
return
fi
;;
acquire_console_sem)
#
# Determine if the acquire_console_sem() function
# is present.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_acquire_console_sem(void) {
acquire_console_sem(NULL);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#undef NV_ACQUIRE_CONSOLE_SEM_PRESENT" >> conftest.h
return
else
echo "#define NV_ACQUIRE_CONSOLE_SEM_PRESENT" >> conftest.h
return
fi
;;
kmem_cache_create)
#
# Determine if the kmem_cache_create() function is
# present and how many arguments it takes.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_kmem_cache_create(void) {
kmem_cache_create();
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#undef NV_KMEM_CACHE_CREATE_PRESENT" >> conftest.h
return
fi
echo "$CONFTEST_PREAMBLE
#include
void conftest_kmem_cache_create(void) {
kmem_cache_create(NULL, 0, 0, 0L, NULL, NULL);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#define NV_KMEM_CACHE_CREATE_PRESENT" >> conftest.h
echo "#define NV_KMEM_CACHE_CREATE_ARGUMENT_COUNT 6 " >> conftest.h
return
fi
echo "$CONFTEST_PREAMBLE
#include
void conftest_kmem_cache_create(void) {
kmem_cache_create(NULL, 0, 0, 0L, NULL);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#define NV_KMEM_CACHE_CREATE_PRESENT" >> conftest.h
echo "#define NV_KMEM_CACHE_CREATE_ARGUMENT_COUNT 5 " >> conftest.h
return
else
echo "#error kmem_cache_create() conftest failed!" >> conftest.h
fi
;;
smp_call_function)
#
# Determine if the smp_call_function() function is
# present and how many arguments it takes.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_smp_call_function(void) {
#ifdef CONFIG_SMP
smp_call_function();
#endif
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#undef NV_SMP_CALL_FUNCTION_PRESENT" >> conftest.h
return
fi
echo "$CONFTEST_PREAMBLE
#include
void conftest_smp_call_function(void) {
smp_call_function(NULL, NULL, 0, 0);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#define NV_SMP_CALL_FUNCTION_PRESENT" >> conftest.h
echo "#define NV_SMP_CALL_FUNCTION_ARGUMENT_COUNT 4 " >> conftest.h
return
fi
echo "$CONFTEST_PREAMBLE
#include
void conftest_smp_call_function(void) {
smp_call_function(NULL, NULL, 0);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#define NV_SMP_CALL_FUNCTION_PRESENT" >> conftest.h
echo "#define NV_SMP_CALL_FUNCTION_ARGUMENT_COUNT 3 " >> conftest.h
return
else
echo "#error smp_call_function() conftest failed!" >> conftest.h
fi
;;
on_each_cpu)
#
# Determine if the on_each_cpu() function is present
# and how many arguments it takes.
#
echo "$CONFTEST_PREAMBLE
#include
void conftest_on_each_cpu(void) {
#ifdef CONFIG_SMP
on_each_cpu();
#endif
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#undef NV_ON_EACH_CPU_PRESENT" >> conftest.h
return
fi
echo "$CONFTEST_PREAMBLE
#include
void conftest_on_each_cpu(void) {
on_each_cpu(NULL, NULL, 0, 0);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#define NV_ON_EACH_CPU_PRESENT" >> conftest.h
echo "#define NV_ON_EACH_CPU_ARGUMENT_COUNT 4 " >> conftest.h
return
fi
echo "$CONFTEST_PREAMBLE
#include
void conftest_on_each_cpu(void) {
on_each_cpu(NULL, NULL, 0);
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#define NV_ON_EACH_CPU_PRESENT" >> conftest.h
echo "#define NV_ON_EACH_CPU_ARGUMENT_COUNT 3 " >> conftest.h
return
else
echo "#error on_each_cpu() conftest failed!" >> conftest.h
fi
;;
acpi_evaluate_integer)
#
# Determine if the acpi_evaluate_integer() function is
# present and the type of its 'data' argument.
#
echo "$CONFTEST_PREAMBLE
#include
acpi_status acpi_evaluate_integer(acpi_handle h, acpi_string s,
struct acpi_object_list *l, unsigned long long *d) {
return AE_OK;
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#define NV_ACPI_EVALUATE_INTEGER_PRESENT" >> conftest.h
echo "typedef unsigned long long nv_acpi_integer_t;" >> conftest.h
return
fi
echo "$CONFTEST_PREAMBLE
#include
acpi_status acpi_evaluate_integer(acpi_handle h, acpi_string s,
struct acpi_object_list *l, unsigned long *d) {
return AE_OK;
}" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
echo "#define NV_ACPI_EVALUATE_INTEGER_PRESENT" >> conftest.h
echo "typedef unsigned long nv_acpi_integer_t;" >> conftest.h
return
else
#
# We can't report a compile test failure here because
# this is a catch-all for both kernels that don't
# have acpi_evaluate_integer() and kernels that have
# broken header files that make it impossible to
# tell if the function is present.
#
echo "#undef NV_ACPI_EVALUATE_INTEGER_PRESENT" >> conftest.h
echo "typedef unsigned long nv_acpi_integer_t;" >> conftest.h
fi
;;
esac
}
build_cflags
case "$5" in
cc_sanity_check)
#
# Check if the selected compiler can create executables
# in the current environment.
#
VERBOSE=$6
echo "#include
int main(int argc, char *argv[]) {
return 0;
}" > conftest$$.c
$HOSTCC -o conftest$$ conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ ! -x conftest$$ ]; then
if [ "$VERBOSE" = "full_output" ]; then
echo "";
fi
if [ "$CC" != "cc" ]; then
echo "The C compiler '$CC' does not appear to be able to"
echo "create executables. Please make sure you have "
echo "your Linux distribution's libc development package"
echo "installed and that '$CC' is a valid C compiler";
echo "name."
else
echo "The C compiler '$CC' does not appear to be able to"
echo "create executables. Please make sure you have "
echo "your Linux distribution's gcc and libc development"
echo "packages installed."
fi
if [ "$VERBOSE" = "full_output" ]; then
echo "";
echo "*** Failed CC sanity check. Bailing out! ***";
echo "";
fi
exit 1
else
rm conftest$$
exit 0
fi
;;
cc_version_check)
#
# Verify that the same compiler is used for the kernel and kernel
# module.
#
VERBOSE=$6
if [ -n "$IGNORE_CC_MISMATCH" -o -n "$SYSSRC" -o -n "$SYSINCLUDE" ]; then
#
# The user chose to disable the CC version test (which may or
# may not be wise) or is building the module for a kernel not
# currently running, which renders the test meaningless.
#
exit 0
fi
rm -f gcc-version-check
$CC gcc-version-check.c -o gcc-version-check > /dev/null 2>&1
if [ ! -f gcc-version-check ]; then
if [ "$CC" != "cc" ]; then
MSG="Could not compile 'gcc-version-check.c'. Please be "
MSG="$MSG sure you have your Linux distribution's libc "
MSG="$MSG development package installed and that '$CC' "
MSG="$MSG is a valid C compiler name."
else
MSG="Could not compile 'gcc-version-check.c'. Please be "
MSG="$MSG sure you have your Linux distribution's gcc "
MSG="$MSG and libc development packages installed."
fi
RET=1
else
PROC_VERSION="/proc/version"
if [ -f $PROC_VERSION ]; then
MSG=`./gcc-version-check "$(cat $PROC_VERSION)"`
RET=$?
else
MSG="$PROC_VERSION does not exist."
RET=1
fi
rm -f gcc-version-check
fi
if [ "$RET" != "0" ]; then
#
# The gcc version check failed
#
if [ "$VERBOSE" = "full_output" ]; then
echo "";
echo "gcc-version-check failed:";
echo "";
echo "$MSG" | fmt -w 52
echo "";
echo "If you know what you are doing and want to override";
echo "the gcc version check, you can do so by setting the";
echo "IGNORE_CC_MISMATCH environment variable to \"1\".";
echo "";
echo "In any other case, set the CC environment variable";
echo "to the name of the compiler that was used to compile";
echo "the kernel.";
echo ""
echo "*** Failed CC version check. Bailing out! ***";
echo "";
else
echo "$MSG";
fi
exit 1;
else
exit 0
fi
;;
kernel_patch_level)
#
# Determine the kernel's major patch level; this is only done if we
# aren't told by KBUILD.
#
MAKEFILE=$HEADERS/../Makefile
if [ -f $MAKEFILE ]; then
PATCHLEVEL=$(grep "^PATCHLEVEL =" $MAKEFILE | cut -d " " -f 3)
if [ -z "$PATCHLEVEL" ]; then
exit 1
else
echo $PATCHLEVEL
exit 0
fi
fi
;;
suser_sanity_check)
#
# Determine the caller's user id to determine if we have sufficient
# privileges for the requested operation.
#
if [ $(id -ur) != 0 ]; then
echo "";
echo "Please run \"make install\" as root.";
echo "";
echo "*** Failed super-user sanity check. Bailing out! ***";
exit 1
else
exit 0
fi
;;
rmmod_sanity_check)
#
# Make sure that any currently loaded NVIDIA kernel module can be
# unloaded.
#
MODULE="nvidia"
if [ -n "$SYSSRC" -o -n "$SYSINCLUDE" ]; then
#
# Don't attempt to remove the kernel module if we're not
# building against the running kernel.
#
exit 0
fi
if lsmod | grep -wq $MODULE; then
rmmod $MODULE > /dev/null 2>&1
fi
if lsmod | grep -wq $MODULE; then
#
# The NVIDIA kernel module is still loaded, most likely because
# it is busy.
#
echo "";
echo "Unable to remove existing NVIDIA kernel module.";
echo "Please be sure you have exited X before attempting";
echo "to install the NVIDIA kernel module.";
echo "";
echo "*** Failed rmmod sanity check. Bailing out! ***";
exit 1
else
exit 0
fi
;;
select_makefile)
#
# Select which Makefile to use based on the version of the
# kernel we are building against: use the kbuild Makefile for
# 2.6 and newer kernels, and the old Makefile for kernels older
# than 2.6.
#
rm -f Makefile
RET=1
VERBOSE=$6
FILE="linux/version.h"
SELECTED_MAKEFILE=
if [ -f $HEADERS/$FILE -o -f $OUTPUT/include/$FILE ]; then
#
# We are either looking at a configured kernel source
# tree or at headers shipped for a specific kernel.
# Determine the kernel version using a compile check.
#
echo "$CONFTEST_PREAMBLE
#include
#include
int main() {
if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) {
return 0;
} else {
return 1;
}
}" > conftest$$.c
$HOSTCC $CFLAGS -o conftest$$ conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$ ]; then
./conftest$$ > /dev/null 2>&1
if [ $? = "0" ]; then
SELECTED_MFILE=Makefile.kbuild
else
SELECTED_MFILE=Makefile.nvidia
fi
rm -f conftest$$
RET=0
fi
else
MAKEFILE=$HEADERS/../Makefile
CONFIG=$HEADERS/../.config
if [ -f $MAKEFILE -a -f $CONFIG ]; then
#
# This source tree is not configured, but includes
# a Makefile and a .config file. If this is a 2.6
# kernel older than 2.6.6, that's all we require to
# build the module.
#
PATCHLEVEL=$(grep "^PATCHLEVEL =" $MAKEFILE | cut -d " " -f 3)
SUBLEVEL=$(grep "^SUBLEVEL =" $MAKEFILE | cut -d " " -f 3)
if [ -n "$PATCHLEVEL" -a $PATCHLEVEL -ge 6 \
-a -n "$SUBLEVEL" -a $SUBLEVEL -le 5 ]; then
SELECTED_MFILE=Makefile.kbuild
RET=0
fi
fi
fi
if [ "$RET" = "0" ]; then
# Use rmlite Makefile instead of .kbuild if available
if [ "$SELECTED_MFILE" = "Makefile.kbuild" -a -f Makefile.rmlite ]; then
SELECTED_MFILE=Makefile.rmlite
fi
ln -s $SELECTED_MFILE Makefile
else
echo "If you are using a Linux 2.4 kernel, please make sure";
echo "you either have configured kernel sources matching your";
echo "kernel or the correct set of kernel headers installed";
echo "on your system.";
echo "";
echo "If you are using a Linux 2.6 kernel, please make sure";
echo "you have configured kernel sources matching your kernel";
echo "installed on your system. If you specified a separate";
echo "output directory using either the \"KBUILD_OUTPUT\" or";
echo "the \"O\" KBUILD parameter, make sure to specify this";
echo "directory with the SYSOUT environment variable or with";
echo "the equivalent nvidia-installer command line option.";
echo "";
echo "Depending on where and how the kernel sources (or the";
echo "kernel headers) were installed, you may need to specify";
echo "their location with the SYSSRC environment variable or";
echo "the equivalent nvidia-installer command line option.";
echo "";
if [ "$VERBOSE" = "full_output" ]; then
echo "*** Unable to determine the target kernel version. ***";
echo "";
fi
fi
exit $RET
;;
get_uname)
#
# Print UTS_RELEASE from the kernel sources, if the kernel header
# file ../linux/version.h exists. If it doesn't exist, but a
# Makefile is found, extract PATCHLEVEL and SUBLEVEL and use them
# to build the kernel release name.
#
# If neither source file is found or if an error occurred, return
# the output of `uname -r`.
#
RET=1
FILE="linux/version.h"
if [ -f $HEADERS/$FILE -o -f $OUTPUT/include/$FILE ]; then
#
# We are either looking at a configured kernel source
# tree or at headers shipped for a specific kernel.
# Determine the kernel version using a compile check.
#
FILE="linux/utsrelease.h"
if [ -f $HEADERS/$FILE -o -f $OUTPUT/include/$FILE ]; then
echo "$CONFTEST_PREAMBLE
#include
int main() {
printf(\"%s\", UTS_RELEASE);
return 0;
}" > conftest$$.c
else
echo "$CONFTEST_PREAMBLE
#include
int main() {
printf(\"%s\", UTS_RELEASE);
return 0;
}" > conftest$$.c
fi
$HOSTCC $CFLAGS -o conftest$$ conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$ ]; then
./conftest$$; echo
rm -f conftest$$
RET=0
fi
else
MAKEFILE=$HEADERS/../Makefile
if [ -f $MAKEFILE ]; then
#
# This source tree is not configured, but includes
# the top-level Makefile.
#
PATCHLEVEL=$(grep "^PATCHLEVEL =" $MAKEFILE | cut -d " " -f 3)
SUBLEVEL=$(grep "^SUBLEVEL =" $MAKEFILE | cut -d " " -f 3)
if [ -n "$PATCHLEVEL" -a -n "$SUBLEVEL" ]; then
echo 2.$PATCHLEVEL.$SUBLEVEL
RET=0
fi
fi
fi
if [ "$RET" != "0" ]; then
uname -r
exit 1
else
exit 0
fi
;;
rivafb_sanity_check)
#
# Check if the kernel was compiled with rivafb support. If so, then
# exit, since the driver no longer works with rivafb.
#
RET=1
VERBOSE=$6
FILE="linux/autoconf.h"
if [ -f $HEADERS/$FILE -o -f $OUTPUT/include/$FILE ]; then
#
# We are looking at a configured source tree; verify
# that its configuration doesn't include rivafb using
# a compile check.
#
echo "$CONFTEST_PREAMBLE
#ifdef CONFIG_FB_RIVA
#error CONFIG_FB_RIVA defined!
#endif
" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
RET=0
fi
else
CONFIG=$HEADERS/../.config
if [ -f $CONFIG ]; then
if [ -z "$(grep "^CONFIG_FB_RIVA=y" $CONFIG)" ]; then
RET=0
fi
fi
fi
if [ "$RET" != "0" ]; then
echo "Your kernel was configured to include rivafb support!";
echo "";
echo "The rivafb driver conflicts with the NVIDIA driver, please";
echo "reconfigure your kernel and *disable* rivafb support, then";
echo "try installing the NVIDIA kernel module again.";
echo "";
if [ "$VERBOSE" = "full_output" ]; then
echo "*** Failed rivafb sanity check. Bailing out! ***";
echo "";
fi
exit 1
else
exit 0
fi
;;
nvidiafb_sanity_check)
#
# Check if the kernel was compiled with nvidiafb support. If so, then
# exit, since the driver doesn't work with nvidiafb.
#
RET=1
VERBOSE=$6
FILE="linux/autoconf.h"
if [ -f $HEADERS/$FILE -o -f $OUTPUT/include/$FILE ]; then
#
# We are looking at a configured source tree; verify
# that its configuration doesn't include nvidiafb using
# a compile check.
#
echo "$CONFTEST_PREAMBLE
#ifdef CONFIG_FB_NVIDIA
#error CONFIG_FB_NVIDIA defined!
#endif
" > conftest$$.c
$CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
rm -f conftest$$.c
if [ -f conftest$$.o ]; then
rm -f conftest$$.o
RET=0
fi
else
CONFIG=$HEADERS/../.config
if [ -f $CONFIG ]; then
if [ -z "$(grep "^CONFIG_FB_NVIDIA=y" $CONFIG)" ]; then
RET=0
fi
fi
fi
if [ "$RET" != "0" ]; then
echo "Your kernel was configured to include nvidiafb support!";
echo "";
echo "The nvidiafb driver conflicts with the NVIDIA driver, please";
echo "reconfigure your kernel and *disable* nvidiafb support, then";
echo "try installing the NVIDIA kernel module again.";
echo "";
if [ "$VERBOSE" = "full_output" ]; then
echo "*** Failed nvidiafb sanity check. Bailing out! ***";
echo "";
fi
exit 1
else
exit 0
fi
;;
xen_sanity_check)
#
# Check if the target kernel is a Xen kernel. If so, then exit, since
# the driver doesn't currently work with Xen.
#
VERBOSE=$6
if [ -n "$IGNORE_XEN_PRESENCE" ]; then
exit 0
fi
if [ "$XEN_PRESENT" != "0" ]; then
echo "The kernel you are installing for is a Xen kernel!";
echo "";
echo "The NVIDIA driver does not currently work on Xen kernels. If ";
echo "you are using a stock distribution kernel, please install ";
echo "a variant of this kernel without Xen support; if this is a ";
echo "custom kernel, please install a standard Linux kernel. Then ";
echo "try installing the NVIDIA kernel module again.";
echo "";
if [ "$VERBOSE" = "full_output" ]; then
echo "*** Failed Xen sanity check. Bailing out! ***";
echo "";
fi
exit 1
else
exit 0
fi
;;
compile_tests)
#
# Run a series of compile tests to determine the set of interfaces
# and features available in the target kernel.
#
FILES="linux/semaphore.h linux/cred.h"
shift 5
rm -f conftest.h
for i in $*; do compile_test $i; done
for FILE in $FILES; do
FILE_DEFINE=NV_`echo $FILE | tr '/.' '_' | tr 'a-z' 'A-Z'`_PRESENT
if [ -f $HEADERS/$FILE -o -f $OUTPUT/include/$FILE ]; then
echo "#define $FILE_DEFINE" >> conftest.h
else
echo "#undef $FILE_DEFINE" >> conftest.h
fi
done
if [ -n "$SHOW_COMPILE_TEST_RESULTS" -a -f conftest.h ]; then
cat conftest.h
fi
exit 0
;;
esac
Dernière édition par un modérateur:
J'aime:
RoRoH_AR