2016-06-09 60 views
0

我試圖在minix中更改鍵盤驅動程序,我的想法是在文件中存儲使用在keyboard.I中引入的所有字符我聲明一個全局FILE * fp並插入這段代碼/usr/src/drivers/tty/keyboard.cMinix鍵盤驅動程序

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」的目錄,然後重新啓動,但這不起作用。我的意思是,該文件沒有創建。 有什麼想法?

+0

「...不起作用」有點朦朧。請編輯你的問題,並添加一些關於什麼「不起作用」的附加信息。它太慢了嗎?不把密鑰寫入文件?在世界之間打開一扇門,通過它滲出最邪惡的瘟疫生物? –

+0

如果您正在修改鍵盤_driver_(即它在minux內核中),您將無法使用'stdio.h'樣式流[除非minux與我曾經使用過的其他任何unix內核不同] 。你將不得不使用內部minix函數來進行I/O。而且,「開放,寫一個字符,關閉」極其低效[並且可能導致併發症]。打開日誌文件_once_ –

+0

但我認爲minix驅動程序屬於用戶空間,並且在此minix教程中使用stdlib函數... http://wiki.minix3.org/doku.php?id=developersguide:driverprogramming –

回答

0

這不起作用。鍵盤驅動程序位於TTY「驅動程序」內,該驅動程序負責控制檯。 FS/VFS會將關於該控制檯的I/O請求傳輸到TTYfopen,fprintfclose是您執行此類請求的方法。但VFS只能處理來自「用戶」程序的請求(並將它們傳遞給驅動程序); TTY不是「用戶」程序,因此不允許執行I/O請求。

+1

然而, ,OP運行「make」並以某種方式認爲它已經建成。 – Kaz

+0

@AntonieL我很抱歉,但你錯了,程序工作正常,問題是我在其他目錄中運行「make」... –

+0

好吧,我錯了,因爲我誤解你寫的程序不是'TTY'(源代碼位於'/ usr/src/drivers/tty/keyboard.c'中),你的不明身份的程序很好。對不起,時間流逝了。 另外,你最好棄用重建內核。 – AntoineL

相關問題