LINUX.ORG.RU

нужно создать Kbuild и Makefile
примеры:
Kbuild

obj-m  := mymodule.o

Makefile
KERNELDIR := /home/sbauer/devel/DE1-SOC/linux-socfpga-socfpga-4.4

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

но перед компиляцией нужно скачать cross-toolchain (например, gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux) и запустить такой скрипт:
#!/bin/bash

if [ "$ARCH" = "arm" ]; then
    echo unsetting ARCH=${ARCH}
    [ ! "x$OLDPATH" = "x" ] && export PATH=$OLDPATH
    unset ARCH CROSS_COMPILE LOADADDR OLDPATH
else
    export OLDPATH=$PATH
    export ARCH=arm
    export CROSS_COMPILE=arm-linux-gnueabihf-
    export LOADADDR=0x8000

    export PATH=$PATH:/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin
    echo setting ARCH=${ARCH}
fi

p.s. это для архитектуры armhf

metawishmaster ★★★ ()
Последнее исправление: metawishmaster (всего исправлений: 1)
Ответ на: комментарий от metawishmaster

Какая-то реакция есть)[rb] Сколько я понимаю cross-toolchain ставить не нужно если я собираю непосредственно на на SoC Lime2?
Makefile

KERNELDIR := /lib/modules/4.6.3-sunxi/build
obj-m += sndi2s.o

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


Kconfig

obj-m  := sndi2s.o


вывод

make all
make -C /lib/modules/4.6.3-sunxi/build M=`pwd` modules
make[1]: Entering directory '/usr/src/linux-headers-4.6.3-sunxi'
  CC [M]  /root/src/sndi2s.o
/root/src/sndi2s.c:24:29: fatal error: plat/sys_config.h: No such file or directory
 #include <plat/sys_config.h>
                             ^
compilation terminated.
scripts/Makefile.build:297: recipe for target '/root/src/sndi2s.o' failed
make[2]: *** [/root/src/sndi2s.o] Error 1
Makefile:1429: recipe for target '_module_/root/sunxi-i2s-src' failed
make[1]: *** [_module_/root/sunxi-i2s-src] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.6.3-sunxi'
Makefile:5: recipe for target 'all' failed
make: *** [all] Error 2

Тут как я понимаю не хватает sys_config.h хотя я его и положил в папку plat.
Не очень понимаю как действовать дальше и что делать с заголовком sys_config.h?
Или нужно тащить все исходники ядра?

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

cross-toolchain ставить не нужно если я собираю непосредственно на на SoC Lime2?


нужно тащить все исходники ядра?


2x"ну да" :)

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

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

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

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

А как же конфиг?

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

Все исходники SUNXI весят под 1.2 гига, а мне нужно собрать один лишь модуль.
Меня больше интересует почему компилятор не видит хэдер sys_config.h который явно присутствует в двух фолдерах

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

почему компилятор не видит хэдер sys_config.h который явно присутствует в двух фолдерах

в каких именно?
может нужно заменить

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

на
$(MAKE) -C $(KERNELDIR) -I$(KERNELDIR)/arch/arm/plat-sunxi/include M=`pwd` modules

(или какой там путь?)

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

Там в древних ядрах у allwinner'а слегка укуренная система сборки. Собирай отдельно. Ты вадь не забываешь ARCH указать? В plax-x/inlude (если там такой был каталог уже) можно класть хедеры, должны быть доступны по умолчанию. если такого не было, подкладывай в mach (mach-sunxi/include/mach) ну и поменять #include. Собирать

$(MAKE) -C ${KERNELDIR} ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- M=`pwd` modules
$(MAKE) -C ${KERNELDIR} ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- M=`pwd` modules_install

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