學習筆記 作業系統Linux-Ubuntu 之初次新增系統呼叫

Levi_Tang發表於2019-03-25

最近有個新增系統呼叫的作業,對於筆者這樣的菜鳥來說很是吃力啊,不過好在最終還是解決了,記錄寫下解決過程,希望能幫到更多的人。

1.ubuntu的安裝

由於我是windows環境,想要裝雙系統,單系統的同學可以跳過這步。

這裡要感謝我的一個同學給我製作的u盤啟動盤。不過製作過程也很簡單,大家可以百度。

  1. 分配限制空間。windows下先在磁碟中分出足夠的空間
  2. u盤啟動。插入u盤後,開機時 按某個功能鍵(可能是F2或者F12),我是小米筆記本pro,按F12 進入選擇載入u盤
  3. 安裝ubuntu。進入ubuntu引導頁,選擇安裝ubuntu,語言地區什麼的都不重要,選看得懂的。這裡注意了!!安裝型別:選其他,然後開始分割槽。
  4. 分割槽。可以自行百度linux分割槽方案。因為我們要新增系統呼叫,後面編譯的時候如果空間不足會很麻煩(當然如果你會擴充套件掛載點的空間除外,我就是因為不會擴充套件後面空間不足重灌了兩次系統 

        這裡我建議分成

  • swap  邏輯分割槽 交換空間 類似記憶體 大致小於你的記憶體一些就行2G-8G
  • /boot 邏輯分割槽 這是引導分割槽 也就是說 之後你編譯的新核心的引導會在這裡,如果你要編譯多個核心,或者核心較大,請多分配一點! 我就是在這裡吃了虧,編譯第三個核心的時候空間不足了。1G以上(網上都是幾百M,我覺得不太夠,如果你的儲存空間大,請多分一點不要吝嗇,上網查如何擴充套件/boot分割槽,看到那些麻煩的方法,你就知道為什麼我要這麼說了,當然你是高手除外)
  • /         主分割槽 根掛載點 相當於你的系統盤 儘量大吧(第一次我只給了20G,結果爆了,第二次我給了100G,發現系統編譯完用了26G,供參考)
  • /home 邏輯分割槽 放使用者的檔案,你閒置的空間省下來都可以給它了。大約幾十G,根據你自己的空間而定

     5.設定你的使用者名稱和密碼,等待安裝成功從重啟。第一次有可能會卡住,安裝成功後按電源鍵就好啦,沒關係的,重啟以後你就可以進入你的ubuntu啦。


2.新系統驅動的安裝

按道理說,系統安裝好就能用了,這裡為什麼還要安裝驅動呢?由於我的筆記本顯示卡是nvidia,所以要安裝顯示卡驅動,不然有的時候會莫名卡?不知道是不是ubuntu系統bug。 沒出現卡的小夥伴可以跳過這步

參考來源:https://blog.csdn.net/aofengdaxia/article/details/82772529

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-390

安裝好了重啟然後

nvidia-smi
nvidia-settings

如果出現那麼就成功啦!

小夥伴們接下來可以安裝一些諸如輸入法的東西讓自己用的舒服一點。

好了,終於把前置工作做完了,接下來正式開工!!

 

3.新增系統呼叫

  1. 下載核心。在/usr/src下載核心 apt-get install linux-source
  2. 解壓。 在/usr/src 下       tar –jxvf linux-source****.tar.bz2      中間的***是你的版本號 你可以使用Tab鍵將他補全
  3. 開啟系統呼叫表。 進入你解壓後的資料夾 然後 執行
    sudo gedit arch/x86/syscalls/syscall_64.tbl 

     

  4. 往系統呼叫表裡新增一項系統呼叫號。如
    334     common    mysyscall      sys_mysyscall
    格式和檔案中一致,系統呼叫號需要是之前沒用過的(如334)
  5. 申明系統呼叫服務原型  開啟檔案
    sudo gedit include/linux/syscalls.h

    新增 

    asmlinkage long sys_mysyscall(void)

     

  6. 實現系統呼叫服務例程 

          開啟檔案

sudo gedit kernel/sys.c

         實現系統呼叫例程(以單純printk為例)

SYSCALL_DEFINE0(mysyscall)
{
    printk("hello this is my syscall test");
    return 0;
}

     7.重新編譯核心

     到這裡系統呼叫就成功新增啦!

最近有點忙,什麼時候有空再把編譯核心步驟和測試系統呼叫也寫一下。

如果哪裡有問題還請大家多多指正!!

相關文章