系统调用 操作系统课程设计 Linux内核编译 centos Ubuntu
操作系統課設的題目,我的題目是“基于塊的設備驅動”,幫室友也做了系統調用的課程設計。
網上關于系統調用的資料多數都是用Ubuntu系統實現的,但我用的是centos做的,Ubuntu的做法基本一樣,不一樣的地方我會指出,沒指出的命令就是兩個都通用的。
目錄
一、實現功能
1.重新編譯Linux系統
2.增加一個系統調用
3.寫一個程序進行調用
二、前期準備
1.虛擬機安裝
2.鏡像文件配置
3.linux內核文件下載
三、增加系統調用&寫一個程序進行系統調用
1.增加系統調用號
2.增加系統調用函數聲明
3.增加系統調用函數(均在linux-4.20.2目錄下、打開管理員權限進行)
4.編譯
5.?編譯測試程序
提示一下,網上有很多教程在Ubuntu編譯的過程中會使用命令make clean,然后經常會報錯沒有什么ko文件,這個問題困擾了我同學很久,網上找不到什么靠譜的解決方法,所以我的解決辦法就是:不要用這個命令。
AND 編譯之后重啟的話 在開機的時候 一定要選擇新編譯好的內核進入,centos的開機的時候可以選擇新內核;Ubuntu的話可以在開機的時候長按shift進入引導界面,高級選項,然后進入新內核!
一、實現功能
1.重新編譯Linux系統
2.增加一個系統調用
3.寫一個程序進行調用
二、前期準備
一共包括以下幾個部分,在我的另一篇文章中有詳細教程(5條消息) 基于塊的Linux驅動程序 操作系統課程設計 塊設備驅動 linux內核編譯_m0_46362426的博客-CSDN博客
1.虛擬機安裝
2.鏡像文件配置
3.linux內核文件下載
三、增加系統調用&寫一個程序進行系統調用
1.增加系統調用號
先使用cd命令進入到linux目錄下,使用su打開管理員權限,隨后使用gedit命令編輯syscall_64.tbl文件
cd /usr/src/kernels/linux-4.20.2 su gedit arch/x86/entry/syscalls/syscall_64.tbl我這里原來是到334,所以加了一個335系統調用號,之后是一個tab鍵,64,一個tab鍵,hello,三個tab鍵,sys_hello
(這里注意,我打的不是空格鍵,而是tab鍵;并且不要為了和前面的一樣 而在sys_hello前面加上_x64)?
335 64 hello sys_hello然后保存并關閉文件。
2.增加系統調用函數聲明
使用gedit命令編輯syscalls.h文件
gedit include/linux/syscall_64.tbl拉到最下方,在endif上面加上一行:
asmlinkage long sys_hello(void);?然后保存并且關閉文件。
3.增加系統調用函數(均在linux-4.20.2目錄下、打開管理員權限進行)
使用gedit命令編輯kernel/sys.c? 文件
gedit kernel/sys.c同樣,拉到最下面,在endif上面添加系統調用函數?
asmlinkage long sys_hello(void){ printk(""Hello world!"); return 20210726; }(這里是printk,而不是printf,printk是內核態命令,在系統日志里面輸出的,可通過dmesg命令顯示出來,而printf就是用戶態命令,在終端輸出)。?
保存并關閉。
4.編譯
如果以下操作出現什么跟flex或者bison相關的,就是你沒下這兩個東西
centos的下載命令:sudo yum y install flex和sudo yum y install bison
Ubuntu的下載命令就是把yum y換成apt-get就可以了
#以下操作都要在打開su管理員權限下進行 make menuconfig make -j4 make modules_install make install編譯完成后重啟進入新內核。
編譯之后重啟的話 在開機的時候 一定要選擇新編譯好的內核進入,centos的開機的時候可以選擇新內核;Ubuntu的話可以在開機的時候長按shift進入引導界面,高級選項,然后進入新內核。?
centos的如圖,選第一個:
Ubuntu的我找了一張圖,大概是這樣,選第二個:
5.?編譯測試程序
我在主目錄下寫了這個測試程序,命名為test.c
#include<stdio.h> #include<linux/kernel.h> #include<sys/syscall.h> #include<unistd.h>int main() { long int a=syscall(335); printf("Today is %ld\n",a); return 0; }使用gcc命令進行測試,沒有的話可以安裝一下。
gcc test.c ./a.out?之后就大功告成啦!
總結
以上是生活随笔為你收集整理的系统调用 操作系统课程设计 Linux内核编译 centos Ubuntu的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1438):vue三种安装方式
- 下一篇: Linux终端命令