[C][OpenBSD v3.3] Beep compilen, module ontbreekt

Pagina: 1
Acties:

  • TheManinBlack
  • Registratie: November 2001
  • Niet online
Hoi, thanks dat je dit leest.

Mijn probleem is het volgende; Ik wil graag de 'beep' utility ( http://www.johnath.com/beep/ ) op mijn OpenBSD systeem compileren en gebruiken. Vraag me niet waarom, ik vind het gewoon leuk om mee te klooien. Nu liep ik tegen een klein probleempje op:
Als ik de (razend) simpele handeling "make" uitvoer, geheel volgens de INSTALL file, dan krijg ik de volgende foutmelding:
code:
1
2
3
4
5
6
7
hydra# make
gcc -Wall -o beep beep.c
beep.c:28: linux/kd.h: No such file or directory
*** Error code 1

Stop in /root/downloads/beep-1.2.2 (line 14 of Makefile).
hydra#

Nu is mijn kennis van C beperkt, maar in dit geval is mijn conclusie dat ik een standaard library "kd.h" mis die blijkbaar nodig is voor het compilen. Jammergenoeg kan ik niets vinden over compatibiliteit met 'andere' systemen buiten Linux.

Een zoektocht op internet leverde echter wel de benodigde file op (of eigenlijk, de inhoud van de file);
http://www.lxhp.in-berlin.de/lhpioctl.html#kd.h

Mijn vraagjes; kan ik deze file zomaar toevoegen aan mijn systeem? Zal ie compatible zijn met mijn kernel? Loop ik het risico dat ik allerlei gaten opentrek in mijn installatie?
Als dit verder geen risico is, in welke directory verwacht gcc die file? Moet ik deze in /usr/include plaatsen? Moet ik de owner en group veranderen zodat ie matched met de owner en group (root,bin) van al die andere .h files? Of draait ie anders ook wel?

Overigens, ik draai OpenBSD v3.3 op i386 architectuur. Volgens mij is mijn gcc compiler v2.95.3. De 'beep' versie die ik wil compileren is de (huidige) 'current' versie, namelijk v1.2.2

Alvast bedankt voor de hulp!

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Je kunt wel de kd.h file op je systeem zetten, maar het probleem is dat beep een linux ioctl() gebruikt om een geluidje te maken. En op OpenBSD is die ioctl() misschien niet hetzelfde, en dan neem ik aan dat OpenBSD ook iets als een ioctl() functie kent.

"He took a duck in the face at two hundred and fifty knots."


  • TheManinBlack
  • Registratie: November 2001
  • Niet online
_Squatt_ schreef op 14 July 2003 @ 23:42:
Je kunt wel de kd.h file op je systeem zetten, maar het probleem is dat beep een linux ioctl() gebruikt om een geluidje te maken. En op OpenBSD is die ioctl() misschien niet hetzelfde, en dan neem ik aan dat OpenBSD ook iets als een ioctl() functie kent.
Ik heb nu ff dit gedaan;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
hydra# locate ioctl
/dev/audioctl
/dev/audioctl0
/usr/bin/audioctl
/usr/bin/radioctl
/usr/include/dev/pci/if_lmcioctl.h
/usr/include/dev/rndioctl.h
/usr/include/dev/vndioctl.h
/usr/include/i386/ioctl_fd.h
/usr/include/sys/ioctl.h
/usr/include/sys/ioctl_compat.h
/usr/include/xfs/xfs_pioctl.h
/usr/libdata/perl5/site_perl/i386-openbsd/dev/pci/if_lmcioctl.ph
/usr/libdata/perl5/site_perl/i386-openbsd/dev/rndioctl.ph
/usr/libdata/perl5/site_perl/i386-openbsd/dev/vndioctl.ph
/usr/libdata/perl5/site_perl/i386-openbsd/i386/ioctl_fd.ph
/usr/libdata/perl5/site_perl/i386-openbsd/sys/ioctl.ph
/usr/libdata/perl5/site_perl/i386-openbsd/sys/ioctl_compat.ph
/usr/libdata/perl5/site_perl/i386-openbsd/xfs/xfs_pioctl.ph
/usr/share/man/cat1/audioctl.0
/usr/share/man/cat1/radioctl.0
/usr/share/man/cat2/ioctl.0
/usr/share/man/cat3/k_pioctl.0
hydra#

Vooral die /usr/include/sys/ioctl.h geeft mij wel enigszins hoop. Er is, volgens de man pagina van ioctl ook een functie 'ioctl()'.

  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
Het enige wat in beep.c wordt gebruikt uit linux/kd.h is KIOCSOUND, dat is een constante defined als 0x4B2F.

Dus als je in beep.c de regel:
C:
1
#include <linux/kd.h>

vervangt door:
C:
1
#define KIOCSOUND 0x4B2F

dan kun je het prima compileren. Of het dan werkt is een tweede. Ik heb geen idee of de waardes voor de ioctl's hetzelfde zijn, waarschijnlijk niet. Misschien is er niet eens een ioctl voor wat je wilt in OpenBSD. Is er toevallig een man page genaamd ioctl_list in OpenBSD?

Probeer eens te greppen door /usr/include (en subdirs) op KIOCSOUND of sound of speaker ofzo.

edit:
Voor de duidelijkheid: met deze aanpassing compileert het, maar of het doet wat je wilt? Ik denk het niet, het kan net zo goed je harde schijven tot soep malen. Je moet de juiste waarde voor KIOCSOUND op OpenBSD zien te vinden. Of een beep.c die iemand anders al heeft aangepast voor OpenBSD.

[ Voor 22% gewijzigd door _Squatt_ op 15-07-2003 00:56 ]

"He took a duck in the face at two hundred and fifty knots."


  • TheManinBlack
  • Registratie: November 2001
  • Niet online
Thanks voor de tips, ik dacht "what the hell" en heb het gewoon geprobeert. Helaas......
code:
1
2
3
4
5
hydra# /usr/bin/beep -f 1000 -n -f 2000 -n -f 150
ioctl: Inappropriate ioctl for device
ioctl: Inappropriate ioctl for device
ioctl: Inappropriate ioctl for device
hydra#

Misschien als ik dus wel de juiste waarde heb voor die KIOCSOUND dat het dan wel gaat lukken.
Verder geen man pagina's gevonden, in de include's kwam ik hier een string tegen:
code:
1
2
3
4
hydra# grep -r -i KIOCSOUND /usr/include
/usr/include/i386/linux_machdep.h:#define       LINUX_KIOCSOUND   0x4b2f
/usr/include/machine/linux_machdep.h:#define    LINUX_KIOCSOUND   0x4b2f
hydra#

Dat was echter na compilen. Vreemd, want die waarde die daar staat is dezelfde die je opgaf.

  • stunn0r
  • Registratie: Juni 2002
  • Laatst online: 08:57
alleen kun je al aan het feit dat de auteur linux headers gebruikt opmaken dat het waarschijnlijk dus specifiek voor linux geschreven is.. misschien kan je de auteur vragen om hem te porten naar openbsd?
Pagina: 1