本文發(fā)表于Linux Format magazine雜志,作者從技術深度上解釋了Linux Kernel是如何工作的。相信對Linux開發(fā)者來說有不小的幫助。
牛津字典中對"kernel"一詞的定義是:"較軟的、通常是一個堅果可食用的部分。"當然還有第二種定義:"某個東西核心或者最重要的部分。"對Linux來說,它的Kernel無疑屬于第二種解釋。讓我們來看看這個重要的東西是如何工作的,先從一點理論說起。
廣義地來說kernel就是一個軟件,它在硬件和運行在計算機上的應用程序之間提供了一個層。嚴格點從計算機科學的角度來說,Linux中的Kernel指的是Linus Torvalds在90年代初期寫的那點代碼。
??? 所有的你在Linux各版本中看到的其他東西--Bash shell、KDE窗口管理器、web瀏覽器、X服務器、Tux Racer以及所有的其他,都不過是運行在Linux上的應用而已,而不是操作系統(tǒng)自身的一部分。為了給大家一個更加直觀的感覺,我來舉個例子,比如RHEL5的安裝大概要占據2.5GB的硬盤空間(具體多大當然視你的選擇安裝來定),在這其中,kernel以及它的各個模塊組件,只有47MB,所占比例約為2%。
在kernel內部
那么kernel到底是如何工作的呢?如下面的圖表。Kernel通過許多的進入端口也就是我們從技術角度所說的系統(tǒng)調用,來使得運行在它上面的應用程序可用。Kernel使用的系統(tǒng)調用比如"讀"和"寫"來提供你硬件的抽象(abstraction)。
#FormatImgID_0#
從程序員的視角來看,這些看起來只是普通的功能調用,然而實際上系統(tǒng)調用在處理器的操作模式上,從用戶空間到Kernel空間有一個明顯的切換。同時,系統(tǒng)調用提供了一個"Linux虛擬機",可以被認為是對硬件的抽象。
Kernel提供的更明顯的抽象之一是文件系統(tǒng)。舉例來說,這里有一段短的程序是用C寫的,它打開了一個文件并將內容拷貝到標準的輸出:
#include
int main()
{
??? int fd, count; char buf[1000];
??? fd=open("mydata", O_RDONLY);
??? count = read(fd, buf, 1000);
??? write(1, buf, count);
??? close(fd);
}
??? 在這里,你可以看到四個系統(tǒng)調用的例子:打開、讀、寫和關閉。不談這段程序語法的細節(jié),重點是:通過這些系統(tǒng)調用Linux Kernel提供了一個文件的"錯覺",而實際上它不過是一堆數據有了個名字,這樣一來你就不必去與硬件底層的堆棧、分區(qū)、頭和指針、分區(qū)等交涉了,而是直接以例子中的方式與硬件"交流",這也就是我們所說的抽象(abstraction),將底層的東西以更易懂的方式表達出來。
臺前幕后
系統(tǒng)文件是Kernel提供的較為明顯的一種抽象。還有一些特性不是這么的明顯,比如進程調度。任何一個時間,都可能有好幾個進程或者程序等待著運行。Kernel的時間調度給每個進程分配CPU時間,所以就一段時間內來說,我們會有種錯覺:電腦同一時間運行好幾個程序。這是另外一個C程序:
#include
main()
{
? if (fork()) {
??? write(1, "Parent\n", 7);
??? wait(0);
??? exit(0);
? }
? else {
??? write(1, "Child\n", 6);
??? exit(0);
? }
}
????
在這個程序中創(chuàng)建了一個新進程,而原來的進程(父進程)和新進程(子進程)都編寫了標準輸出然后結束。注意系統(tǒng)調用fork(), exit() 以及 wait()執(zhí)行程序的創(chuàng)建、結束和各自同步。這是進程管理和調度中最典型的簡單調用。
Kernel還有一個更加不易見到的功能,連程序員都不易察覺,那就是存儲管理。每個程序運行得都好像它有個自己的地址空間來調用一樣,實際上它跟其他進程一樣共享計算機的物理存儲,如果系統(tǒng)運行的存儲過低,它的地址空間甚至會被磁盤的交互區(qū)暫時寄用。存儲管理的另外一個方面是防止一個進程訪問其他進程的地址空間--對于多進程操作系統(tǒng)來說這是很必要的一個防范措施。
Kernel同樣還配置網絡鏈接協(xié)議比如IP、TCP和UDP等,它們在網絡上提供機器對機器(machine-to-machine)和進程對進程(process-to-process)的通信。這里又會造成一種假象,即TCP在兩個進程之間提供了一個固定連接--就好像連接兩個電話的銅線一樣,實際中卻并沒有固定的連接,特殊的引用協(xié)議比如FTP、DNS和HTTP是通過用戶級程序來實施的,而并非Kernel的一部分。
Linux(像之前的Unix)在安全方面口碑很好,這是因為Kernel跟蹤記錄了每個運行進程的user ID和group ID,每次當一個應用企圖訪問資源(比如打開一個文件來寫入)的時候,Kernel就會核對文件上的訪問許可然后做出允許/禁止的命令。這種訪問控制模式最終對整個Linux系統(tǒng)的安全作用很大。
Kernel還提供了一大套模塊的集合,其功能包括如何處理與硬件設備交流的諸多細節(jié)、如何從磁盤讀取一個分區(qū)、如果從網絡接口卡獲取數據包等。有時我們稱這些為設備驅動。
模塊化的Kernel
現在我們隊Kernel是做什么的已經有了一些了解,讓我們再來簡單看下它的物理組成。早期版本的Linux Kernel是整體式的,也就是說所有的部件都靜態(tài)地連接成一個(很大的)執(zhí)行文件。
相比較而言,現在的Linux Kernel是模塊化的:許多功能包含在模塊內,然后動態(tài)地載入kernel中。這使得kernel的內核很小,而且在運行kernel時可以不必reboot就能載入和替代模塊。
Kernel的內核在boot time時從位于/boot 目錄的一個文件加載進存儲中,通常這個/boot 目錄會被叫做KERNELVERSION,KERNELVERSION與kernel版本有關。(如果你想知道你的kernel版本是什么,運行命令行顯示系統(tǒng)信息-r。)kernel的模塊位于目錄/lib/modules/KERNELVERSION之下,所有的組件都會在kernel安裝時被拷貝。
管理模塊
大部分情況下,Linux管理它的模塊不需要你的幫忙,但是如果必要的時候有命令行可以來手動檢查和管理模塊。比如,為了查清楚當前到底哪個模塊在載入kernel。這里有一個輸出的例子:
# lsmod
pcspkr????????????? 4224? 0?
hci_usb??????????? 18204? 2?
psmouse??????????? 38920? 0?
bluetooth????????? 55908? 7 rfcomm,l2cap,hci_usb
yenta_socket?????? 27532? 5?
rsrc_nonstatic???? 14080? 1 yenta_socket
isofs????????????? 36284? 0?
輸出的內容包括:模塊的名字、大小、使用次數和依賴于它的模塊列表。使用次數對防止卸載當前活躍的模塊非??傄inux只允許使用次數為零的模塊被移除。
你可以使用modprobe來手動加載和卸載模塊,(還有兩個命令行叫做insmod和rmmod,但modprobe更易于使用因為它自動移除了模塊依賴)。比如lsmod的輸出在我們的電腦上顯示了一個名叫isofs的卸載模塊,它的使用次數是零而且沒有依賴模塊,(isofs是一個模塊,它支持CD上使用的ISO系統(tǒng)文件格式)這種情況下,kernel會允許我們卸載模塊:
# modprobe -r isofs
現在,isofs不再顯示在Ismod的輸出中,kernel由此節(jié)省了36,284字節(jié)的存儲。如果你放入CD并且讓它自動安裝,kernel將自動重新載入isofs模塊,而且isofs的使用次數增加到1次。如果這時候你還試圖移除模塊,就不會成功了因為它正在被使用:
# modprobe -r isofs?
FATAL: Module isofs is in use.
????
Lsmod只是列出了當前被載入的模塊,modprobe則將列出所有可用的模塊,它實際上輸出了/lib/modules/KERNELVERSION目錄下所有的模塊,名單會很長!
實際上,使用modprobe來手動加載一個模塊并不常見,但確實可以通過modprobe命令行來對模塊設置參數,例如:
# modprobe usbcore blinkenlights=1
我們并不是在創(chuàng)建blinkenlights,而是usbcore模塊的實參數。
那么如何知道一個模塊會接受什么參數呢?一個比較好的方法是使用modinfo命令,它列出了關于模塊的種種信息。這里有一個關于模塊snd-hda-intel的例子
# modinfo snd-hda-intel?
filename:?????? /lib/modules/2.6.20-16-generic/kernel/sound/pci/hda/snd-hda-intel.ko
description:??? Intel HDA driver
license:??????? GPL
srcversion:???? A3552B2DF3A932D88FFC00C
alias:????????? pci:v000010DEd0000055Dsv*sd*bc*sc*i*
alias:????????? pci:v000010DEd0000055Csv*sd*bc*sc*i*
depends:??????? snd-pcm,snd-page-alloc,snd-hda-codec,snd
vermagic:?????? 2.6.20-16-generic SMP mod_unload 586?
parm:?????????? index:Index value for Intel HD audio interface. (int)
parm:?????????? id:ID string for Intel HD audio interface. (charp)
parm:?????????? model:Use the given board model. (charp)
parm:?????????? position_fix:Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size). (int)
parm:?????????? probe_mask:Bitmask to probe codecs (default = -1). (int)
parm:?????????? single_cmd:Use single command to communicate with codecs (for debugging only). (bool)
parm:?????????? enable_msi:Enable Message Signaled Interrupt (MSI) (int)
parm:?????????? enable:bool
對我們來說比較有興趣的以"parm"開頭的那些部分:顯示了模塊所接受的參數。這些描述都比較簡明,如果想要更多的信息,那就安裝kernel的源代碼,在類似于/usr/src/KERNELVERSION/Documentation的目錄下你會找到。
里面會有一些有趣的東西,比如文件/usr/src/KERNELVERSION/Documentation/sound/alsa/ALSA-Configuration.txt描述的是被許多ALSA聲音模塊承認的參數;/usr/src/KERNELVERSION/Documentation/kernel-parameters.txt這個文件也很有用。
前幾天在Ubuntu論壇有一個例子,說的是如何將參數傳遞到一個模塊(詳見https://help.ubuntu.com/community/HdaIntelSoundHowto)。實際上問題的關鍵是snd-hda-intel參數在正確驅動聲音硬件時需要一點操作,而且在boot time加載時會中止。解決方法的一部分是將probe_mask=1選項賦給模塊,如果你是手動加載模塊,你需要輸入:
# modprobe snd-hda-intel probe_mask=1
更有可能,你在文件/etc/modprobe.conf中放置這樣類似的一行:options snd-hda-intel probe_mask=1
這"告訴"modprobe每次在加載snd-hda-intel模塊時包含probe_mask=1選項。現在的有些Linux版本將這一信息分離進/etc/modprobe.d下的不同文件中了,而不是放入modprobe.conf中。
/proc系統(tǒng)文件
Linux kernel同樣通過/proc系統(tǒng)文件來展示了許多細節(jié)。為了說明/proc,我們首先需要擴展我們對于文件的理解。除了認為文件就是存儲在硬盤或者CD或者存儲空間上的持久信息之外,我們還應當把它理解為任何可以通過傳統(tǒng)系統(tǒng)調用如:打開、讀、寫、關閉等訪問的信息,當然它也可以被常見的程序訪問。
/proc之下的"文件"完全是kernel虛擬的一個部分,給我們一個視角可以看到kernel內部的數據結構。實際上,許多Linux的報告工具均能夠很好地呈現在/proc下的文件中尋到的格式化版本的信息。比如,一列/proc/modules將展示一列當前加載的模塊。
同樣的,/proc/meminfo提供了關于虛擬存儲系統(tǒng)當前狀態(tài)的更多細節(jié)信息,而類如vmstat的工具則是以一種更加可理解的方式提供了相同的一些信息;/proc/net/arp顯示了系統(tǒng)ARP cache的當前內容,從命令行來說,arp -a顯示的也是相同的信息。
尤其有意思的是/proc/sys下的"文件"。/proc/sys/net/ipv4/ip_forward下的設置告訴我們kernel是否將轉發(fā)IP數據包,也就是說是否扮演網關的作用?,F在,kernel告訴我們這是關閉的:
# cat /proc/sys/net/ipv4/ip_forward?
0
當你發(fā)現你可以對這些文件寫入的時候,你會覺得更加有意思。繼續(xù)舉例來說:
# echo 1 > /proc/sys/net/ipv4/ip_forward
將在運行的kernel中打開IP 轉發(fā)(IP forwarding)
除了使用cat和echo來檢查和更正/proc/sys下的設置以外,你也可以使用sysctl命令:
# sysctl net.ipv4.ip_forward?
net.ipv4.ip_forward = 0
這等同于:
# cat /proc/sys/net/ipv4/ip_forward?
0
也等同于:
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
還等同于:
# echo 1 > /proc/sys/net/ipv4/ip_forward
????
需要注意的是,以這種方式你所做的設置改變只能影響當前運行的kernel的,當reboot的時候就不再有效。如果想讓設置永久有效,將它們放置在/etc/sysctl.conf文件中。在boot time時,sysctl將自動重新確定它在此文件下找到的任何設置。
/etc/sysctl.conf下的代碼行大概是這樣的:net.ipv4.ip_forward=1
? 性能調優(yōu)(performance tuning)
有這樣一個說法:/proc/sys下可寫入的參數孕育了整個Linux性能調優(yōu)的亞文化。我個人覺得這種說法有點過夸,但這里會有幾個你確實很想一試的例子:Oracle 10g的安裝說明(www.oracle.com/technology/obe/obe10gdb/install/linuxpreinst/linuxpreinst.htm)要求你設置一組參數,包括:kernel.shmmax=2147483648 這將公用存儲器的大小設置為2GB。(公用存儲器是處理期內的通信機制,允許存儲單元在多個進程的地址空間內同時可用)
IBM 'Redpaper'在Linux性能和調優(yōu)方面的說明(www.redbooks.ibm.com/abstracts/redp4285.html)在調教/proc/sys下的參數方面給出了不少建議,包括:vm.swappiness=100 這個參數控制著存儲頁如何被交換到磁盤。
一些參數可以被設置從而提高安全性,如net.ipv4.icmp_echo_ignore_broadcasts=1 它"告訴"kernel不必響應ICMP請求,從而使得你的網絡免受類如Smurf攻擊之類的拒絕服務器(denial-of-service)型攻擊。
net.ipv4.conf.all.rp_filter=1 則是"告訴"kernel加強入站過濾(ingress filtering)和出站過濾(egress filtering)
那么有沒有一個說明能涵蓋這所有的參數?好吧,這有一行命令:# sysctl -a 它將展示所有的參數名字和當前值。列表很長,但是你無法知道這些參數是做什么的。另外比較有用的參考是Red Hat Enterprise Linux Reference Guide.
解密:Linux內核是如何工作的 - 全文
本文導航
- 第 1 頁:解密:Linux內核是如何工作的
- 第 2 頁:模塊化的Kernel
- 第 3 頁:性能調優(yōu)
- LINUX內核(23105)
相關推薦
熱點推薦
Linux內核開發(fā)工具介紹
進行嵌入式Linux產品開發(fā),往往需要對內核進行裁剪和定制,以滿足嵌入式產品的功能和性能需求。本文介紹幾種閱讀Linux內核源碼的工具和方法。
2016-12-29 15:20:02
8157
8157
深入linux內核架構 Linux內核架構分析解讀
,嵌入式Linux往往會進行大量的裁剪,將不需要的應用裁剪掉。 O/S 服務層: O/S服務通常被認為是操作系統(tǒng)的一部分(窗口系統(tǒng),命令外殼等);此外,該子系統(tǒng)還包含內核的編程接口(編譯器工具和庫d) Linux內核層:這是本文關注的主要子系統(tǒng),內核抽象
2020-05-09 11:52:21
4332
4332
一文詳解Linux內核源碼組織結構
概要:本文內容包含Linux源碼樹結構分析、Linux Makefile分析、Kconfig文件分析、Linux內核配置選項分析。這些知識是為了理解內核文件的組織形式,為具體移植內核做知識準備。
2022-05-10 19:28:40
6583
6583Linux內核的作用
Linux操作系統(tǒng)是當今世界上最為廣泛使用的開源操作系統(tǒng)之一,內核則是一個操作系統(tǒng)的核心和靈魂所在。對于一名Linux驅動開發(fā)者來說,了解Linux內核的運行機制和Linux內核提供的一些關鍵功能(如虛擬內存管理、進程管理、文件系統(tǒng)、網絡協(xié)議棧等)都是我們日常工作和學習的重點。
2023-07-06 11:46:41
2259
2259
Linux內核地址映射模型與Linux內核高端內存詳解
Linux 操作系統(tǒng)和驅動程序運行在內核空間,應用程序運行在用戶空間,兩者不能簡單地使用指針傳遞數據,因為Linux使用的虛擬內存機制,用戶空間的數據可能被換出,當內核空間使用用戶空間指針時,對應
2018-05-08 10:33:19
3776
3776
Linux內核自解壓過程
Linux內核的啟動流程。有興趣的用戶可以參考其他書籍或資料進行深入了解?! ∏度胧?b class="flag-6" style="color: red">linux內核的啟動全過程主要分為三個階段。第一階段為內核自解壓過程,第二階段主要工作是設置ARM處理器工作模式、使能MMU、設置一級頁表等,而第三階段則主要為C代碼,包括內核初始化的全部工作。
2020-12-29 07:35:26
芯片解密不工作,為什么?
最近解密了一個芯片,解密出來的bin文件可以燒錄到MCU里面去,并把MCU 貼回母版中,母版不能工作。嘗試用燒錄器燒錄,需講bin文件轉換成S19 再到sap,在S19文件轉sap文件的時候,提示起始地址錯誤。哪位大師能幫忙解釋一下?
2020-11-02 16:25:59
Linux的內核教程
本章學習目標掌握LINUX內核版本的含義理解并掌握進程的概念掌握管道的概念及實現了解內核的數據結構了解LINUX內核的算法掌握LINUX內核升級的方法
2009-04-10 16:59:19
0
0Linux內核解讀入門
Linux內核解讀入門關鍵詞:Linux, 內核,源代碼一.核心源程序的文件組織: 1. Linux核心源程序通常都安裝在/usr/src/linux下,而且它有一個非常簡單的編號約定:任何偶數的核
2010-01-16 14:40:10
103
103Linux內核源代碼
Linux內核源代碼本章講述在L i n u x內核源碼中,應該從何處開始查找特定的內核函數。本書并不要求讀者具有C語言編程能力,也不要求讀者有一份可參閱的L i n u x
2010-02-09 15:24:49
36
36LINUX內核完全注釋
本書對LINUX早期操作系統(tǒng)內核(V0.11)全部代碼文件進行了詳細全面的注釋和說明,旨在使讀者能夠在盡量短的時間內對LINUX的工作機理獲得全面而深刻的理解,為進一步學習和研究LINUX系
2011-04-05 20:53:41
84
84《深入Linux內核架構》 莫爾勒著
電子發(fā)燒友為您提供了免費下載,《深入Linux內核架構》一書討論了Linux內核的概念、結構和實現。內核對一致和非一致內存訪問系統(tǒng)使用相同的數據結構。 Linux 操作系統(tǒng)的源代碼復雜
2011-07-10 11:24:17
0
0Linux內核0.11完全講解
本書對 Linux 早期操作系統(tǒng)內核(v0.11)全部代碼文件進行了詳細全面的注釋和說明,旨在使讀者能夠在盡量短的時間 內對Linux 的工作機理獲得全面而深刻的理解,為進一步學習和研究Lin
2011-12-01 15:48:07
438
438Linux內核完全注釋_趙炯
本書對Linux早期操作系統(tǒng)內核(v0.11)全部代碼文件進行了詳細全面的注釋和說明,旨在使讀者能夠在盡量短的時間內對Linux的工作機理獲得全面而深刻的理解,為進一步學習和研究Linux系統(tǒng)
2011-12-12 15:06:02
0
0基于Linux內核輸入子系統(tǒng)的驅動研究
Linux因其完全開放的特性和穩(wěn)定優(yōu)良的性能深受歡迎,當推出了內核輸入子系統(tǒng)后,更方便了嵌入式領域的驅動開放。介紹了Linux的設備驅動基礎,詳細闡述了基于Linux內核輸入子系統(tǒng)下
2012-09-12 16:38:52
23
23基于Linux 2.6內核Makefile分析
由于Linux的獨特優(yōu)勢,使越來越多的企業(yè)和科研機構把目光轉向Linux的開發(fā)和研究上。目前Linux最新的穩(wěn)定內核版本為2.6.17,但是當今絕大部分對于Linux Makefile的介紹文章都是
2017-09-18 19:09:09
0
0Linux內核配置系統(tǒng)詳解
隨著 Linux 操作系統(tǒng)的廣泛應用,特別是 Linux 在嵌入式領域的發(fā)展,越來越多的人開始投身到 Linux 內核級的開發(fā)中。面對日益龐大的 Linux 內核源代碼,開發(fā)者在完成自己的內核代碼后
2017-11-01 15:45:54
4
4關于Linux 2.6內核Makefile的分析
[摘要] 由于Linux的獨特優(yōu)勢,使越來越多的企業(yè)和科研機構把目光轉向Linux的開發(fā)和研究上。目前Linux最新的穩(wěn)定內核版本為2.6.17,但是當今絕大部分對于Linux Makefile
2017-11-02 10:12:55
1
1淺談Linux內核解讀入門
針對好多Linux 愛好者對內核很有興趣卻無從下口,本文旨在介紹一種解讀linux內核源碼的入門方法,而不是解說linux復雜的內核機制; 一.核心源程序的文件組織: 1.Linux核心源程序通常
2017-11-08 10:06:16
2
2REDIce-Linux--靈活的實時Linux內核
REDSonic, Inc. REDSonic的RedIce-Linux是一個實時Linux內核,設計來支持以任務和時間為臨界的應用,為你的系統(tǒng)提供質量服務。RedIce-Linux包括高精度的微秒
2017-11-08 10:24:03
12
12linux內核rcu機制詳解
Linux內核源碼當中,關于RCU的文檔比較齊全,你可以在 /Documentation/RCU/ 目錄下找到這些文件。Paul E. McKenney 是內核中RCU源碼的主要實現者,他也寫了很多RCU方面的文章。今天我們而主要來說說linux內核rcu的機制詳解。
2017-11-13 16:47:44
9308
9308
linux內核啟動流程
Linux的啟動代碼真的挺大,從匯編到C,從Makefile到LDS文件,需要理解的東西很多。畢竟Linux內核是由很多人,花費了巨大的時間和精力寫出來的。而且直到現在,這個世界上仍然有成千上萬的程序員在不斷完善Linux內核的代碼。
2017-11-14 16:19:46
4634
4634
Linux內核與Android的關系
Android雖然建立在Linux內核之上,但是他對內核進行了一些擴展,增加了一些驅動。比如Binder,loger等等驅動??梢阅肁ndroid內核代碼和其Baseline版本進行對比??梢钥吹紸ndroid對Linux內核的所有擴展。
2018-09-09 09:10:00
4865
4865如何配置和使用Linux內核printk功能
了解如何配置和使用Linux內核printk功能,包括其動態(tài)調試功能。
這樣可以選擇性地打印調試消息,而無需重新編譯內核。
2018-11-27 06:40:00
3556
3556Linux內核特性之VDSO
往往內核添加了一個功能,glibc要花很久才會用上。本來linux那邊為這個功能是否進入內核已經吵半天了,glibc這邊又要為是否使用這個內核新特性再次吵架半天(glibc不是Linux專有的,還得
2019-04-26 14:27:04
1909
1909需要了解linux內核空間和用戶空間的基本原理
linux驅動程序一般工作在內核空間,但也可以工作在用戶空間。下面我們將詳細解析,什么是內核空間,什么是用戶空間,以及如何判斷他們
2019-05-06 16:13:00
970
970嵌入式linux內核開發(fā)培訓之linux特性
通常所說的Linux是指Linus Torvald所寫的Linux操作系統(tǒng)內核。從誕生開始,Linux就遵循著開源的原則,免費供人們學習和使用。
2019-05-12 10:18:24
1017
1017Linux 內核數據結構:位圖(Bitmap)
除了各種鏈式和樹形數據結構,Linux內核還提供了位圖接口。位圖在Linux內核中大量使用。下面的源代碼文件包含這些結構的通用接口。
2019-05-14 17:24:00
3823
3823Linux 2.6內核的精彩世界
昨天的事,時間已經流走,內核開發(fā)團隊的2.6版內核開發(fā)工作已經接近完成了。本文將試圖描述2.6內核中的許多新特性(側重i386平臺的Linux)。和封閉源碼的軟件的預發(fā)布不一樣的是,這里所描述的所有特性
2019-04-02 14:38:55
525
525如何編譯Linux內核
內核,是一個操作系統(tǒng)的核心。它負責管理系統(tǒng)的進程、內存、設備驅動程序、文件和網絡系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。Linux作為一個自由軟件,在廣大愛好者的支持下,內核版本
2019-04-02 14:46:50
799
799Linux內核完全剖析修正版V5.0PDF電子書免費下載
本書對 Linux 操作系統(tǒng)早期內核(V0.12)全部源代碼文件進行了詳細全面的注釋和說明,旨在讓讀者能夠在盡量短的時間內對 Linux 的工作機理獲得全面而深刻的理解,為進一步學習和研究現代
2019-08-19 08:00:00
0
0谷歌Android設備內核引入主線Linux內核難嗎?
Android是基于Linux內核的操作系統(tǒng),但是,運行在Android設備上的內核其實與Google選擇的LTS版本Linux內核有很大不同。
2019-11-22 10:41:42
3673
3673
Linux內核創(chuàng)建者回應用戶,不會推薦使用ZFS On Linux
Linux內核創(chuàng)建者Linus Torvalds最近回應 Linux內核調度器存在問題的文章引發(fā)了大家的關注,在同一個帖子里,他還回復了一名用戶抱怨Linux內核最近破壞了內核源碼樹外ZFS模塊的評論。
2020-01-10 10:32:43
3095
3095Linux內核架構--基本概念
首先,Linux整體的架構如圖: 再來看Linux內核架構, 內核由五個主要子系統(tǒng)組成: Process Scheduler : 進程調度(SCHED)負責控制對CPU的進程訪問。調度程序執(zhí)行
2020-05-20 09:28:31
1105
1105linux內核是什么_linux內核學習路線
Linux內核是一個操作系統(tǒng)(OS)內核,本質上定義為類Unix。它用于不同的操作系統(tǒng),主要是以不同的Linux發(fā)行版的形式。Linux內核是第一個真正完整且突出的免費和開源軟件示例。Linux 內核是第一個真正完整且突出的免費和開源軟件示例,促使其廣泛采用并得到了數千名開發(fā)人員的貢獻。
2020-09-16 15:49:50
3072
3072最硬核的Linux內核文章
來源 :頭條號@Linux學習教程,冰凌塊兒 01 前言 本文主要講解什么是Linux內核,以及通過多張圖片展示Linux內核的作用與功能,以便于讀者能快速理解什么是Linux內核,能看懂Linux
2020-10-19 17:46:08
2642
2642
快速理解什么是Linux內核以及Linux內核的內容
01 前言 本文主要講解什么是Linux內核,以及通過多張圖片展示Linux內核的作用與功能,以便于讀者能快速理解什么是Linux內核,能看懂Linux內核。 擁有超過1300萬行的代碼,Linux
2020-10-21 12:02:53
4905
4905
如何才能編譯Linux的內核
內核,是一個操作系統(tǒng)的核心。它負責管理系統(tǒng)的進程、內存、設備驅動程序、文件和網絡系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。Linux 作為一個自由軟件,在廣大愛好者的支持下,內核版本不斷更新。新的內核修訂了舊
2020-11-04 18:04:10
8
8如何使用Linux內核實現USB驅動程序框架
Linux內核提供了完整的USB驅動程序框架。USB總線采用樹形結構,在一條總線上只能有唯一的主機設備。 Linux內核從主機和設備兩個角度觀察USB總線結構。本節(jié)介紹 Linux內核USB驅動程序
2020-11-06 17:59:17
20
20Linux內核反向映射基礎知識詳解
作者簡介 Cheetah,曾為U-boot社區(qū)和Linux內核社區(qū)提交過若干補丁,主要從事Linux相關系統(tǒng)軟件開發(fā)工作,負責Soc芯片BringUp及系統(tǒng)軟件開發(fā),喜歡閱讀內核源代碼,在不斷的學習
2020-11-26 14:42:19
2597
2597Linux內核學習的環(huán)境搭建和內核編譯
基礎知識及基本shell命令;現代操作系統(tǒng)的基本概念;C語言和gcc基本使用。 在開始我們的linux內核學習之前。首先需要搭建我們的工作學習環(huán)境,即安裝linux系統(tǒng)。關于linux系統(tǒng)構建本身的學問已經復雜到可以成為一個獨立的學科了,畢竟這不是我們學習的內容,所以我選擇最簡單的方法
2021-01-02 18:01:00
2580
2580Linux 5.10.5內核正式發(fā)布
1月6日,Linux基金會宣布,Linux 5.10.5內核正式發(fā)布,所有5.10內核系列的用戶都必須升級。
2021-01-07 14:36:57
3112
3112如何在Petalinux創(chuàng)建Linux內核模塊?
創(chuàng)建內核模塊 Petalinux可以幫助工程師簡化內核模塊的創(chuàng)建工作。在petalinux工程目錄下,使用命令“ petalinux-create -t modules --name
2021-03-02 11:10:03
5371
5371淺論Linux 內核函數調用關系的驗證方法
作為最流行的開源操作系統(tǒng),Linux在各行各業(yè)得到了廣泛的應用。因此了解Linux 內核的架構及工作機制就顯得非常重要
2021-04-02 11:30:12
2803
2803
如何使用BPF對Linux內核進行實時跟蹤
我們可以使用BPF對Linux內核進行跟蹤,收集我們想要的內核數據,從而對Linux中的程序進行分析和調試。與其它的跟蹤技術相比,使用BPF的主要優(yōu)點是幾乎可以訪問Linux內核和應用程序的任何信息,同時,BPF對系統(tǒng)性能影響很小,執(zhí)行效率很高,而且開發(fā)人員不需要因為收集數據而修改程序。
2021-06-30 17:28:30
2952
2952
嵌入式LINUX系統(tǒng)內核和內核模塊調試
嵌入式LINUX系統(tǒng)內核和內核模塊調試(嵌入式開發(fā)和硬件開發(fā))-嵌入式LINUX系統(tǒng)內核和內核模塊調試? ? ? ? ? ? ? ? ?
2021-07-30 13:55:21
10
10Linux內核文件Cache機制
Linux內核文件Cache機制(開關電源技術與設計 第二版)-Linux內核文件Cache機制? ? ? ? ? ? ? ??
2021-08-31 16:34:54
4
4嵌入式Linux的內核編譯
實驗環(huán)境VMware Workstation PlayerUbuntu16.04kernel-3.2.tar.bz2Linux內核編譯在ubuntu上編譯嵌入式Linux內核,需要大家提前安裝好交叉
2021-11-01 17:07:20
19
19STM32MP157 Linux系統(tǒng)移植開發(fā)篇8:Linux內核配置方法及編譯
Linux內核配置及編譯解壓內核建立源碼目錄該目錄下以patch結尾的文件為ST官方提供的補丁文件,linux-5.4.31.tar.xz為標準linux源碼包。解壓標準內核源碼包
2021-12-04 21:06:16
9
9STM32MP157 Linux系統(tǒng)移植開發(fā)篇7:Linux內核目錄結構詳解
Linux內核目錄結構Linux內核源代碼非常龐大,隨著版本的發(fā)展不斷增加。它使用目錄樹結構,并且使用Makefile組織配置編譯。初次接觸Linux內核,最好仔細閱讀頂層目錄的readme文件
2021-12-17 18:29:41
10
10Linux內核模塊簡介
Linux系統(tǒng)內核按體積和功能的不同,可以分為兩種:微內核與單內核。 微內核,體積小,包含的功能也少,只負責進行進程調度、進程通信、底層中斷等工作,而把傳統(tǒng)操作系統(tǒng)內核的其他功能 模塊,如設備
2022-01-17 09:57:18
1
1Linux內核架構和工作原理
作用是將應用層序的請求傳遞給硬件,并充當底層驅動程序,對系統(tǒng)中的各種設備和組件進行尋址。目前支持模塊的動態(tài)裝卸(裁剪)。Linux內核就是基于這個策略實現的。Linux進程1.采用層次結構,每個進程
2022-05-07 14:05:06
887
887
學習linux內核的一些建議
學習linux內核,這個可不像學一門語言,c或者java一個月或者3月你就能精通掌握。學習linux內核是需要一步一步循序漸進,掌握正確的linux內核學習路線對學習至關重要,本篇文章就來分享學習linux內核的一些建議吧。
2022-05-07 15:20:27
933
933
Linux 6.1發(fā)布,微軟貢獻Linux內核代碼
此外,公告中并沒有提及 Linux 6.1 是否是 LTS 版本。按照 Linux 內核維護者 Greg Kroah-Hartman 的說法,Linux 內核的 LTS 通常會選取每年的最后一個內核
2022-12-14 09:54:59
2733
2733Linux 是操作系統(tǒng)還是內核?
內核是每個操作系統(tǒng)的中心。這不僅僅是 Linux 的事情。Windows 和 macOS 也有內核。
2023-03-15 10:05:14
1562
1562Linux內核移植教程
半導體廠商會從 Linux內核官網下載某個版本,將其移植到自己的 CPU上,測試成功后就會將其開放給該半導體廠商的 CPU開發(fā)者。開發(fā)者下載其提供的 Linux內核,然后將其移植到自己的產品上。
2023-04-19 11:20:32
2273
2273
什么是Linux內核 Linux內核體系結構
如果Windows已經安裝了所有可用的驅動程序,而您只需要打開所需的驅動程序怎么辦?這本質上就是內核模塊為Linux所做的。內核模塊,也稱為可加載內核模塊(LKM),對于保持內核在不消耗所有可用內存的情況下與所有硬件一起工作是必不可少的。
2023-06-01 09:59:48
1798
1798
Linux系統(tǒng)內核概述
Linux 內核是 Linux 操作系統(tǒng)的主要組件,也是計算機硬件與其進程之間的核心接口。它負責兩者之間的通信,還要盡可能高效地管理資源。
2023-06-09 09:29:06
1072
1072
linux內核源代碼詳解
在安裝好的Linux系統(tǒng)中,內核的源代碼位于/ust/src/linux.如果是從GNU網站下載的Linux內核的tar文件,則展開以后在一個叫linux的子目錄中。以后本書中談到源文件的路徑時,就總是從linux這個節(jié)點開始。
2023-09-06 17:01:23
4
4獲取Linux內核源碼的方法
(ELF1/ELF1S開發(fā)板及顯示屏)Linux內核是操作系統(tǒng)中最核心的部分,它負責管理計算機硬件資源,并提供對應用程序和其他系統(tǒng)組件的訪問接口,控制著計算機的內存、處理器、設備驅動程序和文件系統(tǒng)等
2023-12-13 09:49:33
1824
1824
Linux內核測試技術
Linux 內核是Linux操作系統(tǒng)的核心部分,負責管理硬件資源和提供系統(tǒng)調用接口。隨著 Linux 內核的不斷發(fā)展和更新,其復雜性和代碼規(guī)模也在不斷增加。因此,確保內核的穩(wěn)定性和可靠性變得尤為重要
2024-08-13 13:42:35
2307
2307
linux驅動程序如何加載進內核
在Linux系統(tǒng)中,驅動程序是內核與硬件設備之間的橋梁。它們允許內核與硬件設備進行通信,從而實現對硬件設備的控制和管理。 驅動程序的編寫 驅動程序的編寫是Linux驅動開發(fā)的基礎。在編寫驅動程序之前
2024-08-30 15:02:19
1661
1661
電子發(fā)燒友App












評論