⑴ linux中為什麼要配置內核,怎樣重新配置內核
編譯前當然要配置一下內核啊,make
menuconfig
,生成默認配置文件
.config
,這個文件是設置
cpu
體系,及很多驅動選項的,你沒配置這個,怎麼可能編譯那
前面那個說
linux
和微軟競爭是扯淡的那位,我只能說你根本不懂內核編譯,無知
新下載的內核都是沒有默認
.config
需要你找到一個默認的config
文件,比如
arch/arm/configs/
下是
arm
cpu
很多的默認配置,當然你也可以把你以前的
config
文件拷貝到新內核目錄下。
.config
是配置編譯內核的最初步驟,你要編譯驅動程序,就必須要了解這個,多上網查下資料
然後重新編譯
⑵ 如何配置linux 內核最小系統
下載內核下載熱點內核標准配置文件編譯內核makemenuconfig選中,然後選擇剛下載的。config另外,要特別選中:1)、通過makemenuconfig選中以下對應的選項Generalsetup–>[*])、修改。config文件修改。config文件中CONFIG_SYSFS_DEPRECATED_V2,將原本被注釋掉的CONFIG_SYSFS_DEPRECATED_V2改成CONFIG_SYSFS_DEPRECATED_V2=y註:修改這項是因為舊版的mkinitrd及其nash在內核沒有CONFIG_SYSFS_DEPRECATED_V2參數時默認使用舊版sysfs路徑格式,從而在新內核下無法正確訪問/sys內的硬碟信息節點。主要是解決"mount:couldnotfindfilesystem'/dev/root'"這樣的錯誤makebzImagemakemolesmakemoles_installmakeinstall解壓修改內核cp/boot/initrd-2.6.38.img/tmpcd/tmp/mkdirnewinitrdcdnewinitrd/zcat/initrd-2.6.38.imgcpio-irm-rf/tmp/initrd-2.6.38.imgviinit找到這2行一樣的,去掉1行echo"Loadingdm-region-hash.komole"insmod/lib/dm-region-hash.koecho"Loadingdm-region-hash.komole"insmod/lib/dm-region-hash.ko這主要是解決:"insmod:errorinserting'/lib/dm-region-hash.ko':-1Fileexists"這樣的錯誤從新打包內核find.cpio-c-o>/initrdcd/gzip-9initrd-2.6.38imgrm-rf/boot/initrd-2.6.38.imgcpinitrd-2.6.38.img/bootrm-rf/cd/usr/src/linux-2.6.38.tar.gzrm-rf/cd/usr/src/linux-2.6.38設置從新內核啟動,重啟系統vi/boot/grub/grub.conf把default=1改為default=0reboot(重啟系統)
⑶ 一般優化linux的內核,需要優化什麼參數
作為高性能WEB伺服器,只調整Nginx本身的參數是不行的,因為Nginx服務依賴於高性能的操作系統。
以下為常見的幾個Linux內核參數優化方法。
net.ipv4.tcp_max_tw_buckets
對於tcp連接,服務端和客戶端通信完後狀態變為timewait,假如某台伺服器非常忙,連接數特別多的話,那麼這個timewait數量就會越來越大。
畢竟它也是會佔用一定的資源,所以應該有一個最大值,當超過這個值,系統就會刪除最早的連接,這樣始終保持在一個數量級。
這個數值就是由net.ipv4.tcp_max_tw_buckets這個參數來決定的。
CentOS7系統,你可以使用sysctl -a |grep tw_buckets來查看它的值,默認為32768,
你可以適當把它調低,比如調整到8000,畢竟這個狀態的連接太多也是會消耗資源的。
但你不要把它調到幾十、幾百這樣,因為這種狀態的tcp連接也是有用的,
如果同樣的客戶端再次和服務端通信,就不用再次建立新的連接了,用這個舊的通道,省時省力。
net.ipv4.tcp_tw_recycle = 1
該參數的作用是快速回收timewait狀態的連接。上面雖然提到系統會自動刪除掉timewait狀態的連接,但如果把這樣的連接重新利用起來豈不是更好。
所以該參數設置為1就可以讓timewait狀態的連接快速回收,它需要和下面的參數配合一起使用。
net.ipv4.tcp_tw_reuse = 1
該參數設置為1,將timewait狀態的連接重新用於新的TCP連接,要結合上面的參數一起使用。
net.ipv4.tcp_syncookies = 1
tcp三次握手中,客戶端向服務端發起syn請求,服務端收到後,也會向客戶端發起syn請求同時連帶ack確認,
假如客戶端發送請求後直接斷開和服務端的連接,不接收服務端發起的這個請求,服務端會重試多次,
這個重試的過程會持續一段時間(通常高於30s),當這種狀態的連接數量非常大時,伺服器會消耗很大的資源,從而造成癱瘓,
正常的連接進不來,這種惡意的半連接行為其實叫做syn flood攻擊。
設置為1,是開啟SYN Cookies,開啟後可以避免發生上述的syn flood攻擊。
開啟該參數後,服務端接收客戶端的ack後,再向客戶端發送ack+syn之前會要求client在短時間內回應一個序號,
如果客戶端不能提供序號或者提供的序號不對則認為該客戶端不合法,於是不會發ack+syn給客戶端,更涉及不到重試。
net.ipv4.tcp_max_syn_backlog
該參數定義系統能接受的最大半連接狀態的tcp連接數。客戶端向服務端發送了syn包,服務端收到後,會記錄一下,
該參數決定最多能記錄幾個這樣的連接。在CentOS7,默認是256,當有syn flood攻擊時,這個數值太小則很容易導致伺服器癱瘓,
實際上此時伺服器並沒有消耗太多資源(cpu、內存等),所以可以適當調大它,比如調整到30000。
net.ipv4.tcp_syn_retries
該參數適用於客戶端,它定義發起syn的最大重試次數,默認為6,建議改為2。
net.ipv4.tcp_synack_retries
該參數適用於服務端,它定義發起syn+ack的最大重試次數,默認為5,建議改為2,可以適當預防syn flood攻擊。
net.ipv4.ip_local_port_range
該參數定義埠范圍,系統默認保留埠為1024及以下,以上部分為自定義埠。這個參數適用於客戶端,
當客戶端和服務端建立連接時,比如說訪問服務端的80埠,客戶端隨機開啟了一個埠和服務端發起連接,
這個參數定義隨機埠的范圍。默認為32768 61000,建議調整為1025 61000。
net.ipv4.tcp_fin_timeout
tcp連接的狀態中,客戶端上有一個是FIN-WAIT-2狀態,它是狀態變遷為timewait前一個狀態。
該參數定義不屬於任何進程的該連接狀態的超時時間,默認值為60,建議調整為6。
net.ipv4.tcp_keepalive_time
tcp連接狀態里,有一個是established狀態,只有在這個狀態下,客戶端和服務端才能通信。正常情況下,當通信完畢,
客戶端或服務端會告訴對方要關閉連接,此時狀態就會變為timewait,如果客戶端沒有告訴服務端,
並且服務端也沒有告訴客戶端關閉的話(例如,客戶端那邊斷網了),此時需要該參數來判定。
比如客戶端已經斷網了,但服務端上本次連接的狀態依然是established,服務端為了確認客戶端是否斷網,
就需要每隔一段時間去發一個探測包去確認一下看看對方是否在線。這個時間就由該參數決定。它的默認值為7200秒,建議設置為30秒。
net.ipv4.tcp_keepalive_intvl
該參數和上面的參數是一起的,服務端在規定時間內發起了探測,查看客戶端是否在線,如果客戶端並沒有確認,
此時服務端還不能認定為對方不在線,而是要嘗試多次。該參數定義重新發送探測的時間,即第一次發現對方有問題後,過多久再次發起探測。
默認值為75秒,可以改為3秒。
net.ipv4.tcp_keepalive_probes
第10和第11個參數規定了何時發起探測和探測失敗後再過多久再發起探測,但並沒有定義一共探測幾次才算結束。
該參數定義發起探測的包的數量。默認為9,建議設置2。
設置和範例
在Linux下調整內核參數,可以直接編輯配置文件/etc/sysctl.conf,然後執行sysctl -p命令生效
⑷ 如何在Ubuntu/CentOS上安裝Linux內核4.0
在Ubuntu 15.04上安裝Linux內核4.0
如果你正在使用Linux的發行版Ubuntu 15.04,你可以直接通過Ubuntu內核網站安裝。在你的Ubuntu15.04上安裝最新的Linux內核4.0,你需要在shell或終端中在root訪問許可權下運行以下命令。
在CentOS 7上安裝Linux內核4.0
我們可以用兩種簡單的方式在CentOS 7上安裝Linux內核4.0。
從Elrepo軟體倉庫安裝
從源代碼編譯安裝
我們首先用ElRepo安裝,這是最簡單的方式:
使用 Elrepo 安裝
1. 下載和安裝ELRepo
我們首先下載ELRepo的GPG密鑰並安裝relrepo-release安裝包。因為我們用的是CentOS 7,我們使用以下命令安裝elrepo-release-7.0-2.el7.elrepo.noarch.rpm。
注: 如果你啟用了secure boot,請查看這個網頁獲取更多信息。
添加 Elrepo 源
2. 升級Linux內核到4.0版本
現在,我們准備從ELRepo軟體倉庫安裝最新的穩定版內核4.0。安裝它我們需要在CentOS 7的shell或者終端中輸入以下命令。
# yum --enablerepo=elrepo-kernel install kernel-ml
從ELRepo安裝Linux內核4.0
上面的命令會自動安裝為CentOS 7構建的Linux內核4.0。
現在,下面的是另一種方式,通過編譯源代碼安裝最新的內核4.0。
從源代碼編譯安裝
1. 安裝依賴軟體
首先我們需要為編譯linux內核安裝依賴的軟體。要完成這些,我們需要在一個終端或者shell中運行以下命令。
# yum groupinstall "Development Tools"
# yum install gcc ncurses ncurses-devel
安裝內核依賴
然後,我們會升級我們的整個系統。
# yum update
2. 下載源代碼
現在我們通過wget命令從Linux內核的官方倉庫中下載最新發布的linux內核4.0的源代碼。你也可以使用你的瀏覽器直接從kernel.org網站下載內核。
# cd /tmp/
下載內核源碼
3. 解壓tar壓縮包
文件下載好後我們在/usr/src/文件夾下用以下命令解壓。
# tar -xf linux-4.0.tar.xz -C /usr/src/
# cd /usr/src/linux-4.0/
解壓內核tar壓縮包
4. 配置
配置Linux內核有兩種選擇的。我們可以創建一個新的自定義配置文件或者使用已有的配置文件來構建和安裝Linux內核。這都取決於你自己的需要。
配置新的內核
現在我們在shell或終端中運行make menuconfig命令來配置Linux內核。我們執行以下命令後會顯示一個包含所有菜單的彈出窗口。在這里我們可以選擇我們新的內核配置。如果你不熟悉這些菜單,那就敲擊ESC鍵兩次退出。
# make menuconfig
配置新內核
已有的配置
如果你想用已有的配置文件配置你最新的內核,那就輸入下面的命令。如果你對配置有任何調整,你可以選擇Y或者N,或者僅僅是按Enter鍵繼續。
# make oldconfig
5. 編譯Linux內核
下一步,我們會執行make命令來編譯內核4.0。取決於你的系統配置,編譯至少需要20-30分鍾。
註:如果編譯內核的時候出現bc command not found的錯誤,你可以用yum install bc命令安裝bc修復這個錯誤。
# make
Make 內核
6. 安裝Linux內核4.0
編譯完成後,我們終於要在你的Linux系統上安裝內核了。下面的命令會在/boot目錄下創建文件並且在Grub 菜單中新建一個內核條目。
# make moles_install install
7. 驗證內核
安裝完最新的內核4.0後我們希望能驗證它。做這些我們只需要在終端中輸入以下命令。如果所有都進展順利,我們會看到內核版本,例如4.0出現在輸出列表中。
# uname -r
結論
好了,我們成功地在我們的CentOS 7操作系統上安裝了最新的Linux內核版本4.0。通常並不需要升級linux內核,因為和之前版本運行良好的硬體可能並不適合新的版本。我們要確保它包括能使你的硬體正常工作的功能和配件。但大部分情況下,新的穩定版本內核能使你的硬體性能更好。
⑸ 如何用命令行設置linux內核參數
Linux設置內核參數的方法
1 內核參數的查看方法
使用「sysctl -a」命令可以查看所有正在使用的內核參數。內核參數比較多(一般多達500項),按照前綴主要分為以下幾大類:net.ipv4、net.ipv6、net.core、vm、fs、dev.parport、dev.cdrom 、dev.raid、kernel等等。相同的linux,安裝的組件和使用的方式不一樣,正在使用的內核參數是不一樣的。
所有的內核參數的說明文檔是放到/usr/src/linux/Documentation/sysctl中的,如果想知道對內核參數的說明,可以到該目錄下查看相應的說明文檔。
2 內核參數的的設置方法
由於Linux的內核參數信息都存在內存中,因此可以通過命令直接修改,並且修改後直接生效。也可以通過文件的方式進行設置。下面就介紹這兩種修改方法。
2.1 命令設置的方式
可以用兩種方法實現。
1、使用「sysctl -w 參數名=值」的方式
假設我們把net.ipv4.ip_forward的值修改為1,使用命令「sysctl -w net.ipv4.ip_forward=1」。
2、修改內核參數對應的proc文件
內核參數位於/proc/sys/之下,參數名稱是以文件所在的路徑,並將「/」以「.」來取代。舉例來說,/proc/sys/net/ip_forward的參數名稱為net.ipv4.ip_forward。
同樣把net.ipv4.ip_forward的值修改為1,使用命令「echo 「1」 > /proc/sys/net/ipv4/ip_forward」。
注意,這里proc文件跟普通的文件不一樣。一般一個文件用echo寫入內容之後,會變成一個文本文件,但echo修改proc文件之後還是個空文件。
⑹ 如何配置linux內核支持sata
(1)首先,用內核的 allnoconfig 配置目標,得到一個最最基本的內核配置。即,執行下面的命令:
make allnoconfig
內核的 allnoconfig 配置目標會把所有的內核選項都設置為no,也就是把它們既不編譯進內核,也不編譯成模塊。
有了這個最基本的配置,我們再添加必須的配置項:再執行
make menuconfig
命令,按下面的步驟添加其他的配置——
(2)把 Executable file formats 下的ELF 和 emulations for 32bit ELF 選項編譯進內核。
(3)在 Processor type and features 下面,選擇合適的CPU類型。
(4)選擇PCI/PCI-Express支持,位於Bus options (PCI, PCMCIA, EISA, MCA, ISA) 配置目錄下。
(5)加入對根文件系統所在磁碟控制器的驅動:
Device Driver
|---->SCSI device support
|---->SCSI disk support
|----->SCSI low-level drivers
|---->Serial ATA (SATA) support
|---->intel PIIX/ICH SATA support
(6)加入Ext2文件系統的支持:在 File systems 配置目錄下,選擇 Second extended fs support。如果根文件系統是Ext3,則選擇 Ext3 journalling file system support。
(7)為了是 Udev 正常工作,需要內核支持 Unix domain sockets。此配置選項位於 Networking 配置目錄中的 Networking support ---> Networking options 下。
(8)使內核支持 /proc 虛擬文件系統和 tmpfs 文件系統:
File systems ---> Pseudo filesystems ---> /proc file system support / Virtual memory file system support (former shm fs)
(9)支持 swap 分區:
General setup ---> Support for paging of anonymous memory (swap)
(10)支持 RTC 設備:
Device Drivers ---> Character devices ---> Enhanced Real Time Clock Support
(11)為了充分發揮我的雙核CPU的能力,我又加入了對SMP的支持:
Processor type and features ---> Symmetric multi-processing support。
⑺ 如何定製自己的linux內核
一 前言
為什麼要編譯自己的內核?這可能會有各種不同的答案,列舉如下:
1 為了研究,學習內核源碼。
2 為了支持新的硬體或者打開某項內核功能。
3 升級內核到更新版本。
4 按自己的要求定製和優化內核功能。
如此種種...
折騰不需要理由,這里我就不在多說,下面直接進入主題。
編譯方式
編譯內核有多種方式,從kernel.org下載選擇下載需要的版本的內核源碼,
如:linux-2.6.32-rc1.tar.bz2,下載內核源碼到/home/user/目錄,進入下載目錄,解壓壓縮包。
#cd /home/user/
#tar -xjvf linux-2.6.32-rc1.tar.bz2
二 准備編譯環境
開始之前,首先確認下面軟體包已經安裝(編譯中標普華4.0時,直接全部安裝CD3可保證此條件)。
* rpmdevtools
* yum-utils
fedora系統可以使用如下命令安裝:
#yum install yum-utils rpmdevtools
1. 生成一個rpmbuild命令工作所需的目錄樹,下面命令可以完成該操作,也可以手動建立目錄樹。
命令建立:
#rpmdev-setuptree
此命令將會在/usr/src/rpmbuild/目錄下生成如下目錄結構(如果此位置沒有,則可能在當前用戶目錄下).
# tree /usr/src/rpmbuild/
rpmbuild/
|-- BUILD
|-- RPMS
|-- SOURCES
|-- SPECS
`-- SRPMS
上面部分是rpmbuild的環境建立。rpm
3. 安裝內核源碼包需要的依賴組件(在此可以跳過此步操作)
su -c 'yum-builddep kernel-<version>.src.rpm'
4.安裝內核源碼到系統,默認目錄在/usr/src/neoshine:
rpm -Uvh kernel-<version>.src.rpm
三 配置內核(生成config配置文件)
下面將介紹如何解開源碼包,並修改,配置和重新打包源碼
1. 解開源碼包並打上所有的補丁到BUILD目錄
cd ~/rpmbuild/SPECS
rpmbuild -bp --target=`uname -m` kernel.spec
kernel源碼將在這里找到:
/usr/src/neoshine/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch> directory
配置內核源碼
1. 進入內核源碼:
cd ~/rpmbuild/BUILD/kernel-2.6.$ver/linux-2.6.$ver.$arch/
2. 復制/boot/config*配置文件到源碼目錄下,此config文件也可以是已經配好或者其他地方備份的kernel配置文件:
cp /boot/config2.6- 2.6.$ver.$arch .config
3. 先檢查kernel配置中新增的選項:
make oldconfig
4. 定製內核功能,關閉initrd支持選項,執行圖形化內核配置工具:
make menuconfig
註:在generic setup選項下找到initial RAM system and RAM disk(initramfs and initrd) support 項,取消編譯。同時確保跟文件系統對應的驅動和系統所在存儲器對應的驅動都已經編譯到內核(否則會無法啟動系統).
5. 在.config文件第一行改為下面內容(注意:沒有此行時,後面的編譯會報錯)
# i386
6. 拷貝.config到SOURCES/:
cp .config ../SOURCES/config-$arch
四 編譯新內核
1. 下面開始准備編譯新的內核包
打開SPEC/kernel.spec
vim SPEC/kernel.spec
改變下面行內容,可以定製自己的內核擴展名(如fc10之類):
%define buildid .<自己內核的小版本名>
下一步將生成一個新內核的rpm包,此過程需要編譯內核源碼包
使用下面命令生成新的內核源碼包
rpmbuild -bb --with baseonly --without debuginfo --target=`uname -m` kernel.spec
參數說明:bb表示只編譯二進制包,即不生成源碼包,without debuginfo 表示沒有調試信息,
target=`uname -r`表示生成對應當前平台的內核包
如果上面的命令成功執行完成,那麼會在BUILD/i686目錄下生成新的內核安裝包
五 安裝新內核
rpm -ivh kernel-$ver-$arch.rpm
此步操作會自動安裝內核到boot目錄下,安裝對應內核模塊到/lib/moles/目錄下,並且生成新內核對應的grub引導菜單。
修改grub引導菜單為以下格式
title new kernel
kernel /boot/vmlinuz-$ver-$arch root=/dev/sdax(hdax)
注意,此處不要使用uuid指定跟文件系統(可能會無法掛載根分區而導致內核死機),也不要再加和顯示相關的參數(內核不支持對應設置時,只會看到一個黑黑的屏幕)。
至此一個禁用initrd的新內核配置安裝完畢!
⑻ EasyARM-iMX280開發中,如何配置Linux內核
可以輸入make menuconfig命令打開內核的配置界面
在這個界面中就可以隨意配置內核了,於列表中你需要啟用的功能設備,在那一項輸入y就可以把該功能靜態編譯到內核,輸入M可以把該功能動態編譯成內核模塊。
⑼ 如何修改 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中為什麼要配置內核,怎樣重新配置內核
新的內核修訂了舊內核的bug,並增加了許多新的特性。如果用戶想要使用這些新特性,或想根據自己的系統度身定製一個更高效,更穩定的內核,就需要重新編譯Linux內核。
為了正確的合理地設置內核編譯配置選項,從而只編譯系統需要的功能的代碼,一般主要有下面四個考慮:
(1)自己定製編譯的內核運行更快(具有更少的代碼)
(2)系統將擁有更多的內存(內核部分將不會被交換到虛擬內存中)
(3)不需要的功能編譯進入內核可能會增加被系統攻擊者利用的漏洞
(4)
將某種功能編譯為模塊方式會比編譯到內核內的方式速度要慢一些