* [uml-devel] Using __initcall from um/drivers/chan_kern.c / fun with keyboard
@ 2005-10-03 6:02 Nelson Castillo
2005-10-03 18:51 ` Blaisorblade
0 siblings, 1 reply; 3+ messages in thread
From: Nelson Castillo @ 2005-10-03 6:02 UTC (permalink / raw)
To: user-mode-linux-devel; +Cc: Linux en-Caja
[-- Attachment #1: Type: text/plain, Size: 1613 bytes --]
Hi, I'm sending a patch that allows me to query the
number of keys pressed by the user (I'll copy [4]).
Actually, I'm counting scancodes and some keys
send more than one.
It works well.
--------------
# cat /proc/keystrokes
29
--------------
I read [1] and skimmed over [2] and I think I'm using
the __init and __initcall macros well, but I get this
error when I try to use them:
CC arch/um/drivers/chan_kern.o
arch/um/drivers/chan_kern.c:111: error: `proc_kst_init' undeclared
here (not in a function)
arch/um/drivers/chan_kern.c:98: warning: `proc_kts_init' defined but not used
make[1]: *** [arch/um/drivers/chan_kern.o] Error 1
make: *** [arch/um/drivers] Error 2
98 : static int __init proc_kts_init(void)
99 : {
111 : __initcall(proc_kst_init);
What should I do/try?
Can I use these macros in um/drivers/chan_kern.c?
Related questions:
* Is there a better place to to this in UML?
* What would be the right place to do in
ix86 (or arch independant)?
Blaisorblade told me to it in serio[3], but I don't know
where I should put the hooks. I think I can also use
drivers/char/keyboard.c
[1]http://people.netfilter.org/~rusty/unreliable-guides/kernel-hacking/routines-init-again.html
[2]http://geek.vtnet.ca/doc/initcall/review.html
[3]http://marc.theaimsgroup.com/?l=user-mode-linux-user&m=112827478307626&w=2
[4]http://bodq.vstu.edu.ua/activity/data/k.html
--
Homepage : http://geocities.com/arhuaco
The first principle is that you must not fool yourself
and you are the easiest person to fool.
-- Richard Feynman.
[-- Attachment #2: config_proc_keystrokes.patch --]
[-- Type: text/x-patch, Size: 2670 bytes --]
diff -u linux-2.6.13.2.orig/arch/um/drivers/chan_kern.c linux-2.6.13.2/arch/um/drivers/chan_kern.c
--- linux-2.6.13.2.orig/arch/um/drivers/chan_kern.c 2005-09-16 20:02:12.000000000 -0500
+++ linux-2.6.13.2/arch/um/drivers/chan_kern.c 2005-10-03 00:22:14.000000000 -0500
@@ -19,6 +19,101 @@
#include "line.h"
#include "os.h"
+#define CONFIG_PROC_KSTROKES
+
+/*
+ * I'm trying to learn how to intercept keyboard keystrokes in
+ * Linux. I want to gather some statistics.
+ *
+ * For instance, a count of each pressed key (A-Z). I guess I will
+ * have to do ( counter % 100) on each counter for security reasons.
+ *
+ * Arhuaco. Oct 2 / 2005.
+ */
+
+#ifdef CONFIG_PROC_KSTROKES
+
+#define KST_DEBUG 1
+#define KST_LOG_LEN 32
+
+#include <linux/seq_file.h>
+#include <linux/proc_fs.h>
+#include <linux/init.h>
+
+/*
+ * Do we need this to use __init and __initcall?
+ * #include <linux/module.h> */
+
+unsigned int kst_count = 0;
+
+#if KST_DEBUG
+char kst_log[KST_LOG_LEN];
+int kst_actual = 0;
+#endif
+
+static int proc_kst_show(struct seq_file *m, void *v)
+{
+ #if KST_DEBUG
+ int error = 0;
+ int i;
+
+ error =
+ #endif
+
+ seq_printf(m, "%d\n", kst_count);
+
+ #if KST_DEBUG
+
+ for (i = 0; !error && i < KST_LOG_LEN; i++)
+ {
+ if (i)
+ error = seq_putc(m, ' ');
+
+ if (!error)
+ error = seq_printf(m, "%x", kst_log[i]);
+ }
+
+ if (!error)
+ seq_printf(m, "\nactual %d\n", kst_actual);
+
+ #endif
+
+ return 0;
+}
+
+static int proc_kst_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, proc_kst_show, NULL);
+}
+
+static struct file_operations proc_kst_operations = {
+ .open = proc_kst_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+
+static int /*__init*/ proc_kts_init(void)
+{
+ struct proc_dir_entry *e;
+
+ e = create_proc_entry("keystrokes", 0, NULL);
+
+ if (e)
+ e->proc_fops = &proc_kst_operations;
+ else
+ printk(KERN_ERR "chan_kern.c : /proc/keystrokes creation failed \n");
+
+ return 0;
+}
+
+/* __initcall(proc_kst_init); <<== Make it work */
+
+int kst_did_init = 0;
+
+#endif /* CONFIG_PROC_KSTROKES */
+
#ifdef CONFIG_NOCONFIG_CHAN
/* The printk's here are wrong because we are complaining that there is no
@@ -113,6 +208,22 @@
return(0);
else if(n == 0)
return(-EIO);
+
+#ifdef CONFIG_PROC_KSTROKES
+ kst_count ++;
+
+ if (!kst_did_init) /* TODO: use __initcall */
+ {
+ proc_kts_init();
+ kst_did_init = 1;
+ }
+
+ #if KST_DEBUG
+ kst_log[kst_actual] = *c_out;
+ kst_actual = (kst_actual + 1) % KST_LOG_LEN;
+ #endif
+#endif
+
return(n);
}
[-- Attachment #3: config_proc_keystrokes__initcall-not-working.patch --]
[-- Type: text/x-patch, Size: 2399 bytes --]
--- linux-2.6.13.2.orig/arch/um/drivers/chan_kern.c 2005-09-16 20:02:12.000000000 -0500
+++ linux-2.6.13.2/arch/um/drivers/chan_kern.c 2005-10-03 00:57:26.000000000 -0500
@@ -19,6 +19,99 @@
#include "line.h"
#include "os.h"
+#define CONFIG_PROC_KSTROKES
+
+/*
+ * I'm trying to learn how to intercept keyboard keystrokes in
+ * Linux. I want to gather some statistics.
+ *
+ * For instance, a count of each pressed key (A-Z). I guess I will
+ * have to do ( counter % 100) on each counter for security reasons.
+ *
+ * Arhuaco. Oct 2 / 2005.
+ */
+
+#ifdef CONFIG_PROC_KSTROKES
+
+#define KST_DEBUG 1
+#define KST_LOG_LEN 32
+
+#include <linux/seq_file.h>
+#include <linux/proc_fs.h>
+#include <linux/init.h>
+
+/*
+ * Do we need this to use __init and __initcall?
+ * #include <linux/module.h> */
+
+unsigned int kst_count = 0;
+
+#if KST_DEBUG
+char kst_log[KST_LOG_LEN];
+int kst_actual = 0;
+#endif
+
+static int proc_kst_show(struct seq_file *m, void *v)
+{
+ #if KST_DEBUG
+ int error = 0;
+ int i;
+
+ error =
+ #endif
+
+ seq_printf(m, "%d\n", kst_count);
+
+ #if KST_DEBUG
+
+ for (i = 0; !error && i < KST_LOG_LEN; i++)
+ {
+ if (i)
+ error = seq_putc(m, ' ');
+
+ if (!error)
+ error = seq_printf(m, "%x", kst_log[i]);
+ }
+
+ if (!error)
+ seq_printf(m, "\nactual %d\n", kst_actual);
+
+ #endif
+
+ return 0;
+}
+
+static int proc_kst_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, proc_kst_show, NULL);
+}
+
+static struct file_operations proc_kst_operations = {
+ .open = proc_kst_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
+
+static int __init proc_kts_init(void)
+{
+ struct proc_dir_entry *e;
+
+ e = create_proc_entry("keystrokes", 0, NULL);
+
+ if (e)
+ e->proc_fops = &proc_kst_operations;
+ else
+ printk(KERN_ERR "chan_kern.c : /proc/keystrokes creation failed \n");
+
+ return 0;
+}
+
+__initcall(proc_kst_init);
+
+#endif /* CONFIG_PROC_KSTROKES */
+
#ifdef CONFIG_NOCONFIG_CHAN
/* The printk's here are wrong because we are complaining that there is no
@@ -113,6 +206,16 @@
return(0);
else if(n == 0)
return(-EIO);
+
+#ifdef CONFIG_PROC_KSTROKES
+ kst_count ++;
+
+ #if KST_DEBUG
+ kst_log[kst_actual] = *c_out;
+ kst_actual = (kst_actual + 1) % KST_LOG_LEN;
+ #endif
+#endif
+
return(n);
}
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [uml-devel] Using __initcall from um/drivers/chan_kern.c / fun with keyboard
2005-10-03 6:02 [uml-devel] Using __initcall from um/drivers/chan_kern.c / fun with keyboard Nelson Castillo
@ 2005-10-03 18:51 ` Blaisorblade
2005-10-03 19:04 ` Nelson Castillo
0 siblings, 1 reply; 3+ messages in thread
From: Blaisorblade @ 2005-10-03 18:51 UTC (permalink / raw)
To: user-mode-linux-devel, Nelson Castillo; +Cc: Linux en-Caja
On Monday 03 October 2005 08:02, Nelson Castillo wrote:
> Hi, I'm sending a patch that allows me to query the
> number of keys pressed by the user (I'll copy [4]).
> --------------
> # cat /proc/keystrokes
> 29
> --------------
> I read [1] and skimmed over [2] and I think I'm using
> the __init and __initcall macros well, but I get this
> error when I try to use them:
>
> CC arch/um/drivers/chan_kern.o
> arch/um/drivers/chan_kern.c:111: error: `proc_kst_init' undeclared
> here (not in a function)
> arch/um/drivers/chan_kern.c:98: warning: `proc_kts_init' defined but not
If you pasted the correct error message and the correct code, they both say
"kst" on one line and "kts" on the other. You have a trivial typo.
> What should I do/try?
> Can I use these macros in um/drivers/chan_kern.c?
Yes, take the right include and you can (use <linux/init.h>, not
arch/um/include/init.h)
> Blaisorblade told me to it in serio[3], but I don't know
> where I should put the hooks. I think I can also use
> drivers/char/keyboard.c
If it's arch-independent, you maybe can. But you'd better ask this on LKML,
probably.
--
Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade
___________________________________
Yahoo! Messenger: chiamate gratuite in tutto il mondo
http://it.messenger.yahoo.com
-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [uml-devel] Using __initcall from um/drivers/chan_kern.c / fun with keyboard
2005-10-03 18:51 ` Blaisorblade
@ 2005-10-03 19:04 ` Nelson Castillo
0 siblings, 0 replies; 3+ messages in thread
From: Nelson Castillo @ 2005-10-03 19:04 UTC (permalink / raw)
To: user-mode-linux-devel
On 10/3/05, Blaisorblade <blaisorblade@yahoo.it> wrote:
>You have a trivial typo.
Yup :( Thanks.
--
Homepage : http://geocities.com/arhuaco
The first principle is that you must not fool yourself
and you are the easiest person to fool.
-- Richard Feynman.
-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-10-03 19:04 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-03 6:02 [uml-devel] Using __initcall from um/drivers/chan_kern.c / fun with keyboard Nelson Castillo
2005-10-03 18:51 ` Blaisorblade
2005-10-03 19:04 ` Nelson Castillo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox