Я пытаюсь включить мой собственный заголовочный файл и его соответствующий исходный код в мой модуль ядра. Но по какой-то странной причине я всегда получаю ту же ошибку при создании моего модуля. Может ли кто-нибудь объяснить мне, почему и как я могу это исправить?C Makefile - Как добавить файлы заголовков при создании (linux kernel)?
У меня есть следующие сделать файл:
TARGET = procdriver
obj-m := procdriver.o
procdriver-obj+= gpioLib.o
KDIR:= /home/pi/myRpi/linux
PWD := $(shell pwd)
all: gpioLib.o procdriver.c
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
rm -r -f .tmp_versions *.mod.c .*.cmd *.o *.symvers
gpioLib.o: gpioLib.c gpioLib.h
gcc -c gpioLib.c -o gpioLib.o
clean:
make -C $(KDIR) SUBDIRS=$(PWD) clean
со следующей частью «основной код», который, как предполагается, станет .ko файл для драйвера Procfs:
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include "gpioLib.h"
static int __init hello_proc_init(void) {
int i;
//initialize GPIO
procFileStr = proc_create("procdriver", 0, NULL, &hello_proc_fops);
printk(KERN_DEBUG MODULE_NAME "init procdriver!\n");
for (i=0; i<43; i++)
{
gpioSetMode(i, PI_OUTPUT); ////THIS IS THE PROBLEM
}
return 0;
}
И мой заголовок файлы, которые я пытаюсь включить, чтобы сохранить его структурированным.
gpioLib.c
#include "gpioLib.h"
void gpioSetMode(unsigned gpio, unsigned mode)
{
int reg, shift;
reg = gpio/10;
shift = (gpio%10) * 3;
gpioReg[reg] = (gpioReg[reg] & ~(7<<shift)) | (mode<<shift);
}
и соответствующий gpioLib.h
#define PI_ALT3 7
#define PI_ALT4 3
#define PI_ALT5 2
void gpioSetMode(unsigned gpio, unsigned mode);
Это ошибка я получаю каждый раз:
[email protected]:~/myRpi $ make
gcc -c gpioLib.c -o gpioLib.o
make -C /home/pi/myRpi/linux SUBDIRS=/home/pi/myRpi modules
make[1]: Entering directory '/home/pi/myRpi/linux'
CC [M] /home/pi/myRpi/procdriver.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "gpioSetMode" [/home/pi/myRpi/procdriver.ko] undefined!
CC /home/pi/myRpi/procdriver.mod.o
LD [M] /home/pi/myRpi/procdriver.ko
make[1]: Leaving directory '/home/pi/myRpi/linux'
rm -r -f .tmp_versions *.mod.c .*.cmd *.o *.symvers
Удивительно, что не решить проблему! – LandonZeKepitelOfGreytBritn
Вы добавили ключевое слово 'extern' в * описание функции * в файл' gpioLib.h', а не в * определение функции * в файле 'gpioLib.c'? – SergeyLebedev
Да (несколько символов mor) – LandonZeKepitelOfGreytBritn