Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года

Форум

Вы не вошли.

 Поиск | Регистрация | Вход 

#1 Re: Техническая поддержка » Драйверы для OpenWRT » 24.01.2018 19:47:13

Уменьшение буфферов действительно помогло. Все модули успешно скомпилировались. Буду копать файл моего модуля на предмет функций put/get_array.
Благодарю за помощь, а также отдельно за разъяснение, почему так происходит.

#2 Re: Техническая поддержка » Драйверы для OpenWRT » 24.01.2018 12:43:10

Изначально вообще никаких опций задано не было. Но и с C90 имеем тоже самое. Получившийся Makefile.

OPENWRT = ${HOME}/OpenWRT/openwrt1505

KERNEL = ${OPENWRT}/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7628/linux-3.18.29
LD=${OPENWRT}/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-uclibc-ld
CROSS_COMPILE="mipsel-openwrt-linux-uclibc-"
KBUILD_HAVE_NLS=no
CONFIG_SHELL="/bin/bash" 




DEBUG=y

# To build modules outside of the kernel tree, we run "make"
# in the kernel source tree; the Makefile these then includes this
# Makefile once again.
# This conditional selects whether we are being included from the
# kernel Makefile or not.


ifeq ($(DEBUG),y)
 DEBFLAGS = -O -g -fno-builtin-memcpy -DLCARD_DEBUG
else
 DEBFLAGS = -O2
endif

EXTRA_CFLAGS+= $(DEBFLAGS)  

ifeq ($(KERNELRELEASE),)

    # Assume the source tree is where the running kernel was built
    # You should set KERNELDIR in the environment if it's elsewhere
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    # The current directory is passed to sub-makes as argument
    PWD := $(shell pwd)

modules:

#
# Make здесь
#
make -C ${KERNEL} ARCH="mips" CC="${OPENWRT}/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-uclibc-gcc -std=c90"  M=$(PWD) modules
#
#
#
		
	#$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

#modules_install:
#	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
cln:
	rm -rf *.o *~ core .depend .*.cmd *.mod.c .tmp_versions

.PHONY: modules modules_install clean

else
	ldevusb-objs = e2010.o e140.o e440.o e154.o ldevusbu.o
	ldevpci-objs = l760.o ldevpciu.o
	ldevpcibm-objs = l791.o ldevpcib.o
	# called from kernel build system: just declare what our modules are
	obj-m += ldevice.o
	obj-m += ldevpci.o
	obj-m += ldevusb.o
	obj-m += ldevpcibm.o
endif

#3 Техническая поддержка » Драйверы для OpenWRT » 23.01.2018 13:28:58

iham
Ответов: 7

Добрый день.

Драйверы Lcomp для Linux под Ubuntu скомпилировались без проблем, но при попытке компиляции под OpenWrt вылезают ошибки:

/home/iham/OpenWRT/L-card/ldevpciu.c: In function 'ldevpci_ioctl':
/home/iham/OpenWRT/L-card/ldevpciu.c:406:7: error: case label does not reduce to an integer constant
       case DIOC_GET_PARAMS:
/home/iham/OpenWRT/L-card/ldevpciu.c:413:7: error: case label does not reduce to an integer constant
       case DIOC_READ_FLASH_WORD:
/home/iham/OpenWRT/L-card/ldevpciu.c:421:7: error: case label does not reduce to an integer constant
       case DIOC_WRITE_FLASH_WORD:

и т.д.

Я так понимаю компилятору не нравится, что в case стоит НЕ integer constant. Декларация макросов в ioctl.h выглядит так:

#define DIOC_GET_PARAMS      _IOWR(0x97, 23, IOCTL_BUFFER)
#define DIOC_READ_FLASH_WORD     _IOWR(0x97, 27, IOCTL_BUFFER)
#define DIOC_WRITE_FLASH_WORD   _IOWR(0x97, 28, IOCTL_BUFFER)

Можно, конечно, переписать весь код в if-else, но может быть существует способ обойтись малой кровью?

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск