LINUX.ORG.RU

Ошибка создания модуля ksplice-create


0

0

Добрый день! Нужно мне сделать работающим ksplice на моем ядре, соотвественно описываю кратко процесс:

tar zxf ksplice-0.9.9-src.tar.gz
cd ksplice-0.9.9
/* Патчу kmodsrc.c, код ниже */
./configure
make
sudo make install
Вот собственно сам код патча:
-static inline int within_module_core(unsigned long addr, struct module *mod)
+static inline int _within_module_core(unsigned long addr, struct module *mod)

-static inline int within_module_init(unsigned long addr, struct module *mod)
+static inline int _within_module_init(unsigned long addr, struct module *mod)
Собираю ядро:
make mapphone_defconfig
make -f kernel/kernel.mk KERNEL_CROSS_COMPILE=arm-android-linux-uclibcgnueabi-
Копируем System.map и .config в каталог kernel/ksplice Пытаюсь создать модуль:
export CROSS_COMPILE=arm-android-linux-uclibcgnueabi-
ksplice-create --diffext=.patched_ext kernel
Вот на этом то этапе и пояляется ошибка:
Starting kernel builds (this process might take a long time)...
rm ksplice-revert-stamp
  CHK     include/linux/version.h
make[1]: `include/asm-arm/mach-types.h' is up to date.
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-arm
  COMBINE /home/xvilka/build/ksplice/kernel/vmlinux.o
make: Entering directory `/home/xvilka/build/ksplice/kernel'

  WARNING: Symbol version dump /home/xvilka/build/ksplice/kernel/Module.symvers
           is missing; modules will have no dependencies and modversions.

  LD      /tmp/ksplice-tmp-r57grq/kmodsrc/built-in.o
  CC      /tmp/ksplice-tmp-r57grq/kmodsrc/offsets.o
  CC [M]  /tmp/ksplice-tmp-r57grq/kmodsrc/ksplice.o
/tmp/ksplice-tmp-r57grq/kmodsrc/ksplice.c:575: warning: 'arch_run_pre_cmp' used but never defined
/tmp/ksplice-tmp-r57grq/kmodsrc/ksplice.c:620: warning: 'handle_bug' used but never defined
  RMSYMS  /tmp/ksplice-tmp-r57grq/kmodsrc/ksplice-rmsyms.o
ksplice: died at ./objcommon.c:255
Child exited with signal 6
Failed during: /usr/local/libexec/ksplice-objmanip /tmp/ksplice-tmp-r57grq/kmodsrc/ksplice.o /tmp/ksplice-tmp-r57grq/kmodsrc/ksplice.o.rmsyms rmsyms
  CC [M]  /tmp/ksplice-tmp-r57grq/kmodsrc/x86/libudis86/itab.o
  CC [M]  /tmp/ksplice-tmp-r57grq/kmodsrc/x86/libudis86/input.o
  CC [M]  /tmp/ksplice-tmp-r57grq/kmodsrc/x86/libudis86/decode.o
  CC [M]  /tmp/ksplice-tmp-r57grq/kmodsrc/x86/libudis86/syn.o
  CC [M]  /tmp/ksplice-tmp-r57grq/kmodsrc/x86/libudis86/syn-intel.o
  CC [M]  /tmp/ksplice-tmp-r57grq/kmodsrc/x86/libudis86/syn-att.o
  CC [M]  /tmp/ksplice-tmp-r57grq/kmodsrc/x86/libudis86/udis86.o
  LD [M]  /tmp/ksplice-tmp-r57grq/kmodsrc/ksplice-gqmz0stj.o
/home/xvilka/build/x-tools/arm-android-linux-uclibcgnueabi/bin/.arm-android-linux-uclibcgnueabi-ld: /tmp/ksplice-tmp-r57grq/kmodsrc/ksplice-rmsyms.o: No such file: No such file or directory
make[1]: *** [/tmp/ksplice-tmp-r57grq/kmodsrc/ksplice-gqmz0stj.o] Error 1
make: *** [_module_/tmp/ksplice-tmp-r57grq/kmodsrc] Error 2
make: Leaving directory `/home/xvilka/build/ksplice/kernel'
Child exited with status 2
Failed during: make -rR -C /home/xvilka/build/ksplice/kernel M=/tmp/ksplice-tmp-r57grq/kmodsrc KSPLICE_KID=gqmz0stj KSPLICE_VERSION=0.9.9 map_printk=c03c11b8 KSPLICE_STANDALONE=1

В чем проблема? Помогите ее решить, спасибо!

★★★★★

Проблема оказалась в objmanip, который использует старые binutils

Оказался старым кусок кода, отвечающий за манипуляцию с обьектами - он зависит от старых binutils

XVilka ★★★★★
() автор топика

libbfd привязали новую - однако все равно вылетает с ошибкой при попытке выполнить вот этот кусок кода:

char **matching;
	if (bfd_check_format_matches(ibfd, bfd_archive, &matching) &&
	    bfd_openr_next_archived_file(ibfd, NULL) == NULL)
		{
	//	fprintf(stderr, "Mathing format is: _%s_\n", &matching);
		return 66;
		} /* empty archive */
	assert(bfd_check_format_matches(ibfd, bfd_object, &matching));

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

Если вдруг кому надо - то вот решение:

export PATH=$HOME/build/x-tools/arm-android-linux-uclibcgnueabi/bin:$PATH
export CROSS_COMPILE=arm-android-linux-uclibcgnueabi-
export KERNEL_CROSS_COMPILE=arm-android-linux-uclibcgnueabi-

1. Устанавливаем libbfd для кросс-сборки

cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src login
{enter "anoncvs" as the password}
cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src co binutils
cd binutils/bfd
./configure --enable-targets=arm-android-linux-uclibcgnueabi --prefix=$HOME/build/cross
make
make install
2. Устнавливаем ksplice
git clone http://www.ksplice.com/git/ksplice.git
cd ksplice
patch -p0 < ksplice.patch
./configure --with-libbfd=$HOME/build/cross/lib/libbfd.a --with-bfd-include-dir=$HOME/build/cross/include
make
sudo make install
3. Собираем ядро
make mapphone_defconfig
make -f kernel/kernel.mk
Копируем System.map и .config в каталог kernel/ksplice
ksplice-create --diffext=.patched_ext kernel

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