# [SOLVED] kompilacja modułu jądra z poziomu ebuilda

## n3rd

Witam,

Mam moduł jądra, który chcę instalować z poziomu ebuild. Makefile wygląda tak:

```
KERNELDIR := /lib/modules/`uname -r`/build

obj-m := nazwa_mod.o

default:

        $(MAKE) -C $(KERNELDIR) M=`pwd` modules
```

I kiedy chcę to skompilować wszystko działa prawidłowo:

```
$ make

make -C /lib/modules/`uname -r`/build M=`pwd` modules

make[1]: Entering directory `/usr/src/linux-3.2.9-hardened'

  CC [M]  /home/danice/mod/nazwa_mod.o

  Building modules, stage 2.

  MODPOST 1 modules

  CC      /home/danice/mod/nazwa_mod.mod.o

  LD [M]  /home/danice/mod/nazwa_mod.ko

make[1]: Leaving directory `/usr/src/linux-3.2.9-hardened'
```

I zabrałem się do przygotowanie do tego ebuildu ale dostaję coś takiego:

```
>>> Compiling source in /var/tmp/portage/dev-util/modtest-0.1/work ...

make -C /lib/modules/`uname -r`/build M=`pwd` modules

make[1]: Entering directory `/usr/src/linux-3.2.9-hardened'

Makefile:610: /usr/src/linux-3.2.9-hardened/arch/amd64/Makefile: No such file or directory

make[1]: *** No rule to make target `/usr/src/linux-3.2.9-hardened/arch/amd64/Makefile'.  Stop.

make[1]: Leaving directory `/usr/src/linux-3.2.9-hardened'

make: *** [default] Error 2
```

I teraz o co chodzi z tą linią 610:

```
$ sed -n 607,612p /lib/modules/3.2.9-hardened/build/Makefile

endif

endif

include $(srctree)/arch/$(SRCARCH)/Makefile

ifneq ($(CONFIG_FRAME_WARN),0)
```

Wygląda na to, że problem jest z tym, jak w zmiennych definiowana jest SRCARCH. Przypuszczalnie portage ustawia tę zmienną na "amd64" a niestety jądro ma to ustawione albo na x86 albo x86_64 (dlatego nie znajduje 'amd64').

Czy ktoś może ma pomysł w jaki sposób można rozwiązać ten problem?

Pozdrawiam,

daniel

----------

## SlashBeast

Mozesz sprobowac przekazac poprawne SRCARCH do Make, poinienes tez przekazac KERNELDIR poniewaz uzywanie 'uname -r' to naprawde zly pomysl.

Jednak najpierw radzil bym Ci sprawdzenie czy mozesz uzyc linux-mod eclass. Przykladowy ebuild z acpI_call:

```

EAPI=3

EGIT_REPO_URI="git://github.com/mkottman/acpi_call.git"

inherit git-2 linux-info linux-mod

DESCRIPTION="A kernel module that enables you to call ACPI methods"

HOMEPAGE="http://github.com/mkottman/acpi_call"

SRC_URI=""

LICENSE="GPL-2"

SLOT="0"

KEYWORDS=""

IUSE=""

CONFIG_CHECK="ACPI"

MODULE_NAMES="acpi_call(misc:${S})"

BUILD_TARGETS="clean default"

```

Wszystkie funkcje wywola eclass.

----------

## n3rd

Dzięki! Przerobiłem Makefile bazując na acpi_call oraz dodałem zmiany w ebuild i teraz wszystko działa znakomicie  :Smile: 

Swoją drogą, to nie wiem, czy kiedyś nie warto w gentoo zrobić globalnego porządku z tym, aby oznaczenie architektury 64-bitowej było zgodne z oznaczeniem używanym w jądrze, czyli x86_64 zamiast amd64.

Pozdrawiam

----------

