1. 程式人生 > >作業系統實驗一(核心編譯,系統呼叫)

作業系統實驗一(核心編譯,系統呼叫)

作業系統實驗一

——-系統呼叫

注:  實驗前的準備工作就不一一敘述了。

Ubuntu執行環境:mac osx10.9.1 +VMware Fusion 6.0.2

Ubuntu 版本: 12.10   64位

具體實驗流程如下:

1.安裝有關編譯程式。(這是第二次重灌虛擬機器時候加入的步驟, 不然在make步驟中會報錯,要事先安裝好有關編譯程式)

sudo  apt-getinstall build-essential kernel-package  libncurses5-dev

2.下載需要編譯的核心原始碼檔案。(直接在終端上下載。找到適合對應版本Ubuntu的核心原始碼)

sudo apt-getinstall linux-source

安裝介面如下:


(圖一:提示安裝核心原始碼)


(圖二:核心原始碼安裝完成)

3。進入 /usr/src,解壓原始碼檔案

cd /usr/src

sudo tar jxvf/usr/src/linux-source-3.5.0/linux-source-3.5.0.tar.bz2


(圖三:解壓原始碼檔案成功)

4。進入解壓出的檔案目錄

cd/usr/src/linux-source-3.5.0/kernel

5. 安裝vim

sudo apt-getinstall vim

注:ubuntu預設沒有安裝vim,出現:

The program 'vim' can be found in thefollowing packages:
 

* vim

* vim-gnome

 * vim-tiny
 

* vim-athena
 

* vim-gtk
 * vim-nox


Try: sudo apt-get install <selectedpackage>

6.開啟sys.c 加入函式

vim sys.c(在vim中, i進入編輯, esc退出編輯狀態. G跳到末尾, gg進入開頭。 :wq儲存退出, :q不儲存退出)

在開頭加入標頭檔案:

#include<linux/linkag.h>

在末尾加入函式

asmlinkage intsys_helloworld(void){

    printk(KERN_EMERG “hello world!”);

     return 1;

}


(圖四:在sys.c中加入函式)

7.新增宣告

a、進入/usr/src/linux-source-3.5.0/arch/x86/include/asm/目錄

cd/usr/src/linux-source-3.5.0/arch/x86/include/asm/

b、用vim開啟檔案syscalls.h進行編輯,加入我們的宣告

(倒數第二行後插入asmlinkage int sys_helloworld(void);)

(圖五:新增宣告)

8.加一個系統呼叫的id

a、進入/usr/src/linux-source-3.5.0/arch/x86/syscalls目錄

b、開啟檔案syscall_32.tbl(該檔案有一個系統呼叫列表,最前面的屬性是id)

c、可以發現222是沒有使用的系統呼叫,所以我們可以插入系統呼叫(222 i386 helloworld sys_helloworld)

d、使用:wq命令儲存退出


(圖六: 加入系統呼叫ID)

9.編譯

A。進入/usr/src/linux-xxx/目錄下

cd  /usr/src/linux-source-3.5.0

B。make prproper

刪除以前進行過的核心功能選擇檔案

C。 make menuconfig 並且在makemenuconfig時,將那個General setup內的local version修改成新的名稱,比如我這裡的myKernel

D。 vim/usr/src/linux-source-3.5.0/.config

修改CONFIG_RTS5139=n in .config file in the source code directory.

E。 make bzImage (編譯核心)

F。 make modules (編譯模組)

G。 makemodules_install (安裝模組到正確目錄)

這個過程錯誤總結:

輸入sudo make bzImage報錯後。

[email protected]:/usr/src/linux-source-3.5.0$sudo make bzImage

 HOSTLD  scripts/kconfig/conf

scripts/kconfig/conf --silentoldconfigKconfig

***

*** Configuration file ".config"not found!

***

*** Please run some configurator (e.g."make oldconfig" or

*** "make menuconfig" or"make xconfig").

***

make[2]: *** [silentoldconfig] Error 1

make[1]: *** [silentoldconfig] Error 2

make[1]: Nothing to be done for `all'.

make[1]: Nothing to be done for `relocs'.

make: *** No rule to make target`include/config/auto.conf', needed by `include/config/kernel.release'.  Stop.

解決方法:先make menuconfig, 並設定對應64位的配置。

安裝後繼續輸入sudo make menuconfig

#

# using defaults found in/boot/config-3.5.0-17-generic

#

Your display is too small to runMenuconfig!

It must be at least 19 lines by 80 columns.

make[1]: *** [menuconfig] Error 1

make: *** [menuconfig] Error 2

解決方法:視窗最大化

