--- title: 2023 年 Linux 核心設計 / 跟Jserv討論信 description: tags: Linux Kernal --- # 2023 年 Linux 核心設計 / 跟Jserv討論信 ## 前言 之前的學習經驗是寫可以執行的程式(我知道無法通過很多的特殊情況測試),主要都在VS上面寫C++,在修kernel的時候對於自己寫了什麼,要測試正確性就有很大的問題。 ## 不知道該如何有效的debug 舉個例子,在寫lab0-c時,我一開始只會用 `make qtest` ,跑分看看寫的如何,但是對於細節哪裡寫錯是不知道的(並非指程式語法上的錯誤,語法上編譯器會告訴我)而是說,如果有一個 `qtest` 評分項,有包含三四個用的函式,我不知道哪個錯?後來才看別人用 `./qtest` 來看有沒有錯。 ``` $ ls $ ./qtest ``` ``` cmd> new l = [] cmd> it RAND 10 l = [mcudbf eknyh wioyuqbud hmzpe aubwxltvh mlnnszh ednwjq iwdan btaqak doymlsox] cmd> sort l = [aubwxltvh btaqak doymlsox ednwjq eknyh hmzpe iwdan mcudbf mlnnszh wioyuqbud] ``` 這樣看有沒有執行上的正確效果(我知道這樣還無法確定程式有沒有寫好,但也只能這樣做) ## 不知道怎麼系統去理解專案 其二是就算讀了一個概念,也不知道要怎麼把程式銜接到專案。一樣舉例比較好理解。 例如fibrv專案之中, 在Big Number運算 ```c= struct BigN { unsigned long long lower, upper; }; ``` ```c= static inline void addBigN(struct BigN *output, struct BigN x, struct BigN y) { output->upper = x.upper + y.upper; if (y.lower > ~x.lower) output->upper++; output->lower = x.lower + y.lower; } ``` 看懂了把overflow的數字,切成不會爆跟會爆的。再對加法做處理,但我在寫入專案時,遇到的問題是: 按照編譯器的報錯,找到 `(ssize_t)` 強制轉型有問題 ```c= /* calculate the fibonacci number at given offset */ static ssize_t fib_read(struct file *file, char *buf, size_t size, loff_t *offset) { return (ssize_t) fib_sequence(*offset); } ``` 點開定義後,出現一下 ```c= #ifndef _SSIZE_T #define _SSIZE_T typedef __kernel_ssize_t ssize_t; #endif ``` 然後我就不知道要怎麼debug了。 補充: 之後我有問研究室的學長(之前修過本課程),就發現沒有用到 `kmalloc` 跟 `copy_to_user` ,我自己不能發現自己少用了什麼也是個學習上的大問題。 ## 近期做法 我前一陣子想說,是不是自己讀不夠?當然我目前也沒辦法看完成大wiki上的教材,有很多內容也看不懂意思。 這陣子的確有新增許多對於基本觀念的知識。例如Big/Little Endianness、Micro等等。但我確信自己實作一定做不出來,不知道這樣的學習方式有沒有大問題,或者我該如何修改呢? #### 希望有機會可以解決這些基礎問題,感謝老師指導。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up