Sys_kill из syscall.h

Автор: felix Дата: 23.08.2005 11:08 Привет.

Установил себе вместо ASPLinux7.3 ASPLinux9.2 - перестал работать драйвер. Компилиться вроде нормально, а при insmod говорит unresolved symbol sys_kill.

В чём прикол?

Ядра в обоих случаях штатные.
Re: sys_kill из syscall.h 23.08.2005 11:40lystor felix писал:
> Установил себе вместо ASPLinux7.3 ASPLinux9.2 - перестал работать драйвер.
Какой драйвер? Чего драйвер? Версия драйвера? Ссылка на него?..
Re: sys_kill из syscall.h 23.08.2005 12:01felix Драйвер не из комплекта ядра... поставлялся вместе с контроллером arinc 429 с исходным кодом
В ASPLinux7.3 нормально компилился, загружался и работал... В ASPLinux9.2 компилиться нормально, а при загрузке выдаёт unresolved symbol sys_kill и не грузиться...

Дело в том, что в 7.3 в исходниках ядра был файл /usr/src/linux/include/linux/syscall.h, а в 9.2 в исодниках ядра его нет, зато он почему-то есть в /usr/include/linux...

Как теперь ипользовать в коде драйверов sys_kill? Или его надо чем-то заменить?
Re: sys_kill из syscall.h 23.08.2005 12:05lystor А вы загружать через modprobe не пробовали?
modprobe driver_name_without_o
Например драйвер называется coolcard.o
Запускаем modprobe coolcard
Re: sys_kill из syscall.h 23.08.2005 12:13felix Попробовал, пишет Can't locate module my_driver
Re: sys_kill из syscall.h 23.08.2005 12:20lystor Я бы на вашем месте попробовал поискать в интернет новый драйвер на эту плату.
Re: sys_kill из syscall.h 23.08.2005 12:36felix Придёться связываться с разработчиками.
Мне сначала показалось, что какая то проблема с исходниками ядра сбори ASP... Или я чего недоустановил... Похоже я ошибся...
Re: sys_kill из syscall.h 23.08.2005 18:07felix Не могу воткнуться?!?!?!?

куда делся sys_kill? В ядре 2.4.18 был, а в ядре 2.4.22 уже нет. И чё теперь делать? Чем его заменять?
Re: sys_kill из syscall.h 23.08.2005 18:22lystor У меня
ASPLinux10
kernel 2.6.12-1.1372.1asp

Посмотрел исходники ядра: drivers/pci/pci.ids
4ddc ILC Data Device Corp
0100 DD-42924I5-300 (ARINC 429 Data Bus)
0801 BU-65570I1 MIL-STD-1553 Test and Simulation
0802 BU-65570I2 MIL-STD-1553 Test and Simulation
0811 BU-65572I1 MIL-STD-1553 Test and Simulation
0812 BU-65572I2 MIL-STD-1553 Test and Simulation
0881 BU-65570T1 MIL-STD-1553 Test and Simulation
0882 BU-65570T2 MIL-STD-1553 Test and Simulation
0891 BU-65572T1 MIL-STD-1553 Test and Simulation
0892 BU-65572T2 MIL-STD-1553 Test and Simulation
0901 BU-65565C1 MIL-STD-1553 Data Bus
0902 BU-65565C2 MIL-STD-1553 Data Bus
0903 BU-65565C3 MIL-STD-1553 Data Bus
0904 BU-65565C4 MIL-STD-1553 Data Bus
0b01 BU-65569I1 MIL-STD-1553 Data Bus
0b02 BU-65569I2 MIL-STD-1553 Data Bus
0b03 BU-65569I3 MIL-STD-1553 Data Bus
0b04 BU-65569I4 MIL-STD-1553 Data Bus
Re: sys_kill из syscall.h 23.08.2005 18:35felix Не понял... Это что?
Re: sys_kill из syscall.h 23.08.2005 21:39lystor Не уверен, но думаю, что ваша плата поддерживается этим ядром.
Re: sys_kill из syscall.h 24.08.2005 10:06felix Не, точно не поддерживается... Эта плата разработка нашей фирмы ELCUS ( [www.elcus.ru] )...
У них там своя реализация arinc429...
Re: sys_kill из syscall.h 24.08.2005 10:59ukv > Дело в том, что в 7.3 в исходниках ядра был файл /usr/src/linux/include/linux/syscall.h, а в 9.2 в исодниках ядра его нет, зато он почему-то есть в /usr/include/linux...