之後繼續make modules。

make modules的時候碰到了錯誤

ERROR: "__modver_version_show" [drivers/staging/rts5139/rts5139.ko] undefined!

make[1]: *** [__modpost] Error 1

make: *** [modules] Error 2

(修改/usr/src/linux-headers-3.2.0-24-generic-pae/.config檔案,找到STAGING項,將其值改為n)

CONFIG_RTS5139=m

修改CONFIG_RTS5139=n in .config file in the source code directory.

      

(圖七:make menuconfig成功)


(圖八:make bzImage成功)


(圖九: make modules成功)

10.建立要載入ramdisk的映像檔案(因為是虛擬硬碟,所以需要這一步)

mkinitramfs -o/boot/initrd.img-3.5.0-17-generic

11.拷貝原始核心,避免核心編譯出錯導致無法開機

sudo cp /usr/src/linux-source-3.5.0/arch/x86/boot/bzImage/boot/vmlinuz-3.5.0-17-generic

12.完成編譯

sudo cp/usr/src/linux-source-3.5.0/.config /boot/config-3.5.0-17-generic

13.修改開機啟動項

A。vim/etc/default/grub

B。將GRUD_HIDDEN_TIMEOUT改為一個大於0的數

C。更新一下開機啟動項

sudo update-grub


(圖十:將GRUD_HIDDEN_TIMEOUT改為一個大於0的數)

14.reboot。進入自己的核心。

這裡遇到了一個問題, Ubuntu無法進入圖形介面,停留在initramfs。但是我嘗試uname –a顯示核心資訊。發現是進入了自己編譯好的核心(myKernel)中。

如下所示。


(圖十一:initramfs下顯示核心資訊)

後百度了一下,發現瞭解決方法。在grub引導中,設定rootdelay。正常進入圖形介面。


(圖十二: grub設定rootdelay=90)

15. 利用helloworld.c進行測試

gcc helloworld.c–o helloworld

./helloworld

sudo dmesg -c

( 圖十三: 利用helloworld.c進行測試)

相關推薦

作業系統實驗(核心編譯,系統呼叫)

