LINUX.ORG.RU

Проблемы со сборкой модуля Fuse

 , ,


0

1

Привет всем!

Необходимо собрать модуль fuse v. 2.7.0 для ядра 2.6.35.13.

Делаю все по инструкции с оф. сайта( http://fuse.sourceforge.net/ ).

При попытке сконфигурировать:

~/fuse-2.7.0/$ ./configure --with-kernel=~/linux-2.6.35.13/

Получаю ошибку:

checking kernel source directory... /home/at/tv/linux-2.6.35.13/
checking kernel build directory... /home/at/tv/linux-2.6.35.13/
checking kernel source version... Not found
configure: error:
	*** Cannot determine the version of the linux kernel source. Please
	*** prepare the kernel before running this script

Файл .config лежит в папки с исходниками ядра, make prepare запускал.

В чём может быть проблема?

Заранее спасибо.

checking kernel source version... Not found

установи пакет с исходниками ядра и пакет для разработки.

rhel-based: kernel-source, kernel-headers

debian-based: linux-source, linux-headers

router ★★★★★
()

На будущее: наверняка там есть лог где написано какие файлы проверялись на наличие.

true_admin ★★★★★
()
Ответ на: комментарий от router

Исходники ядра скачаны и лежат в отдельной папке, которая указывается при конфигурировании.

arttykh
() автор топика
Ответ на: комментарий от i-rinat

вывод config.log:

configure:1683: checking for a BSD-compatible install
configure:1739: result: /usr/bin/install -c
configure:1817: checking kernel source directory
configure:1845: result: ~/linux-2.6.35.13/
configure:1847: checking kernel build directory
configure:1849: result: ~/linux-2.6.35.13/
configure:1852: checking kernel source version
configure:1860: result: Not found
configure:1864: error:
	*** Cannot determine the version of the linux kernel source. Please
	*** prepare the kernel before running this script 
arttykh
() автор топика
Ответ на: комментарий от ABW

при запуске make prepare получаю:

$ make prepare
scripts/kconfig/conf -s arch/x86/Kconfig
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  CC      kernel/bounds.s
  GEN     include/generated/bounds.h
  CC      arch/x86/kernel/asm-offsets.s
In file included from /home/at/tv/linux-2.6.35.13/arch/x86/include/asm/hardirq.h:5:0,
                 from include/linux/hardirq.h:10,
                 from include/linux/interrupt.h:12,
                 from include/linux/kernel_stat.h:8,
                 from /home/at/tv/linux-2.6.35.13/arch/x86/include/asm/i387.h:16,
                 from /home/at/tv/linux-2.6.35.13/arch/x86/include/asm/suspend_32.h:10,
                 from /home/at/tv/linux-2.6.35.13/arch/x86/include/asm/suspend.h:2,
                 from arch/x86/kernel/asm-offsets_32.c:21,
                 from arch/x86/kernel/asm-offsets.c:2:
include/linux/irq.h: In function ‘alloc_desc_masks’:
include/linux/irq.h:442:8: warning: variable ‘gfp’ set but not used [-Wunused-but-set-variable]
  GEN     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh 

Запускаю make modules_prepare после make prepare. потом пытаюсь сконфигурировать fuse. Ошибка остаётся.

arttykh
() автор топика
Ответ на: комментарий от arttykh

Ты пытаешься собирать очень древнюю версию fuse с относительно свежим ядром. Конфигуратор fuse'а не может найти информацию о версии ядра, потому что её нет там, где он её ищет. Попробуй патч ниже, может сработать.

diff -ur fuse-2.7.0.orig/kernel/configure fuse-2.7.0/kernel/configure
--- fuse-2.7.0.orig/kernel/configure	2007-07-02 15:49:23.000000000 +0400
+++ fuse-2.7.0/kernel/configure	2012-09-07 15:05:55.393615670 +0400
@@ -1856,6 +1856,7 @@
 	elif test -r $kernelbuild/include/linux/utsrelease.h && fgrep -q UTS_RELEASE $kernelbuild/include/linux/utsrelease.h; then
 		kernsrcver=`(echo "#include <linux/utsrelease.h>"; echo "kernsrcver=UTS_RELEASE") | cpp -I $kernelbuild/include | grep "^kernsrcver=" | cut -d \" -f 2`
 	fi
+	kernsrcver="2.6.35.13"
 	if test -z "$kernsrcver"; then
 		{ echo "$as_me:$LINENO: result: Not found" >&5
 echo "${ECHO_T}Not found" >&6; }
i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Патч помог. Fuse конфигурируется. Но при попытке собрать выдает ошибку:

In file included from /home/at/tv/fuse-2.7.0/kernel/dev.c:16:0:
include/linux/pagemap.h: In function ‘fault_in_pages_readable’:
include/linux/pagemap.h:415:16: warning: variable ‘c’ set but not used [-Wunused-but-set-variable]
/home/at/tv/fuse-2.7.0/kernel/dev.c: In function ‘fuse_req_init_context’:
/home/at/tv/fuse-2.7.0/kernel/dev.c:84:25: error: ‘struct task_struct’ has no member named ‘fsuid’
/home/at/tv/fuse-2.7.0/kernel/dev.c:85:25: error: ‘struct task_struct’ has no member named ‘fsgid’
/home/at/tv/fuse-2.7.0/kernel/dev.c: In function ‘fuse_dev_init’:
/home/at/tv/fuse-2.7.0/kernel/dev.c:1098:10: error: too many arguments to function ‘kmem_cache_create’
include/linux/slab.h:101:20: note: declared here
make[2]: *** [/home/at/tv/fuse-2.7.0/kernel/dev.o] Error 1
make[1]: *** [_module_/home/at/tv/fuse-2.7.0/kernel] Error 2
make[1]: Leaving directory `/home/at/tv/linux-2.6.35.13'
make: *** [all-spec] Error 2
 
arttykh
() автор топика
Ответ на: комментарий от arttykh

error: ‘struct task_struct’ has no member named ‘fsuid’

Значит, не судьба собрать. Ядерный модуль fuse использует устаревшие поля в task_struct. Теоретически, это возможно подправить, но я не хочу этим заниматься, да и смысла в этом не вижу. Используй fuse поновее, либо возьми ядро постарее (чтобы они оба были выпущены примерно в одно время).

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.