Если вы путаетесь, в каких случаях используется /usr/src, а в каких /usr/include, то мо-моему надо внимательно подойти к самой сборке и установке модуля, в частности не пропуская depmod (Can't locate module... тоже неспроста).
Re: sys_kill из syscall.h 24.08.2005 12:55felix ukv писал(а):

> Если вы путаетесь, в каких случаях используется /usr/src, а в
> каких /usr/include, то мо-моему надо внимательно подойти к
> самой сборке и установке модуля, в частности не пропуская
> depmod (Can't locate module... тоже неспроста).

Я не то что путаюсь, я вообще не представляю в чём разница... В некоторой литературе вообще говорят сделать /usr/inclede/asm и /usr/include/linux ссылками на соответствующие каталоги в /usr/src/linux/include... Я так и сделал...

Но ведь не в этом дело. Вопрос в том - куда делся sys_kill из ядра 2.4.22?

В АСП 7.3 я загружал модуль обычным insmod из каталога где его и собирал, и никаких зависимостей у него нет.

Неужели ядра 2.4.18 и 2.4.22 так сильно отличаются, что приходиться исправлять драйверы?
Re: sys_kill из syscall.h 25.08.2005 00:04ukv /usr/include/linux - каталог для заголовков при отсутствии полных исходников ядра. Может использоваться для сборки дополнительных модулей.
/usr/src/linux/include/linux - в принципе должны быть те же заголовки, если установлены полные исходники ядра.
Но поскольку заголовки и полные исходники лежат в разных rpm, то можно получить конфликт версий после частичного обновления.
Что касается sys_kill, то он вроде всегда в файле kernel/signal.c , это внутренний вызов ядра. Загляните в /boot/System.map - там он должен фигурировать. Так что с ядром скорее всего все в порядке, надо разбираться с модулем - какие строчки этот sys_kill вызывают.
Re: sys_kill из syscall.h 25.08.2005 15:04felix ukv писал(а):

> Что касается sys_kill, то он вроде всегда в файле
> kernel/signal.c , это внутренний вызов ядра. Загляните в
> /boot/System.map - там он должен фигурировать. Так что с ядром
> скорее всего все в порядке, надо разбираться с модулем - какие
> строчки этот sys_kill вызывают.

Да, действительно, в kernel/signal.c он есть, но как его использовать, если его нет ни в одном заголовочном файле?

Вызывается он из обработчика прерываний:

...

#include <linux/config.h>
#include <linux/module.h>
#include <linux/syscall.h>
#include <asm/uaccess.h>
#include <linux/types.h>
#include <linux/pci.h>

...

void irq_handler1(int irq,
void *dev_id,
struct pt_regs *regs)
{
if (inw(PLX[0])&4)
{
rfiINT[0] = inw(rfi[0]);
sys_kill(hSEM[0],sigN[0]);
}
}

...
Re: sys_kill из syscall.h 25.08.2005 19:21leXa > Загляните в /boot/System.map - там он должен фигурировать.
Так все же, есть ли "он" там или нет? Улыбка У меня выглядит примерно так:
---
$ perl -ne 'print "$ARGV $_" if /sys_kill/;' /boot/System.map-*
/boot/System.map-2.6.10-1.14_FC2 c0129cf4 T sys_kill
/boot/System.map-2.6.10-1.771_FC2 c0129cf4 T sys_kill
/boot/System.map-2.6.10-1.9_FC2 c0128c97 T sys_kill
/boot/System.map-2.6.9-prepex c0123369 T sys_kill
---
Re: sys_kill из syscall.h 26.08.2005 10:51felix leXa писал(а):

> > Загляните в /boot/System.map - там он должен фигурировать.
> Так все же, есть ли "он" там или нет? Улыбка У меня выглядит
> примерно так:
> ---
> $ perl -ne 'print "$ARGV $_" if /sys_kill/;' /boot/System.map-*
> /boot/System.map-2.6.10-1.14_FC2 c0129cf4 T sys_kill
> /boot/System.map-2.6.10-1.771_FC2 c0129cf4 T sys_kill
> /boot/System.map-2.6.10-1.9_FC2 c0128c97 T sys_kill
> /boot/System.map-2.6.9-prepex c0123369 T sys_kill
> ---

Есть:

$ perl -ne 'print "$ARGV $_" if /sys_kill/;' /boot/System*
/boot/System.map c0128ae0 T sys_kill
/boot/System.map-2.4.22-1.2154.ntpl.asp c0128ae0 T sys_kill

но как его использовать?
Re: sys_kill из syscall.h 29.08.2005 20:31ukv А в h-файле sys_kill похоже и быть не должно, наверное писать модули с его использованием - плохой стиль.
Однако есть обходной путь - либо как в arc/x86_64/ia32/sys_ia32.c - добавить объявление непосредственно перед использованием, либо как в arch/sparc64/solaris/signal.c - получить этот адрес через макрос SYS(kill).
RSS-материал