① linux3.0 內核特性的改進有哪些
對於這些疑問,Linus Torvalds也在一次公開會議上表示,Linux內核3.0在數字上有了一個劃時代的改變,但是對於內核開發並沒有表現出來里程碑似的特徵。Linus Torvalds坦言:Linux內核3.0並沒有巨大變化,只是在Linux誕生20周年之際將2.6.40提升為3.0而已。
詳細請參考:
http://www.lupaworld.com/article-212573-1.html
② linux 根文件系統 什麼時候使用ramdisk
開發環境:Fedora 9
交叉編譯工具鏈:arm-linux-gcc 4.3.2 with EABI
嵌入式Linux內核版本:2.6.29.4-FriendlyARM。昨天寫貼子的時候具體記不清了,今天起來啟動開發板用uname -r查一下,就是叫做2.6.29.4-FriendlyARM,帖子已經改好了。本文就是友善之臂的2.6.29.4-FriendlyARM的那個版本的內核的基礎上改的。其它版本的應該也類似,僅供參考。
開發板:mini2440-128M Nand Flash
Bootloader:u-boot-2009.11
具體步驟如下:
1.解壓內核源碼樹
解壓linux-2.6.29-mini2440-20090708.tgz到自己的工作目錄,會生成一個友善之臂修改過的並且有幾個mini2440默認配置文件的內核源碼目錄linux-2.6.29。具體步驟參照友善之臂mini2440開發板用戶手冊,具體不詳述了。
2.修改內核配置選項
進入內核源碼目錄linux-2.6.29目錄
#cp config_mini2440_t35 .config
#make menuconfig ARCH=arm
打開配置菜單,修改兩個配置項,分別是:
a):General setup-->選擇 Initial RAM filesystem and RAM disk...... 項
b):Device Drivers-->Block devices-->選擇 RAM block device support 項
並檢查Optimize for size是否被選中,如果沒有則選中,此項優化內核大小,根據需要進行配置。
修改(8192)Default RAM disk size kbytes選項為(4096)Default RAM disk size kbytes,之所以修改是因為我之後製作的ramdisk是4096KB大小的。當然如果你想製作8192KB大小的ramdisk,這里就要對應為8192了,以此類推。但是最小系統嘛,是不用那麼大的ramdisk的。此項的默認配置就是(4096),以前我改過這個配置,所以是(8192)了。如果這個大小和你做的ramdisk不匹配,則啟動時仍然會出現kernel panic內核恐慌,提示ramdisk格式不正確,掛載不上ramdisk。
然後特別要注意的一點是,ramdisk是一種內存虛擬磁碟技術,實質上並不是一種文件系統,它使用的文件系統時ext2文件系統。所以一定要在make menuconfig ARCH=arm的時候進入File systems菜單,選上<*> Second extended fs support。以提供內核對ext2文件系統的支持。我以前添加過了ext2文件系統了,所以開始的時候在此沒有說明,在此為了說明為什麼有的人照著我的方法做了,但是仍然kernel panic,特別把這一步也加上。
然後保存配置退出。
這樣就為內核添加好了ramdisk啟動功能和ramdisk的驅動支持了。
3.修改內核啟動參數
方法有二:
a):修改.config的第310行,修改CONFIG_CMDLINE=""的定義
修改為CONFIG_CMDLINE="initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M"
保存。
意思為從ramdisk啟動,ramdisk壓縮文件起始地址在內存地址0x31000000處,文件大小為0x200000。
此參數也可以在make menuconfig ARCH=arm時進入Boot options菜單,然後在Default kernel command string里修改。效果是一樣的。
b):或者不修改.config的的第310行CMDLINE定義,而是用u-boot的bootargs環境變數來傳遞啟動參數。
同樣也是修改該環境變數為bootargs=initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M
並saveenv保存u-boot環境變數
以上a),b)的效果是一樣的。
4.編譯內核
#make zImage ARCH=arm CROSS_COMPILE=arm-linux-
然後是二十分鍾左右的等待。
編譯完成後在當前目錄下就出現了zImage內核映像了。
好像友善之臂把內核源碼目錄里的uImage目標給注釋了,以前在論壇里看到過有人說,直接make uImage好像提示沒有uImage的目標。所以我就先製作zImage,然後再用u-boot的mkimage工具轉化為uImage。其實uImage就是在zImage的開頭部分增加了一個64位元組的內核映像說明。
5.製作uImage內核映像
由於我使用的Bootloader是u-boot,所以要將zImage轉化為uImage,方法如下:
#mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -n "Linux kernel Image" -d zImage uImage-ramdisk
說明:mkimage工具是u-boot格式uImage內核映像製作工具。如果成功編譯u-boot之後,它會在u-boot源碼樹下的tools目錄之下。建議將其拷貝到宿主機的/sbin/目錄下,以方便使用。mkimage使用時的具體參數不再詳述,不清楚的請自己查閱。
6.製作ramdisk根文件系統
該過程是製作ramdisk根文件系統的核心步驟,方法如下:
a)創建根文件系統目錄:
#cd轉入到你的工作目錄。
#mkdir rootfs
#cd rootfs
#mkdir bin dev etc lib proc sbin sys usr mnt tmp var
#mkdir usr/bin usr/lib usr/sbin lib/moles
b)創建最基本的設備文件:
#cd dev
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
#cd ..
c)安裝/etc配置文件:
這里可以直接把友善之臂的root_qtopia里的幾個基本的配置文件拷貝過來,只拷貝必要的即可,並對其內容進行刪減,因為我做的ramdisk並不包含Qtopia等,全拷貝過來也沒有用。
我是從網上找的最小系統的etc配置文件直接解壓到我製作的根文件系統里了,並做參照友善之臂的root_qtopia添加了一些內容,見最後的說明。
操作如下:
#tar etc.tar.gz -C /xxx/rootfs
xxx表示你要製作的rootfs所在的目錄。
d)編譯內核模塊:
方法是如下:
進入Linux內核源碼目錄(linux-2.6.29)
#make moles ARCH=arm CROSS_COMPILE=arm-linux-
e)安裝內核模塊:
#make moles_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootfs
xxx表示你要製作的rootfs所在的目錄。
f)配置busybox
進入busybox目錄執行#make menuconfig
進入Busybox Settings -> build Options ->選中"Build busybox as a static binary「,即靜態鏈接,免去拷貝大量的庫文件。
Installation Options -> 選中"Don't use /usr",以免busybox不慎被安裝到宿主機系統的相應目錄下,破壞宿主機系統。
Busybox Installation Prefix (/xxx/rootfs),修改該選項表明編譯後的busybox將安裝到該位置。
g)編譯、安裝busybox
#make ARCH=arm CROSS_COMPILE=arm-linux-
幾分鍾編譯完成後
#make install
安裝到Busybox Installation Prefix (/xxx/rootfs)設定的目錄里。當前為我要製作的根文件系統目錄(/xxx/rootfs)。
③ linux 內核是什麼, 本人有linux基礎
Linux內核:Linux是一種開源電腦操作系統內核。它是一個用C語言寫成,符合POSIX標準的類Unix操作系統。Linux最早是由芬蘭Linus Torvalds為嘗試在英特爾x86架構上提供自由的類Unix操作系統而開發的。該計劃開始於1991年,在計劃的早期有一些Minix 黑客提供了協助,而今天全球無數程序員正在為該計劃無償提供幫助。
Linux最早是由芬蘭人Linus Torvalds設計的。當時由於UNⅨ的商業化,Andrew Tannebaum教授開發了Minix操作系統以便於不受AT&T許可協議的約束,為教學科研提供一個操作系統。
(3)linux內核310擴展閱讀:
Linux將標準的GNU許可協議改稱Copyleft,以便與Copyright相對照。通用的公共許可(GPL)允許用戶銷售、拷貝和改變具有Copyleft的應用程序。當然這些程序也可以是Copyright的,但是你必須允許進一步的銷售、拷貝和對其代碼進行改變,同時也必須使他人可以免費得到修改後的源代碼。事實證明,GPL對於Linux的成功起到了極大的作用。它啟動了一個十分繁榮的商用Linux階段,還為編程人員提供了一種凝聚力,誘使大家加入這個充滿了慈善精神的Linux運動。
④ linux的內核版本的介紹
Linux內核
Linux是最受歡迎的自由電腦操作系統內核。它是一個用C語言寫成,符合POSIX標準的類Unix操作系統。Linux最早是由芬蘭黑客 Linus Torvalds為嘗試在英特爾x86架構上提供自由免費的類Unix操作系統而開發的。該計劃開始於1991年,這里有一份Linus Torvalds當時在Usenet新聞組comp.os.minix所登載的貼子,這份著名的貼子標志著Linux計劃的正式開始。
在計劃的早期有一些Minix 黑客提供了協助,而今天全球無數程序員正在為該計劃無償提供幫助。
技術上說Linux是一個內核。「內核」指的是一個提供硬體抽象層、磁碟及文件系統控制、多任務等功能的系統軟體。一個內核不是一套完整的操作系統。一套基於Linux內核的完整操作系統叫作Linux操作系統,或是GNU/Linux。
具體看http://blog.csdn.net/huahuamoon/archive/2008/04/08/2259820.aspx
⑤ 一般優化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命令生效
⑥ 什麼是linux kernel有什麼作用
Linux內核(英語:Linux kernel)是一種開源的類Unix操作系統宏內核。
工作於平板電腦、智能手機及智能手錶的Android操作系統同樣通過Linux內核提供的服務完成自身功能。
一個計算機系統是一個硬體和軟體的共生體,它們互相依賴,不可分割。計算機的硬體,含有外圍設備、處理器、內存、硬碟和其他的電子設備組成計算機的發動機。但是沒有軟體來操作和控制它,自身是不能工作的。
完成這個控制工作的軟體就稱為操作系統,在Linux的術語中被稱為「內核」,也可以稱為「核心」。Linux內核的主要模塊(或組件)分以下幾個部分:存儲管理、CPU和進程管理、文件系統、設備管理和驅動、網路通信,以及系統的初始化(引導)、系統調用等。
整個Linux操作系統家族基於該內核部署在傳統計算機平台(如個人計算機和伺服器,以Linux發行版的形式)和各種嵌入式平台,如路由器、無線接入點、專用小交換機、機頂盒、FTA接收器、智能電視、數字視頻錄像機、網路附加存儲(NAS)等。
工作於平板電腦、智能手機及智能手錶的Android操作系統同樣通過Linux內核提供的服務完成自身功能。盡管於桌面電腦的佔用率較低,基於Linux的操作系統統治了幾乎從移動設備到主機的其他全部領域。截至2017年11月,世界前500台最強的超級計算機全部使用Linux。
(6)linux內核310擴展閱讀:
編程語言
Linux是用C語言中的GCC版(這種C語言有對標准C進行擴展)寫的,還有幾個用匯編語言(用的是GCC的"AT&T風格")寫的目標架構短段。因為要支持擴展的C語言,GCC在很長的時間里是唯一一個能正確編譯Linux的編譯器。
有許多其他的語言用在一些方面上,主要集中在內核構建過程中(這里指從源代碼創建可引導鏡像)。包括Perl、Python和多種腳本語言。有一些驅動可能是用C++、Fortran或其他語言寫的,但是這樣是強烈不建議的。
編譯器兼容性
GCC是Linux內核源代碼的預設編譯器。在2004年,Intel主張通過修改內核,以便Intel C++編譯器能正確編譯內核。在2009年,有通過修改內核2.6.22版而成功編譯的報告(並帶來平均8-9%性能增長)。
自從2010年,已經開始進行使用Clang建造Linux內核的努力,Clang是一個可作為替代的C語言編譯器;截止2014年4月12日,官方內核幾乎可以完全用Clang編譯。致力於這個目標的計劃叫做「LLVMLinux」,得名於Clang所基於的LLVM編譯器下部構造。
LLVMLinux不意圖復制Linux內核或LLVM,因此它是由最終提交給上游計劃的補丁構成的一個元計劃。使Linux內核可以用Clang編譯最大的好處是比GCC有更快的編譯速度,內核開發者可以得益於由此而來的更快的工作流程
⑦ linux 3.0內核識別sata 2T以上硬碟比較慢
首先,不能說識別500G的快,3T的就慢。你這個3T的盤看型號好像是希捷的3T企業級盤。
首先來說一下SATA磁碟的識別流程。
第一步,OOB,即雙方互相確認對方是SATA介面還是SAS介面
第二步,速度協商,即協調以兩者中最低的速度來作為傳輸速度
第三步,身份確認。SATA盤需要向HOST發送一下自己的身份的一個命令。
你的第一步明顯PASS。而且提示了速度是1.5Gbps,估計你主板的SATA controller是一代的吧
但是後面你看到了ata2.00: hard resetting link
這意思是說,運行失敗,雙方互相reset一下,從第一步重新識別。
很幸運你的重試幾次以後OK了。
我認為這里的問題點可能有2:
1,你的SATA盤是不是真的不是特別好?你放在別人機器上會是什麼反應
2,你的SATA controller是不是不好?因為你的速度是1.5Gbps,顯然是最低的速度。所以是不是你的主板型號比較老,和3T盤的兼容性不是很好?
⑧ linux 內核是什麼
Linux是最受歡迎的自由電腦操作系統內核。它是一個用C語言寫成,符合POSIX標準的類Unix操作系統。Linux最早是由芬蘭黑客 Linus Torvalds為嘗試在英特爾x86架構上提供自由免費的類Unix操作系統而開發的。該計劃開始於1991年,在計劃的早期有一些Minix 黑客提供了協助,而今天全球無數程序員正在為該計劃無償提供幫助。 技術上說Linux是一個內核。「內核」指的是一個提供硬體抽象層、磁碟及文件系統控制、多任務等功能的系統軟體。一個內核不是一套完整的操作系統。一套基於Linux內核的完整操作系統叫作Linux操作系統,或是GNU/Linux。
⑨ 2020年Linux現在最新的內核版本是多少,3.10是哪年的
kernel.org打開就能看見最新的5.5,3.10應該是2013~2017的
⑩ Linux內核有多大,不同Linux版本內核有什麼差別呢
根據版本的不同,內核大小也不同,新版本為幾百M。
1、發行版的不同,主要是對於版本的選擇,穩定性的測試,還有錯誤修正補丁都會讓每個發行版有自己特殊的內核。
2、官方內核的不同,這個區別很好說,官方的開發是基於 git 版本控制的,去看兩個 git 版本就知道了。一般是硬體支持,還有新的功能演算法,還有驅動增減,錯誤修補什麼的。
Linux的內核版本編號有點像如下的樣子:
2.6.32-642.el6.x86_64
主版本.次版本。發布版本-修改版本。
雖然編號就是如上的方式來編寫,不過依據Linux內核的發展歷程,內核版本的定義有點不太相同。
奇數、偶數版本分類:
在2.6x版本以前,托瓦斯將內核的發展方向分為兩類,並根據這兩類內核的發展分別給予不同的內核編號,那就是:
主、次版本為奇數:開發中版本。
如2.5.xx,這種內核版本主要用於測試與發展新功能,所以通常這種版本僅有內核開發工程師會使用。如果有新增的內核程序代碼,會加到這種版本當中,等到很多工程師測試沒問題後,才加入下一版本的穩定內核中;
主、次版本為偶數:穩定版本。
如2.6.xx,等到內核功能發展成熟後會加到這類版本中,主要用在一般家庭計算機以及企業版本中,重點在於提供一個用戶相對穩定的Linux操作環境平台。
至於發布版本則是在主、次版本架構不變的情況下,新增的功能累積到一定程度後新發布的內核版本。而由於Linux 的內核是使用CPL的授權,因此大家都能夠進行內核程序代碼的修改。
因此,如果有針對一個版本的內核修改過的部分程序代碼,那麼這個被修改過的新內核版本就可以加上所謂的修改版本。
Linux內核版本與Linux發行版本。
Linux內核版本與發行版本的版本並不相同,因為所謂的Linux版本指的應該是內核版本,而目前最新的內核版本應該是4.7.2(2016/08)才對,並不會有7.x的版本出現。
(10)linux內核310擴展閱讀:
Linux內核的任務:
1、從技術層面講,內核是硬體與軟體之間的一個中間層。作用是將應用層序的請求傳遞給硬體,並充當底層驅動程序,對系統中的各種設備和組件進行定址。
2、從應用程序的層面講,應用程序與硬體沒有聯系,只與內核有聯系,內核是應用程序知道的層次中的最底層。在實際工作中內核抽象了相關細節。
3、內核是一個資源管理程序。負責將可用的共享資源(CPU時間、磁碟空間、網路連接等)分配得到各個系統進程。
4、內核就像一個庫,提供了一組面向系統的命令。系統調用對於應用程序來說,就像調用普通函數一樣。