作業系統實驗一 ——-系統呼叫 注:  實驗前的準備工作就不一一敘述了。 Ubuntu執行環境:mac osx10.9.1 +VMware Fusion 6.0.2 Ubuntu 版本: 12.10   64位 具體實驗流程如下: 1.安裝有關編譯程式。(這是第二次重

作業系統實驗:linux核心編譯及新增系統呼叫

編譯環境 VMWare Ubuntu Desktop Ubuntu 18.04.1映象下載地址:點我下載 裝ubuntu很簡單,網上教程一大堆,記憶體分配多點。 新增系統呼叫步驟 解壓linux核心 想辦法,把上面的linux核心弄到ubuntu裡面,可

Linux 3.10.12通過編譯核心新增系統呼叫

本文以linux-3.10.12核心、x86平臺、64位,為例進行說明。 新增新的系統呼叫,共需修改3處檔案: (1)分配系統呼叫號:/usr/src/linux-x.x.x/include/uapi/asm-generic/unistd.h(不是/usr/src/l

如何在Linux 4.12核心新增系統呼叫

轉發:http://blog.csdn.net/qq_34911465/article/details/74840024 基本情況 系統版本:CentOS Linux 7 核心版本:linux-4.12 準備操作 1.下載並且解壓開啟資料夾 2.進入資料夾後進入系統呼叫

再探Linux核心write系統呼叫操作的原子性

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux作業系統實驗(在VMware安裝Red Hat Enterprise 6.X)

開啟VMware——建立新的虛擬機器————典型(推薦)——下一步 安裝程式光碟映像檔案——開啟系統所在的映像檔案——下一步 輸入系統的名稱和自己的使用者名稱 密碼——下一步 輸入虛擬機器的名稱和位置——下一步 輸入合適的最大磁碟大小

作業系統實驗:作業和作業排程

文章目錄實驗要求實驗思路 實驗要求 實驗思路 系統中的每一個作業都有一個程序控制塊,我們就用程序控制塊來模擬作業。我們想要實現的是高響應比優先排程演算法,這就需要一個list來存放所有的程序,我們每次從這些程序中選出優先順序最高的程序,讓其佔領cpu

作業系統- 實驗 模擬處理機排程的時間片輪轉法(Java實現)

                                          &

作業系統之--linux核心編譯步驟詳解

ORIGIN 作為自由軟體,linux 核心版本不斷更新,新核心會修訂舊核心的 bug,並增加若干新特性,如支援更多的硬體、具備更好的系統管理能力、執行速度更快、更穩定等。使用者若想要使用這些新特性,或希望根據自身系統需求定製一個更高效、更穩定的核心,就需要重

作業系統實驗程序管理

一 程序的建立實驗 實驗目的 1、掌握程序的概念,明確程序的含義 2、認識並瞭解併發執行的實質 實驗內容 1、編寫一段程式,使用系統呼叫fork( )建立兩個子程序。當此程式執行時,在系統中有一個父程序和兩個子程序活動。讓每一個程序在螢幕上顯示一個字元:父程序顯示'a

作業系統——實驗(先來先服務演算法和短作業優先演算法)

作業系統實驗報告一[實驗題目]先來先服務FCFS和短作業優先SJF排程演算法[實驗目的]通過本次實驗,加深對程序概念的理解,進一步掌握對程序狀態轉變、程序排程策略及對系統性能的評價方法。[實驗內容]程式設計實現如下內容:1.先來先服務演算法; 2.短程序優先演算法;3.根據排

作業系統實驗之載入程式

一, 實驗內容 改寫bootsect.s和setup.s, 完成如下主要功能: 1, bootsect.s能夠在螢幕上列印一段提示資訊"XXX is booting...", 其中XXX是你給自己的作業系統起的名字,例如LZJos、Sunix等. 2, b

《Linux作業系統分析》之分析系統呼叫system_call的處理過程

本篇文章通過將上篇文章中使用庫函式API和C程式碼中嵌入彙編程式碼兩種方式設計的系統呼叫新增到系統menu中,來說明在Linux系統中,系統呼叫的實現的時機以及具體執行,以及一般的中斷處理過程。 相關知識 首先關於這篇文章會介紹一些用到的知識。 一、將系統呼叫號與相應的服務

作業系統課程設計():linux核心編譯及新增系統呼叫

1.實驗目的 通過實驗,熟悉Linux作業系統的使用,掌握構建與啟動Linux核心的方法;掌握使用者程式如何利用系統呼叫與作業系統核心實現通訊的方法,加深對系統呼叫機制的理解;進一步掌握如何向作業系統核心增加新的系統呼叫的方法,以擴充套件作業系統的功能。 2.實

Linux核心編譯以及新增系統呼叫函式

實驗內容 (作者:Baron_w,禁止轉載) ⚫ 編譯 Linux 核心 ⚫ Linux 啟動過程 ⚫ Linux 系統呼叫實現分析 ⚫ 增加一個系統呼叫** 相關知識 dmesg 的用法 ⚫ 列出載入到核心中的所有驅動 我們可以使用如‘more’。 ‘tail’ ,

[原始碼和文件分享]Linux核心編譯及新增系統呼叫

1 總體設計思路 系統呼叫的本質是呼叫核心函式,以核心態執行程式。為了在核心態下執行,本實驗針對Linux的核心進行修改,增加自定義系統呼叫函式實現使用者態程式對任意程序的nice值進行修改或者讀取來進行測試。 2 主要函式的介面設計 核心態程式 SYSCALL_DEFINE3

作業系統實驗——增加系統呼叫(詳細圖文解釋)

Linux新增系統呼叫 注意:請提前安裝好Vmware,並準備好Ubuntu映象檔案以及Linux核心(我用的是Ubuntu10.0.4版本,核心版本是Linux-2.6.32.65.xz) 操作步驟: 1.點選建立一個新的虛擬機器 1)選擇自定義,點選下一步,接下來選擇預設配置,進入虛擬機器嚮導 2

Linux編譯核心(4.2.6)並新增系統呼叫

1. 檢視系統核心版本(ubuntu 12.04) uname –a 或者 cat /proc/version 將壓縮包linux-4.2.6.tar.gz 放至 /usr/src中後解壓: sudo cp linux-4.2.6.tar.gz /usr/src

Linux核心2.6.34.14新增系統呼叫編譯方法(CentOS-6.4-x86_64)

<?xml version="1.0" encoding="UTF-8"?> //我新增系統呼叫步驟,僅供參考,尤其是系統呼叫的實現部分,建議大家自己寫,除了我這種好像還可以用sys_open系列來寫 #define 核心版本 linux-2.6.34.14

核心必須懂(): 用系統呼叫列印Hello, world!

目錄 前言 模組與系統呼叫 用模組列印Hello, world! 用模組新增自定義系統呼叫 top指令 關閉Linux圖形介面 重編核心新增系統呼叫 解壓系統原始碼 撰寫自定義系統呼叫 編譯核心 測試新核心 最後 前言 要自定義系