【问题标题】:Minix keyboard DriverMinix 键盘驱动程序
【发布时间】:2016-06-09 18:34:10
【问题描述】:

我正在尝试更改 minix 中的键盘驱动程序,我的想法是将键盘中使用的所有字符存储在一个文件中。我声明一个全局 FILE * fp 并将这段代码插入 /usr/ src/drivers/tty/keyboard.c

while (icount > 0) {
         scode = *itail++;      /* take one key scan code */
          if (itail == ibuf + KB_IN_BYTES) itail = ibuf;
          icount--;

          /* Function keys are being used for debug dumps. */
          if (func_key(scode)) continue;

           /* Perform make/break processing. */
           ch = make_break(scode);

           if (ch <= 0xFF) {
                  /* A normal character. */

                  fp = fopen("log.txt","a+");
                  fprint(fp,"%c",ch);
                  fclose(fp);

                   buf[0] = ch;
                   (void) in_process(tp, buf, 1);
          } else ...

然后我在目录中运行“make”并重新启动,但这不起作用。我的意思是,该文件未创建。 有什么想法吗?

【问题讨论】:

  • “...不起作用”有点朦胧。请编辑您的问题并添加一些有关“不起作用”的附加信息。是不是太慢了?不将密钥写入文件?打开世界之间的门户,通过它渗出最邪恶的瘟疫生物?
  • 如果你是真正修改键盘驱动(即在minux内核中),你将无法使用@987654323 @风格流[除非minux与我曾经使用过的所有其他unix内核不同]。您必须使用内部 minix 函数进行 I/O。而且,open, write one char, close 的效率非常低效[并且可能导致并发症]。打开日志文件一次
  • 但是我认为minix驱动属于用户空间,在这个minix教程中使用stdlib函数...wiki.minix3.org/doku.php?id=developersguide:driverprogramming

标签: c driver minix


【解决方案1】:

这行不通。键盘驱动程序位于TTY“驱动程序”中,这是一个负责控制台的服务。 FS/VFS 会将有关该控制台的 I/O 请求传输到 TTY。代码中的fopenfprintfclose 是执行此类请求的方法。但是VFS 只能处理来自“用户”程序的请求(并将它们传送给驱动程序); TTY 不是“用户”程序,因此不允许执行 I/O 请求。

【讨论】:

  • 然而,OP 运行“make”并以某种方式认为它已构建。
  • @AntonieL 对不起,你错了,程序运行正常,问题是我在其他目录中运行“make”...
  • 好吧,我错了,我误会了你写的程序不是TTY(源在/usr/src/drivers/tty/keyboard.c),你的不明程序就可以了。对不起失去的时间。此外,您最好不要重建内核。
猜你喜欢
  • 2014-02-26
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 2020-01-24
  • 2016-05-26
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多