# 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 值