1、前言html
第二次實驗是實現與學號有關係統調用,在第一次實驗基礎上進行。linux
第一次實驗是編譯本身的linux內核http://www.javashuo.com/article/p-twxatnme-ms.html。ubuntu
環境仍是ubuntu18.04 + linux5.6.14內核 + vmwarevim
2、實驗過程記錄函數
1. 輸入命令 cd /usr/src/linux-5.6.14/ 進入內核目錄。測試
輸入 sudo vim arch/x86/entry/syscalls/syscall_64.tbl , 在此文件中添加本身的系統調用編號spa
編號依次增長,注意 name 與 entry point名稱啊!線程
修改完成保存!!!htm
2. 系統調用號已經添加了,內核就知道有這麼個東西。接下來咱們須要實現系統調用。blog
以函數的形式,進行函數聲明和函數定義。如今先來聲明函數吧。
執行命令 sudo vim include/linux/syscalls.h 。
在文件最後添加函數聲明(vim下,shift+G迅速到達),完成後保存!
3. 聲明添加了,接下來就是函數定義了。輸入命令 sudo vim kernel/sys.c。
一樣在文件最後進行函數定義。
注意內核打印函數是 printk();
我這裏第一個函數是文本測試,第二個是實驗要求:
奇數學號輸出後五位,偶數學號輸出後六位。完成後保存!
4. 好了,如今系統調用作完了。從新編譯內核吧~
依次執行如下命令,這些命令都很熟悉了,再也不作解釋。
1. sudo make mrproper
2. sudo make clean
3. sudo make nconfig (進入界面後保存退出,可參考上一篇博客!)
4. sudo make -j4 (仍舊是四個線程跑,會快不少!)
5. sudo make modules_install (make完成後執行)
6. sudo make install
5. 上述步驟完成後重啓!
3、測試
好了,如今系統調用模塊完成了,咱們作一些測試。
終端輸入 sudo touch test.c
使用vim編寫 sudo vim test.c
(syscall第一個參數是系統調用編號,就是第一步你設置過的。後面的就是參數,這點和函數相似)
終端編譯 sudo gcc -o test test.c
運行 sudo ./test
由於內核打印不必定會顯示,但會保存在內核緩衝區。
咱們執行命令 sudo dmesg就可看到結果。