# 2025q1 Homework3 (kxo) contributed by < `hwz222` > :::danger 說好的進度呢? ::: [github](https://github.com/hwz222/kxo) ## xo-user.c (使用者層級) ### ## main.c (kernel module) ### 輸入模式 : raw_mode - 讀入鍵盤輸入內容(不用 enter),不顯示輸入。 - 使用 `tcgetattr(fd, &termios)` ,先取得取得舊的 fd 狀態並綁定 `atexit(func)` 在程式 exit 時恢復; 繼續設定 fd 的旗標屬性。 ```c raw.c_iflag &= ~IXON; // 關閉ctrl+s , ctrt+q raw.c_lflag &= ~(ECHO | ICANON); // 關閉顯示並一次讀一個 byte ``` ### 註冊 kxo device 流程 ```c //1 分配 major/minor ret = alloc_chrdev_region(&dev_id, 0, NR_KMLDRV, DEV_NAME); //2 初始化並註冊字符裝置 cdev_init(&kxo_cdev, &kxo_fops); ret = cdev_add(&kxo_cdev, dev_id, NR_KMLDRV); //3 創建 class 用於 sys/class/myclass kxo_class = class_create(DEV_NAME); //4 創建實體裝置節點 `/dev/DEV_NAME` 及 sys/class/myclass/DEV_NAME struct device *kxo_dev = device_create(kxo_class, NULL, MKDEV(major, 0), NULL, DEV_NAME); //5 在 sysfs 中建立屬性檔案, 需要有 mutex ret = device_create_file(kxo_dev, &dev_attr_kxo_state); ``` ### timer 觸發 handler ### zobrist.c - 棋盤上每個位置 struct 有 - 棋盤的每個位置有兩個 hash 值