Linux-Development-Sys Digest #450, Volume #8 Mon, 29 Jan 01 12:13:16 EST
Contents:
Re: Why max 8 SCSI LUNS/device (Josef Moellers)
Re: Forcing a Core Dump (Chain-Wu Lee)
Re: Communication between kernel module and user space program (Arne Driescher)
Re: Newbie to kernel module programming (Arne Driescher)
Re: PCI bus access (Arne Driescher)
Re: VFS messages ("Peter T. Breuer")
Re: Newbie to kernel module programming
Re: getche() (George Houpis)
Kernel's HARD reset (David Vidal Rodriguez)
Re: how to trace Xlib calls? (Mike McDonald)
----------------------------------------------------------------------------
From: Josef Moellers <[EMAIL PROTECTED]>
Subject: Re: Why max 8 SCSI LUNS/device
Date: Mon, 29 Jan 2001 14:03:21 +0100
Bill Anderson wrote:
> =
> Is there any (good) reason why the kernel still limits (apparently even=
> in 2.4) the maximum number of LUNS/SCSI device to 8?
> =
> If not, how difficult would it be to modify that?
boot: linux max_scsi_luns=3D128
Works for us,
-- =
Josef M=F6llers (Pinguinpfleger bei FSC)
If failure had no penalty success would not be a prize
-- T. Pratchett
------------------------------
From: [EMAIL PROTECTED] (Chain-Wu Lee)
Subject: Re: Forcing a Core Dump
Date: Mon, 29 Jan 2001 15:10:52 GMT
If you really wants it core dump, use some variable divided by 0.
-Chain-Wu
On Sun, 07 Jan 2001 18:54:20 GMT, Paul Pluzhnikov <[EMAIL PROTECTED]> wrote:
>"Marc Schneider" <[EMAIL PROTECTED]> wrote in message
>news:[EMAIL PROTECTED]...
>> I have a bug which is difficult to debug. I am getting intermitted
>> Segmentation Fault in my program. If I run the program in a debugger, it
>> doesn't segfault. I would like to force my program to dump core for all
>> segfaults. Is there an easy way to do this?
>>
>
>Your program most likely *already* dumps core *every* time
>it encounteres a segmentation fault (that is the default).
>It does not, however, encounter the condition that causes segfault, when run
>under debugger.
>
>Make sure you run the program in the same environment and with the same
>arguments when you run it under debugger.
>
>If segfault still does not occur, you have several options:
>
>- do post-mortem analysis:
>
> gdb exename core
> (gdb) where
>
>- utilize one of the memory-checking tools:
> mpatrol, efence, Insure++
>
>
>
--
--
Chain-Wu Lee, �����^
------------------------------
From: Arne Driescher <[EMAIL PROTECTED]>
Subject: Re: Communication between kernel module and user space program
Date: Mon, 29 Jan 2001 16:29:27 +0100
Kasper Dupont wrote:
>
> knightG wrote:
> >
> > Hello, we've been trying to establish somekind of connection between kernel
> > and USP(user space programm).
> > We've decided to use a character device.
> > The problem is that USP has to read from characted device all the time,
> > which is stupid.We've tried using SELECT however it doesn't seem to have any
> > effect because select seems to check if he MAY read the data not checking
> > the changes.
> >
> > Does anyone has experience with our program ? Are there any other solutions
> > for it ?
> >
> > Thank you in advance,
> > Gregor Doltar
>
> I think your struct file_operations must contain
> a poll methode for select to work. I don't know
> the details about how it works.
>
> Some example code can be found in
> linux/drivers/char/random.c look for the
> differences between random_fops and urandom_fops.
>
> --
> Kasper Dupont
Actually, it is probably the easiest call to add to any driver
that has some kind of waitq in it.
/* Implementation of standard poll system call */
#define __NO_VERSION__ /* don't define kernel_verion in module.h */
#include <linux/module.h>
#include "main.h" // for dev
#include "vfs_poll.h" // prototype for driver_poll (for your
file_struct)
/* Standard poll methode */
unsigned int
driver_poll(struct file *file, poll_table *poll_wait_table)
{
unsigned int mask=0; // 0 means no data available
unsigned int device_index =
MINOR(file->f_dentry->d_inode->i_rdev);
/*
Queue the current process in the wait queue.
We go to sleep here and will awake on next signal or irq.
*/
poll_wait(file, &(dev[device_index].driver_waitq),
poll_wait_table);
/* Either a signal or a irq arrived. The irq-handler sends
a wakeup.
*/
// This is for my ring buffer: head!=tail means we have data
if(dev[device_index].head != dev[device_index].tail) {
// Normal data are readable
mask |= POLLIN | POLLRDNORM;
}
return mask;
}
So, check your driver code for the poll function and if you cannot
find it add it yourself.
-Arne
------------------------------
From: Arne Driescher <[EMAIL PROTECTED]>
Subject: Re: Newbie to kernel module programming
Date: Mon, 29 Jan 2001 16:33:58 +0100
Let's guess:
You haven't forgot -D__KERNEL__ -DMODULE -O2
in the gcc-command line by chance?
Just a guess :-)
-Arne
------------------------------
From: Arne Driescher <[EMAIL PROTECTED]>
Crossposted-To:
comp.os.linux.development.apps,comp.os.linux.hardware,comp.os.linux.misc
Subject: Re: PCI bus access
Date: Mon, 29 Jan 2001 16:38:23 +0100
David Florez wrote:
>
> Hi All,
> Does anybody know if there is a way of mapping
> the physical PCI bus addresses into user memory
> space (being user root if needed)?
>
> I need to write an application that will be
> accessing the PCI bus VERY often. The only thing
> I can think of is adding a module to the kernel
> (device driver) that maps the PCI bus to kernel
> linear space ( by calling ioremap() ) and
> therefore the user app would have to issue a
> system call to request a PCI bus data transaction
> to the device driver. The idea would be finding a
> way of getting rid of these overkilling system
> calls.
The trick is called mmap. This means you have to write
a device driver (module) that implements the mmap system call.
Basically it works like:
1) The user uses address=mmap(FileHandle,some parameter ..) to
get an address where the mem is mapped.
2) The request is routed to your driver and used to setup
some memory mapping.
Good luck,
Arne
------------------------------
From: "Peter T. Breuer" <[EMAIL PROTECTED]>
Subject: Re: VFS messages
Date: Mon, 29 Jan 2001 17:11:39 +0100
Johnny Choque <[EMAIL PROTECTED]> wrote:
> I am obtaining many messages in /var/log/messages and /var/log/debug
> like the following one:
> KERNEL: VFS: Disk change detected on device ide0(3,64)
> and I don't want that those messages appear, How I can make that?
Mmm. Tough one. Remove hdb? (or at least fix it).
Is it a cdrom? Perhaps you shouldn't keep changing the cdrom!
If you don't like the message (which is presumably a correct message)
you can always comment it out of the source.
Peter
------------------------------
From: [EMAIL PROTECTED] ()
Subject: Re: Newbie to kernel module programming
Date: Mon, 29 Jan 2001 16:31:05 -0000
In article <5Q7d6.17022$[EMAIL PROTECTED]>,
Rich C. <[EMAIL PROTECTED]> wrote:
>I followed all the examples exactly, and tried to compile them. For some
>reason, I get errors when I try to compile the lines:
>
>#if CONFIG_MODVERSIONS==1
>#define MODVERSIONS
>#include <linux/modversions.h>
>#endif
It would help a lot if you'd actually post the errors. Saying "I get errors"
makes anyone trying to help have to guess.
--
http://www.spinics.net/linux
------------------------------
From: George Houpis <[EMAIL PROTECTED]>
Subject: Re: getche()
Date: Mon, 29 Jan 2001 10:32:22 -0600
This is a multi-part message in MIME format.
==============913CB45DBE9FF88BC0D43246
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Well Filipe, here is some code that you can use/modify for your use. It does
use the termios functions. Terminal attributes dictate by default use unlimited
timer, no character maximum. You need to change it to unlimited time but
one character buffer (so that when the buffer is full, it returns and does not
block.) Attached code is derived from the late Richard Stevens who wrote
the book "Advanced Programming in the Unix Environment." This is a decent
beginner book around $50-$60.
To use these functions, try
tty_cbreak( STDIN_FILENO);
or
tty_raw( STDIN_FILENO);
where STDIN_FILENO is the file descriptor for standard input (stdin maps to
this file descriptor) which defaults to 0. 1 is stdout, and 2 is stderr.
I recommend that you read the code and understand the terminal attribute
setting functions: tcsetattr
Enjoy
George Houpis
root wrote:
> I just wanted a funtion that could get input without need to press enter. I don't
> need to change the echo.
> How can i change the terminal setup from c/c++. Writting to some files?
> BTW what are terminal modes. I am really a newbie. Please use basic words.
>
> Thanks for your help.
>
> George Houpis wrote:
>
> > Try getchar(). If you need it without blocking or without echoing, then you
> > have more work to do, i.e. you need to setup terminal modes.
> >
> > getchar() need #include <stdio.h>, Linux does not use conio.h, that is unique
> > to DOS...
> >
> > Welcome to the better programming environment.
> >
> > George
> >
> > Filipe Maia wrote:
> >
> > > Is there a equivelant linux function for the windows getche from conio.h?
> > > I am newbie in programming and i am having some difficulties in porting code
> > > from win to linux.
> > > Can someone help me?
==============913CB45DBE9FF88BC0D43246
Content-Type: text/plain; charset=us-ascii;
name="tty.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="tty.c"
/* -*- mode: C; mode: fold -*-
* File: tty.c
*
* Purpose: The module will allow establishment of CBREAK mode for the
* terminal which is necessary to process in non-blocking mode.
*
*
*/
#include <termios.h>
#include <unistd.h>
#include <stdio.h>
#include "tty.h"
/* GLOBALS */
static struct termios save_termios;
static int ttysavefd = -1;
static enum { RESET, RAW, CBREAK, NOWAIT} ttystate = RESET;
int tty_nowait( int fd) /*{{{*/
{
/* This function will place the terminal into cbreak mode. */
struct termios buf;
if( (ttystate == CBREAK) || (ttystate == RAW) || (ttystate == NOWAIT))
return( 0);
if( tcgetattr( fd, &save_termios) < 0)
{
/*err_msg( "Unable to get terminal information.");*/
fprintf( stderr, "Warning: tty: tty_nowait: Unable to get terminal
information.\n");
return( -1);
}
buf = save_termios; /* Structure copy. */
buf.c_lflag &= ~(ECHO | ICANON); /* Echo off, canonical mode off. */
/* One bytes at a time, no timer. */
buf.c_cc[VMIN] = 0;
buf.c_cc[VTIME] = 0;
if( tcsetattr( fd, TCSAFLUSH, &buf) < 0)
{
/*err_msg( "Unable to set terminal information.");*/
fprintf( stderr, "Warning: tty: tty_nowait: Unable to set terminal
information.\n");
return( -1);
}
/* Save information. */
ttystate = NOWAIT;
ttysavefd = fd;
return( 0);
}
/*}}}*/
int tty_cbreak( int fd) /*{{{*/
{
/* This function will place the terminal into cbreak mode. */
struct termios buf;
if( (ttystate == CBREAK) || (ttystate == RAW) || (ttystate == NOWAIT))
return( 0);
if( tcgetattr( fd, &save_termios) < 0)
{
/* err_msg( "Unable to get terminal information."); */
fprintf( stderr, "Warning: tty: tty_cbreak: Unable to get terminal
information.\n");
return( -1);
}
buf = save_termios; /* Structure copy. */
buf.c_lflag &= ~(ECHO | ICANON); /* Echo off, canonical mode off. */
/* One bytes at a time, no timer. */
buf.c_cc[VMIN] = 1;
buf.c_cc[VTIME] = 0;
if( tcsetattr( fd, TCSAFLUSH, &buf) < 0)
{
/*err_msg( "Unable to set terminal information."); */
fprintf( stderr, "Warning: tty: tty_cbreak: Unable to set terminal
information.\n");
return( -1);
}
/* Save information. */
ttystate = CBREAK;
ttysavefd = fd;
return( 0);
}
/*}}}*/
int tty_raw( int fd) /*{{{*/
{
/* This function will place the terminal into raw mode. */
struct termios buf;
if( (ttystate == CBREAK) || (ttystate == RAW) || (ttystate == NOWAIT))
return( 0);
if( tcgetattr( fd, &save_termios) < 0)
{
/*err_msg( "Unable to get terminal information.");*/
fprintf( stderr, "Warning: tty: tty_raw: Unable to get terminal
information.\n");
return( -1);
}
buf = save_termios; /* Structure copy. */
/* Turn off echo, cononical mode, extended input processing, and signal chars. */
buf.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
/* Turn off SIGINT on BREAK, CR-to-NL, input parity check,
* stripping 8th bit on input, output flow control. */
buf.c_iflag &= ~(BRKINT | ICRNL |INPCK | ISTRIP | IXON);
/* Clear size bits, parity checking off. */
buf.c_cflag &= ~(CSIZE | PARENB);
/* Set 8 bits per character. */
buf.c_cflag |= CS8;
/* Output processing off. */
buf.c_oflag &= ~(OPOST);
/* 1 byte at a time, no timer. */
buf.c_cc[VMIN] = 1;
buf.c_cc[VTIME] = 0;
if( tcsetattr( fd, TCSAFLUSH, &buf) < 0)
{
/* err_msg( "Unable to set terminal information."); */
fprintf( stderr, "Warning: tty: tty_raw: Unable to set terminal
information.\n");
return( -1);
}
/* Save information. */
ttystate = RAW;
ttysavefd = fd;
return( 0);
}
/*}}}*/
int tty_reset( int fd) /*{{{*/
{
/* This function will restore the input. */
if( (ttystate != CBREAK) && (ttystate != RAW) && (ttystate != NOWAIT))
return( 0); /* No need. */
if( fd != ttysavefd)
{
/*err_msg( "This terminal is not saved.");*/
fprintf( stderr, "Warning: tty: tty_reset: This terminal is not saved.\n");
return( -1);
}
if( tcsetattr( fd, TCSAFLUSH, &save_termios) < 0)
{
/*err_msg( "Unable to reset terminal information.");*/
fprintf( stderr, "Warning: tty: tty_reset: Unable to reset terminal
information.\n");
return( -1);
}
ttystate = RESET;
return( 0);
}
/*}}}*/
void tty_atexit( void) /*{{{*/
{
/* This function can be set up by atexit( tty_atexit) */
if( ttysavefd >= 0)
tty_reset( ttysavefd);
} /*}}}*/
int tty_getchar( void) /*{{{*/
{
/* Returns the key pressed on the Sun keyboard.
* This function will return -1 for unknown, or if the terminal is not set to
cbreak.
* NOTE: THIS FUNCTION RETURNS MORE VALUES THAN ARE DEFINED IN THE HEADER FILE.
* THIS IS INTENTIONAL, OTHERWISE THE LIST WOULD BE HUGE!
*/
int key;
int value;
int metaflag = 0;
/* If not in cbreak mode, then this command should be invalid. */
if( ttystate != CBREAK)
return( KEY_UNKNOWN);
/* Get the current character. */
switch( (key = getchar()))
{
case 0x1b: /* Escape. */
if( (key = getchar()) == 0x1b) metaflag = META_FLAG;
switch( key)
{
case 0x5b: /* Arrow keys. */
switch( (key = getchar()))
{
case '1': /* Function key. */
case '2': /* Function key. */
case '3': /* Function key. */
value = ((key - '0') * 10);
if( ((key = getchar()) < '0') && (key > '9')) /* If not a digit,
then this is the insert key. */
return( KEY_INSERT | (((key = getchar()) == 0x24 || key ==
0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag);
value += (key - '0');
key = getchar();
if( (value >= 11) && (value <= 21)) return( (KEY_F_BASE + (value -
10)) | ((key == '^')?CTL_FLAG:0) | metaflag);
else if( (value >= 23) && (value <= 34)) return( (KEY_F_BASE +
(value - 22)) | SHIFT_FLAG | ((key == '^')?CTL_FLAG:0) | metaflag);
else return( KEY_UNKNOWN);
break;
case 'A': return( KEY_UP | metaflag); break; /* Up. */
case 'B': return( KEY_DOWN | metaflag); break; /* Down. */
case 'C': return( KEY_RIGHT | metaflag); break; /* Right. */
case 'D': return( KEY_LEFT | metaflag); break; /* Left. */
case 'a': return( KEY_SHIFT_UP | metaflag); break; /* Shift-Up. */
case 'b': return( KEY_SHIFT_DOWN | metaflag); break; /* Shift-Down. */
case 'c': return( KEY_SHIFT_RIGHT | metaflag); break; /* Shift-Right.
*/
case 'd': return( KEY_SHIFT_LEFT | metaflag); break; /* Shift-Left. */
/* case 0x32: return( KEY_INSERT | (((key = getchar()) == 0x24 || key
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break;
*/
case 0x35: return( KEY_PAGE_UP | (((key = getchar()) == 0x24 || key ==
0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; /*
Page Up. */
case 0x34: /* Keypad. */
switch( getchar())
{
case 0x31: return( KEY_HOME | (((key = getchar()) == 0x24 || key
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break;
/* Page Home. */
case 0x32: return( KEY_UP | (((key = getchar()) == 0x24 || key ==
0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; /*
Up. */
case 0x33: return( KEY_PAGE_UP | (((key = getchar()) == 0x24 ||
key == 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag);
break; /* Page Up. */
case 0x34: return( KEY_LEFT | (((key = getchar()) == 0x24 || key
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break;
/* Left. */
case 0x35: return( KEY_CENTER | (((key = getchar()) == 0x24 ||
key == 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag);
break; /* Page Up. */
case 0x36: return( KEY_RIGHT | (((key = getchar()) == 0x24 || key
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break;
/* Right. */
case 0x37: return( KEY_END | (((key = getchar()) == 0x24 || key
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break;
/* Page End. */
case 0x38: return( KEY_DOWN | (((key = getchar()) == 0x24 || key
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break;
/* Down. */
case 0x39: return( KEY_PAGE_DOWN | (((key = getchar()) == 0x24 ||
key == 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag);
break; /* Page Down. */
default: return( KEY_UNKNOWN); /* Unknown! */
}
case 0x36: return( KEY_PAGE_DOWN | (((key = getchar()) == 0x24 || key
== 0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break;
/* Page Down. */
case 0x37: return( KEY_HOME | (((key = getchar()) == 0x24 || key ==
0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; /*
Page Home. */
case 0x38: return( KEY_END | (((key = getchar()) == 0x24 || key ==
0x40)?SHIFT_FLAG:0) | ((key == 0x5e || key == 0x40)?CTL_FLAG:0) | metaflag); break; /*
Page End. */
default: return( KEY_UNKNOWN); /* Undefined in this code. */
}
break;
case 0x4f: /* Ctrl-arrow. */
switch( getchar())
{
case 'a': return( KEY_UP | CTL_FLAG | metaflag); break; /* Ctl-Up. */
case 'b': return( KEY_DOWN | CTL_FLAG | metaflag); break; /* Ctl-Down.
*/
case 'c': return( KEY_RIGHT | CTL_FLAG | metaflag); break; /*
Ctl-Right. */
case 'd': return( KEY_LEFT | CTL_FLAG | metaflag); break; /* Ctl-Left.
*/
default: return( KEY_UNKNOWN); /* Undefined in this code. */
}
break;
default: /* Return META+key */
return( META_FLAG | key);
}
break;
default: /* Normal key. */
return( key);
}
/* Should never reach here. */
return( KEY_UNKNOWN);
}
/*}}}*/
==============913CB45DBE9FF88BC0D43246
Content-Type: text/plain; charset=us-ascii;
name="tty.h"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="tty.h"
#ifndef TTY_H
#define TTY_H
/* File: tty.h
*
* Purpose: The module will allow establishment of CBREAK mode for the
* terminal which is necessary to process in non-blocking mode.
*
*
*/
/* FUNCTIONS PROTOTYPES. */
int tty_nowait( int fd);
int tty_cbreak( int fd);
int tty_raw( int fd);
int tty_reset( int fd);
void tty_atexit( void);
int tty_getchar( void);
/* DEFINES. */
#define KEY_UNKNOWN -1
#define META_FLAG 0x4000
#define CTL_FLAG 0x2000
#define SHIFT_FLAG 0x1000 /* ONLY OF FUNCTION KEYS. */
#define KEY_UP 257
#define KEY_DOWN 258
#define KEY_RIGHT 259
#define KEY_LEFT 260
#define KEY_SHIFT_UP (SHIFT_FLAG | KEY_UP)
#define KEY_SHIFT_DOWN (SHIFT_FLAG | KEY_DOWN)
#define KEY_SHIFT_RIGHT (SHIFT_FLAG | KEY_RIGHT)
#define KEY_SHIFT_LEFT (SHIFT_FLAG | KEY_LEFT)
#define KEY_BACKSPACE 8 /* BACKSPACE IS SHIFT+BACKSPACE! */
#define KEY_DELETE 261
#define KEY_INSERT 262
#define KEY_CENTER 263
#define KEY_PAGE_UP 264
#define KEY_PAGE_DOWN 265
#define KEY_HOME 266
#define KEY_END 267
#define KEY_F_BASE 300
#define KEY_F1 301
#define KEY_F2 302
#define KEY_F3 303
#define KEY_F4 304
#define KEY_F5 305
/* CODE 306 intenionally left out. */
#define KEY_F6 307
#define KEY_F7 308
#define KEY_F8 309
#define KEY_F9 310
#define KEY_F10 311
#define META_1 (META_FLAG | '1')
#define META_2 (META_FLAG | '2')
#define META_3 (META_FLAG | '3')
#define META_4 (META_FLAG | '4')
#define META_5 (META_FLAG | '5')
#define META_6 (META_FLAG | '6')
#define META_7 (META_FLAG | '7')
#define META_8 (META_FLAG | '8')
#define META_9 (META_FLAG | '9')
#define META_0 (META_FLAG | '0')
#define META_a (META_FLAG | 'a')
#define META_b (META_FLAG | 'b')
#define META_c (META_FLAG | 'c')
#define META_d (META_FLAG | 'd')
#define META_e (META_FLAG | 'e')
#define META_f (META_FLAG | 'f')
#define META_g (META_FLAG | 'g')
#define META_h (META_FLAG | 'h')
#define META_i (META_FLAG | 'i')
#define META_j (META_FLAG | 'j')
#define META_k (META_FLAG | 'k')
#define META_l (META_FLAG | 'l')
#define META_m (META_FLAG | 'm')
#define META_n (META_FLAG | 'n')
#define META_o (META_FLAG | 'o')
#define META_p (META_FLAG | 'p')
#define META_q (META_FLAG | 'q')
#define META_r (META_FLAG | 'r')
#define META_s (META_FLAG | 's')
#define META_t (META_FLAG | 't')
#define META_u (META_FLAG | 'u')
#define META_v (META_FLAG | 'v')
#define META_w (META_FLAG | 'w')
#define META_x (META_FLAG | 'x')
#define META_y (META_FLAG | 'y')
#define META_z (META_FLAG | 'z')
#define META_A (META_FLAG | 'A')
#define META_B (META_FLAG | 'B')
#define META_C (META_FLAG | 'C')
#define META_D (META_FLAG | 'D')
#define META_E (META_FLAG | 'E')
#define META_F (META_FLAG | 'F')
#define META_G (META_FLAG | 'G')
#define META_H (META_FLAG | 'H')
#define META_I (META_FLAG | 'I')
#define META_J (META_FLAG | 'J')
#define META_K (META_FLAG | 'K')
#define META_L (META_FLAG | 'L')
#define META_M (META_FLAG | 'M')
#define META_N (META_FLAG | 'N')
#define META_O (META_FLAG | 'O')
#define META_P (META_FLAG | 'P')
#define META_Q (META_FLAG | 'Q')
#define META_R (META_FLAG | 'R')
#define META_S (META_FLAG | 'S')
#define META_T (META_FLAG | 'T')
#define META_U (META_FLAG | 'U')
#define META_V (META_FLAG | 'V')
#define META_W (META_FLAG | 'W')
#define META_X (META_FLAG | 'X')
#define META_Y (META_FLAG | 'Y')
#define META_Z (META_FLAG | 'Z')
#endif
==============913CB45DBE9FF88BC0D43246==
------------------------------
From: David Vidal Rodriguez <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.misc
Subject: Kernel's HARD reset
Date: Mon, 29 Jan 2001 18:00:35 +0100
Hi there!
I have a (veeeery old) Pentium90 (AMI-Bios), and I've been using Linux
for relatively long time now (3 years). My problem is the following:
If I power on the machine, I can see the IRQ assignments being done to
PCI devices, also after having rebooted using any Microsoft OS, because
they all do a warm reboot, ie, no memory test is done. But now I've
noticed that the Linux kernel makes some kind of cold reboot that makes
the BIOS get confused: no assigments are done, concretely sth like "PCI
slot 1 using IRQ: none" appears.
I haven't taken care about this till some days ago, when I bought a
USB PCI card. It works perfectly when it has an IRQ assigned for it, but
after rebooting with Linux, neither Windows 2000 will boot (a Blue
Screen of Death comes out with a STOP: IRQ_NOT_LESS_OR_EQUAL) nor Linux
2.4 will detect the USB device, for nothing is to be seen in
/proc/interrupts, /proc/devices or /proc/bus. Only the reset switch will
help after rebooting the machine with the "Penguin" :-P.
So what's the problem? I don't expect an explanation from the BIOS' side
(if any) but from the kernel's, in other words: can I do something on
the kernel for it to perform a warm reboot, just as all Win* will do?
Thanks in advance,
--
------------------------------------------------------------------------
David Vidal R. ([EMAIL PROTECTED])
------------------------------
Reply-To: [EMAIL PROTECTED]
From: [EMAIL PROTECTED] (Mike McDonald)
Subject: Re: how to trace Xlib calls?
Date: Mon, 29 Jan 2001 17:05:45 GMT
In article <953dbs$cjl$[EMAIL PROTECTED]>,
[EMAIL PROTECTED] writes:
> Hello,
>
>
> I would like to trace which Xlib calls are performed from Java Virtual
> Machine. I need to trace these calls at X server side because this
> application is Java based and no one tracing tool (for example 'ltrace' or
> 'sniffit') can deep to 2nd calls, performed from called Java libs. As I
> understand, I need to compile Xlib from sources with corresponded printf(s),
> but I don't want to spend time in playing with Xlib sources.
>
> Does anybody know how could I solve this problem? Which tools should I use to
> catch Xlib calls at X server side or perhaps there is such a flag in existing
> X server environment? Any other suggestions?
What you want is called an X proxy server. They accept X connections and the
X protocol packets, do something with them, and then forward them onto a real
X server. The do something with them part could be to print them out! There's
two that came with my RH6.2 system so it shouldn't be too hard to find the
soucres of one and hack it to do the printing. (There might already be one on
x.org that does it.)
Mike McDonald
[EMAIL PROTECTED]
------------------------------
** FOR YOUR REFERENCE **
The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:
Internet: [EMAIL PROTECTED]
You can send mail to the entire list by posting to the
comp.os.linux.development.system newsgroup.
Linux may be obtained via one of these FTP sites:
ftp.funet.fi pub/Linux
tsx-11.mit.edu pub/linux
sunsite.unc.edu pub/Linux
End of Linux-Development-System Digest
******************************