因為一般電腦安裝的系統都是Windows,而整個編譯過程都需要在Linux環境下實現,所以最好是在虛擬機里安裝Linux系統來完成這一過程。我使用的虛擬機是VMware-workstation-full-v7.1.4。
然後,我們需要下載一個較高版本的Linux系統的鏡像文件,安裝在虛擬機上,作為編譯環境。我使用的是ubuntu-11.04-desktop-i386。之所以選擇較高版本,是因為它的界面比較方便用戶操作。
然後下載一個Linux內核源代碼文件,將它保存到虛擬機上新安裝的系統中去。並解壓到/usr/src目錄。我使用的是linux-2.6.36,下載低版本的原因是,小巧輕便,易於編譯。
解壓命令如下:
bzip2 -d linux-2.6.36.tar.bz2
tar -xvf linux-2.6.36.ta
修改/usr/src/linux-2.6.36/kernel/sys.c文件,在文件末尾增加一個系統調用函數。自行編寫一個簡單的程序即可,只為測試用。
修改/usr/src/linux-2.6.36/arch/x86/kernel/syscall_table_32.S,為新添加的程序配置系統調用號。
在/usr/src/linux-2.6.36/arch/x86/include/asm/unistd_32.h中配置系統調用表。
下面就是最重要的內核編譯與安裝:
首先配置編譯信息,使其生成適合當前機器的Makefile,輸入make oldconf ig。
接著還要輸入make menuconfig,在字元界面下進行必要的細微的修改。
然後要經過四步編譯過程(直接輸入命令即可):
(1)make bzImage
將內核編譯為壓縮映像,存儲在源碼根目錄下的「System.map」文件中。
(2)make moles
編譯各個模塊。
(3)sudo make moles_install
安裝模塊
(4)sudo make install
安裝內核
第(2)(3)步等待時間較長,可能需要數個小時,請耐心等待。
無報錯的話重啟進入GRUB界面,就可以看到新編譯的內核了。
按回車鍵進入我們編譯的目標內核中,用關鍵詞搜索查看新增加的系統調用「my call」是否已在內核中:
編寫測試程序,調用新添加的系統調用:
測試成功,說明系統調用添加成功,進而說明內核編譯成功!
以上的辦法你可以試一下,希望對你有所幫助。
㈡ [重慶思庄每日技術分享]-linux 系統 修改內核參數導致不能啟動的問題
錯誤原因:
錯誤修改了 /etc/selinux/config文件。
錯誤信息:
重啟後發現出現錯誤,不能繼續啟動
Kernel panic - not syncing: Attempted to kill init
解決方案:
1.系統啟動的時候,按下『e』鍵進入grub編輯界面,編輯grub菜單,選擇「kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/vogroup00/logvol00 rhgb quiet」 一欄,按『e』鍵進入編輯,在末尾增加enforcing=0,即:
kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/vogroup00/logvol00 rhgb quiet enforcing=0 或者selinux=0
按『b』鍵繼續引導,OK順利前進。
2.後來發現,通過改變/etc/grub.conf 在倒數第二行添加selinux=0 也可。
3.(推薦) 檢查/etc/selinux/config文件是否出錯
注意事項:
1.系統啟動後,按e ,如果沒有對應kerne選項繼續按e 找到
2.在出現命令行後 空格加入 enforing=0 回車
3.除保存編輯不要按回車,esc等按鍵。輸入enforing=0後直接按b 繼續啟動。
㈢ linux 修改內核信息
可以改。永久變更主機名用下面方法需要改2處#vi /etc/hosts127.0.0.1 xxxx localhost.localdomain localhost#vi etc/sysconfig/networkNETWORKING=yesHOSTNAME=xxxxGATEWAY=192.168.0.1這樣重啟之後,主機名也不會變※· xxxx為你要改的主機名
㈣ 在哪裡改linux內核
到http://kernel.org上下載新的內核,
然後將文件移動到/usr/src,解壓,進入到目錄,然後
make menuconfig(定製內核)
make(生成內核模塊)
make moles_install (載入內核模塊)
make install (修改grub)
以上就是我個人安裝新內核的經驗
㈤ Linux常用內核網路參數及修改方法
在修改內核參數前,需要注意以下幾點:
本文提供以下兩種修改Linux實例內核參數的方法。
/proc/sys/ 目錄是Linux內核在啟動後生成的偽目錄,其目錄下的 net 文件夾中存放了當前系統中開啟的所有內核參數,目錄樹結構與參數的完整名稱相關,如 net.ipv4.tcp_tw_recycle ,它對應的文件是 /proc/sys/net/ipv4/tcp_tw_recycle 文件,文件的內容就是參數值。方法一中修改的參數值僅在當前運行中生效,系統重啟後會回滾到歷史值,一般用於臨時性驗證修改的效果。若需要永久性修改,請參見方法二。
㈥ Linux如何在系統運行過程中修改內核參數
RedHat向管理員提供了非常好的方法,使我們可以在系統運行時更改內核參數,而不需要重新引導系統。這是通過/PRoc虛擬文件系統實現的。/proc/sys目錄下存放著大多數的內核參數,並且設計成可以在系統運行的同時進行更改。下面我們以打開內核的 ip轉發功能為例說明在系統運行時修改內核參數的兩種方法。IP轉發是指允許系統對來源和目的地都不是本機的數據包通過網路,RedHat默認屏蔽此功能,在 需要用本機作為路由器、NAT等情況下需要開啟此功能。 方法一:修改/proc下內核參數文件內容 直接修改內核參數ip_forward對應在/proc下的文件/proc/sys/net/ipv4/ip_forward。用下面命令查看ip_forward文件內容: # cat /proc/sys/net/ipv4/ip_forward 該文件默認值0是禁止ip轉發,修改為1即開啟ip轉發功能。修改命令如下: # echo 1 >/proc/sys/net/ipv4/ip_forward 修改過後就馬上生效,即內核已經打開ip轉發功能。但如果系統重啟後則又恢復為默認值0,如果想永久打開需要通過修改/etc/sysctl.conf文件的內容來實現。 方法二.修改/etc/sysctl.conf文件 默認sysctl.conf文件中有一個變數是 net.ipv4.ip_forward = 0 將後面值改為1,然後保存文件。因為每次系統啟動時初始化腳本/etc/rc.d/rc.sysinit會讀取/etc/sysctl.conf文件的內容,所以修改後每次系統啟動時都會開啟ip轉發功能。但只是修改sysctl文件不會馬上生效,如果想使修改馬上生效可以執行下面的命令: # sysctl –p 在修改其他內核參數時可以向/etc/sysctl.conf文件中添加相應變數即可,下面介紹/proc/sys下內核文件與配置文件 sysctl.conf中變數的對應關系,由於可以修改的內核參數都在/proc/sys目錄下,所以sysctl.conf的變數名省略了目錄的前面部 分(/proc/sys)。 將/proc/sys中的文件轉換成sysctl中的變數依據下面兩個簡單的規則: 1.去掉前面部分/proc/sys 2.將文件名中的斜杠變為點 這兩條規則可以將/proc/sys中的任一文件名轉換成sysctl中的變數名。 例如: /proc/sys/net/ipv4/ip_forward =》 net.ipv4.ip_forward /proc/sys/kernel/hostname =》 kernel.hostname 可以使用下面命令查詢所有可修改的變數名 # sysctl –a 下面例舉幾個簡單的內核參數: 1./proc/sys/kernel/shmmax 該文件指定內核所允許的最大共享內存段的大小。 2./proc/sys/kernel/threads-max 該文件指定內核所能使用的線程的最大數目。 3./proc/sys/kernel/hostname 該文件允許您配置網路主機名。
㈦ linux如何調節和維護內核詳細介紹
作為用戶程序和系統硬體之間的介面,內核在確保Red Hat Enterprise Linux 應用到廣泛到物理和虛擬硬體環境中發揮來重要作用。
識別運行內核 :
1. cat /etc/redhat-release 安裝的Red Hat Enterprise Linux 版本
2. uname -r 當前運行的內核版本
3. yum list installed kernel/* 安裝的內核版本
4. uname -m 或arch 當前運行所在處理器體系結構
5.uname -a 查看內核信息
有時,內核會發出日誌消息。這些消息記錄在/var/log/messages文件中,標記為kernel服務。
內核模塊:
模塊載入和卸載
● 在引導時載入的核心內核映像位於/boot/vmlinuz-VERSION.
● 雖然可以安裝多個內核,但是只有一個是當前運行的內核。若要更改內核,必須重新引導系統。
● 每個內核都包含一組動態載入的模塊,這些模塊與該內核兼容,保留在/lib/moles/VERSION/ 中。
● 通常,根據需要載入和卸載模塊,無需用戶(或管理員)交互。
● 可以使用 lsmod 列出當前載入的模塊。
● 有時,可能需要使用modprobe MODULENAME 手動載入模塊。
● 可以使用modprobe -r MODULENAME 刪除不再使用的模塊。
可以在 /lib/moles/2.6.32-71.el6.x86_64/kernel 目錄下查看內核模塊信息
modprobe -l 列出所載入的模塊
示例:
# modprobe -l | grep nf_conntrack_ftp
# modprobe nf_conntrack_ftp
# lsmod | grep nf_conntrack_ftp
# modprobe -r nf_conntrack_ftp
內核更新:
下載新內核rpm包
理論上應使用rpm -Uvh kernel-name.rpm 但是如果使用U的話會使當前運行的系統掛掉,
所以用 rpm -ivh kernel-name.rpm 全新安裝內核
在 /boot 中會出現一個新的內核
在 /boot/grub/grub.conf 中 default=0 表示使用新內核,此時需重啟才能使用到新內核。
㈧ 如何修改 Linux 內核配置
由於Linux的內核參數信息都存在內存中,因此可以通過命令直接修改,並且修改後直接生效。但是,當系統重新啟動後,原來設置的參數值就會丟失,而系統每次啟動時都會自動去/etc/sysctl.conf文件中讀取內核參數,因此將內核的參數配置寫入這個文件中,是一個比較好的選擇。
首先打開/etc/sysctl.conf文件,查看如下兩行的設置值,這里是:
kernel.shmall
=
2097152
kernel.shmmax
=
4294967295
如果系統默認的配置比這里給出的值大,就不要修改原有配置。同時在/etc/sysctl.conf文件最後,添加以下內容:
fs.file-max
=
6553600
kernel.shmmni
=
4096
kernel.sem
=
250
32000
100
128
net.ipv4.ip_local_port_range
=
1024
65000
net.core.rmem_default
=
4194304
net.core.rmem_max
=
4194304
net.core.wmem_default
=
262144
net.core.wmem_max
=
262144
這里的「fs.file-max
=
6553600」其實是由「fs.file-max
=
512
*
PROCESSES」得到的,我們指定PROCESSES的值為12800,即為「fs.file-max
=512
*12800」。
sysctl.conf文件修改完畢後,接著執行「sysctl
-p」使設置生效。
[root@localhost
~]#
sysctl
-p
常用的內核參數的含義如下。
kernel.shmmax:表示單個共享內存段的最大值,以位元組為單位,此值一般為物理內存的一半,不過大一點也沒關系,這里設定的為4GB,即「4294967295/1024/1024/1024=4G」。
kernel.shmmni:表示單個共享內存段的最小值,一般為4kB,即4096bit.
kernel.shmall:表示可用共享內存的總量,單位是頁,在32位系統上一頁等於4kB,也就是4096位元組。
fs.file-max:表示文件句柄的最大數量。文件句柄表示在Linux系統中可以打開的文件數量。
ip_local_port_range:表示埠的范圍,為指定的內容。
kernel.sem:表示設置的信號量,這4個參數內容大小固定。
net.core.rmem_default:表示接收套接字緩沖區大小的預設值(以位元組為單位)。
net.core.rmem_max
:表示接收套接字緩沖區大小的最大值(以位元組為單位)
net.core.wmem_default:表示發送套接字緩沖區大小的預設值(以位元組為單位)。
net.core.wmem_max:表示發送套接字緩沖區大小的最大值(以位元組為單位)。
㈨ 如何修改新內核linux下的grub配置
1 是手動選擇在開機時候按方上下方向鍵 界面會停留在選擇內核的界面
2 自動選擇 系統默認會選擇最新安裝的內核.如果要更改默認使用的內核則修改配置文件/boot/grub/menu.lst(直接修改grub.conf同樣可行 )下default默認為0是表示第一個菜單選項(開機時的內核選擇菜單),改為1就是使用第二個菜單項了。timeout表示菜單等待時間,單位為秒。
㈩ 應用層修改Linux內核參數的方法
sysctl命令 被用於在內核運行時動態地修改內核的運行參數,可用的內核參數在目錄 /proc/sys 中。
示例: