新聞中心
斷言是編程中常用的一種技術(shù),用于判斷程序中的某些條件是否成立,并在條件不成立時拋出異?;蝈e誤信息。Linux內(nèi)核也采用了斷言機(jī)制,用于檢測內(nèi)核代碼中的錯誤和邏輯缺陷,防止這些缺陷引發(fā)系統(tǒng)崩潰或安全漏洞。

一、斷言的定義和作用
斷言是一種自動化的調(diào)試技術(shù),針對程序中的某個條件進(jìn)行判斷。如果條件成立,則程序正常繼續(xù)執(zhí)行;如果條件不成立,則程序拋出異常或錯誤信息,中斷當(dāng)前執(zhí)行流程。在大規(guī)模軟件開發(fā)中,斷言可以幫助開發(fā)人員快速發(fā)現(xiàn)并定位程序中的錯誤,提高開發(fā)效率。
在Linux內(nèi)核開發(fā)中,斷言有以下作用:
1. 檢測內(nèi)核代碼中的錯誤和邏輯缺陷。內(nèi)核代碼是龐大而復(fù)雜的,其中可能存在各種錯誤和漏洞,這些錯誤一旦被調(diào)用就會導(dǎo)致系統(tǒng)異?;虬踩┒?。使用斷言機(jī)制可以在調(diào)試時捕獲這些錯誤和缺陷,并及時修復(fù)。
2. 提高內(nèi)核代碼的可讀性和可維護(hù)性。使用斷言可以使內(nèi)核代碼更具可讀性和可維護(hù)性,因?yàn)閿嘌钥梢员磉_(dá)程序狀態(tài)和賦值,使得代碼更加直觀和易于理解。
3. 加快代碼調(diào)試和測試速度。斷言可以在代碼開發(fā)的早期檢測出錯誤,提高調(diào)試和測試的效率。另外,使用斷言還可以節(jié)省開發(fā)時間,因?yàn)槌绦虻男袨橥艿筋A(yù)設(shè)后的假設(shè)所限制,使用斷言可以減少錯誤發(fā)生的可能性,從而節(jié)約時間和工作量。
二、Linux內(nèi)核斷言機(jī)制的實(shí)現(xiàn)方式
Linux內(nèi)核采用了一種叫做“BUG_ON”的宏定義來實(shí)現(xiàn)斷言機(jī)制。這個宏可以用于邏輯檢查和調(diào)試,如果表達(dá)式不成立,就會輸出錯誤信息并停止程序。該宏定義如下:
#define BUG_ON(condition) do { if (unlikely(condition)) { \ printk(KERN_ERR “BUG: flure condition (” #condition “) at %s:%d\n”, \ __FILE__, __LINE__); \ /* oops 忙等待機(jī)制 */ } } while(0)
在上面的宏定義中,#condition是標(biāo)識符字符串,__FILE__是當(dāng)前文件名,__LINE__是當(dāng)前行號,如果檢查失敗,則會輸出錯誤信息并停止程序。該宏的定義中使用了一個獨(dú)特的語法:do {…} while(0),這是一個常用的技巧,主要用于避免使用if語句時的語法錯誤和副作用。
使用BUG_ON宏的示例代碼如下所示:
unsigned long i = 0;
/* 檢查i是否等于0 */
BUG_ON(i == 0);
如果i等于0,該代碼會輸出一個錯誤信息,并終止程序的執(zhí)行。
三、Linux內(nèi)核斷言的應(yīng)用場景
在Linux內(nèi)核中,斷言機(jī)制廣泛應(yīng)用于以下場景:
1. 內(nèi)存泄漏檢查。在內(nèi)核中,內(nèi)存泄漏是一個常見問題,容易造成系統(tǒng)崩潰或安全漏洞。使用斷言機(jī)制可以及時發(fā)現(xiàn)并修復(fù)這些問題。
2. 數(shù)組邊界檢查。在C語言中,數(shù)組越界會導(dǎo)致內(nèi)存訪問錯誤,可能會引發(fā)系統(tǒng)崩潰。使用斷言可以檢查數(shù)組訪問是否越界,提高代碼的健壯性和可靠性。
3. 鎖保護(hù)檢查。在內(nèi)核中,鎖保護(hù)非常重要,沒有充分的鎖保護(hù)可能會導(dǎo)致系統(tǒng)崩潰或競態(tài)條件。使用斷言可以檢查鎖保護(hù)是否充分,提高系統(tǒng)的穩(wěn)定性和安全性。
4. 參數(shù)范圍檢查。在內(nèi)核開發(fā)中,函數(shù)參數(shù)的范圍檢查非常重要,因?yàn)閰?shù)的不正確或不充分可能會導(dǎo)致函數(shù)無法正常執(zhí)行,甚至導(dǎo)致系統(tǒng)異常。使用斷言可以檢查函數(shù)參數(shù)的范圍,避免這些問題的發(fā)生。
四、注意事項(xiàng)
在使用斷言機(jī)制時,需要注意以下幾點(diǎn):
1. 斷言機(jī)制不應(yīng)被用于運(yùn)行時檢查。在開發(fā)過程中,使用斷言可以檢查代碼中的錯誤和缺陷,并及時修復(fù)。但是,一旦程序發(fā)布后,斷言應(yīng)該關(guān)閉,否則會影響程序的性能和穩(wěn)定性。
2. 斷言并不總是可靠的。斷言機(jī)制可以發(fā)現(xiàn)代碼中的錯誤和缺陷,但并不能完全覆蓋所有情況。因此,開發(fā)人員應(yīng)該謹(jǐn)慎使用斷言,并確保代碼的正確性和健壯性。
3. 斷言應(yīng)該適當(dāng)?shù)厥褂米⑨尯臀臋n。在使用斷言時,應(yīng)該適當(dāng)?shù)靥砑幼⑨尯臀臋n,加強(qiáng)代碼的可讀性和可維護(hù)性。同時,應(yīng)該與團(tuán)隊(duì)中的其他開發(fā)人員協(xié)調(diào)一致,以確保斷言機(jī)制的統(tǒng)一和一致性。
五、
斷言是一種重要的調(diào)試技術(shù),在大規(guī)模軟件開發(fā)中具有重要的作用。在Linux內(nèi)核中,斷言機(jī)制防止程序中的錯誤和邏輯缺陷,提高程序的可讀性和可維護(hù)性,并加快代碼調(diào)試和測試速度。使用BUG_ON宏實(shí)現(xiàn)斷言,可以應(yīng)用于內(nèi)存泄漏檢查、數(shù)組邊界檢查、鎖保護(hù)檢查和參數(shù)范圍檢查等場景。但是,在使用斷言時需要注意正確使用,并適當(dāng)?shù)丶幼⑨尯臀臋n,以保證代碼的正確性和健壯性。
相關(guān)問題拓展閱讀:
- 如何在Linux內(nèi)核里增加一個系統(tǒng)調(diào)用?
- Linux內(nèi)核有多大,不同Linux版本內(nèi)核有什么差別呢
如何在Linux內(nèi)核里增加一個系統(tǒng)調(diào)用?
一、Linux0.11下添加系統(tǒng)調(diào)用:\x0d\x0a\x0d\x0a我在bochs2.2.1中對linux0.11內(nèi)核添加了一個新的系統(tǒng)調(diào)用,步驟如下: \x0d\x0a1./usr/src/linux/include/unistd.h中添加:#define __NR_mytest 87 \x0d\x0a然后在下面聲明函數(shù)原型:int mytest(); \x0d\x0a2./usr/src/linux/include/linux/sys.h中添加:extern int sys_mytest(); \x0d\x0a然后在sys_call_table中最后加上sys_mytest; \x0d\x0a3.在/usr/src/linux/kernel/sys.c中添加函數(shù)實(shí)現(xiàn)如下: \x0d\x0aint sys_mytest(){ \x0d\x0aprintk(“This is a test!”); \x0d\x0areturn 123; \x0d\x0a} \x0d\x0a4.在/usr/src/linux/kernel/system_call.s中對系統(tǒng)調(diào)用號加1(原來是86改成了87) \x0d\x0a5.然后到/usr/src/linux目錄下編譯內(nèi)核make clean; make Image \x0d\x0a6. cp /usr/src/linux/include/unistd.h /usr/include/unistd.h \x0d\x0a7. reset bochs \x0d\x0a8. 在/usr/root中生成test.c文件如下: \x0d\x0a#define __LIBRARY__ \x0d\x0a#include
\x0d\x0a_syscall0(int,mytest) \x0d\x0aint main(){ \x0d\x0aint a; \x0d\x0aa = mytest(); \x0d\x0aprintf(“%d”, a); \x0d\x0areturn 0; \x0d\x0a} \x0d\x0a9.然后gcc test.c編譯之后運(yùn)行a.out,前面所有步驟都通過,但是每次調(diào)用都是返回-1,然后我查過errno為1(表示操作不允許),就不知道為什么了? \x0d\x0a系統(tǒng)知道的高手們能夠告知一下,不勝感激!這個問題困擾我很久了! \x0d\x0a\x0d\x0a二、新Linux內(nèi)核添加系統(tǒng)調(diào)用\x0d\x0a\x0d\x0a如何在Linux系統(tǒng)中添加新的系統(tǒng)調(diào)用\x0d\x0a系統(tǒng)調(diào)用是應(yīng)用程序和操作系統(tǒng)內(nèi)核之間的功能接口。其主要目的是使得用戶可以使用操作系統(tǒng)提供的有關(guān)設(shè)備管理、輸入/輸入系統(tǒng)、文件系統(tǒng)和進(jìn)程控制、通信以及存儲管理等方面的功能,而不必了解系統(tǒng)程序的內(nèi)部結(jié)構(gòu)和有關(guān)硬件細(xì)節(jié),從而起到減輕用戶負(fù)擔(dān)和保護(hù)系統(tǒng)以及提高資源利用率的作用。\x0d\x0a\x0d\x0a Linux操作系統(tǒng)作為自由軟件的代表,它優(yōu)良的性能使得它的應(yīng)用日益廣泛,不僅得到專業(yè)人士的肯定,而且商業(yè)化的應(yīng)用也是如火如荼。在Linux中,大部分的系統(tǒng)調(diào)用包含在Linux的libc庫中,通過標(biāo)準(zhǔn)的C函數(shù)調(diào)用方法可以調(diào)用這些系統(tǒng)調(diào)用。那么,對Linux的發(fā)燒友來說,如何在Linux中增加新的系統(tǒng)調(diào)用呢? \x0d\x0a 1 Linux系統(tǒng)調(diào)用機(jī)制\x0d\x0a\x0d\x0a 在Linux系統(tǒng)中,系統(tǒng)調(diào)用是作為一種異常類型實(shí)現(xiàn)的。它將執(zhí)行相應(yīng)的機(jī)器代碼指令來產(chǎn)生異常信號。產(chǎn)生中斷或異常的重要效果是系統(tǒng)自動將用戶態(tài)切換為核心態(tài)來對它進(jìn)行處理。這就是說,執(zhí)行系統(tǒng)調(diào)用異常指令時,自動地將系統(tǒng)切換為核心態(tài),并安排異常處理程序的執(zhí)行。Linux用來實(shí)現(xiàn)系統(tǒng)調(diào)用異常的實(shí)際指令是:\x0d\x0a\x0d\x0a 拆慶春Int $0x80\x0d\x0a\x0d\x0a 這一指令使用中斷/異常向量號128(即16進(jìn)制的80)將控制權(quán)轉(zhuǎn)移給內(nèi)核。為達(dá)到在使用系統(tǒng)調(diào)用時不必用機(jī)器指令編程,在標(biāo)準(zhǔn)的C語言庫中為每一系統(tǒng)調(diào)用提供了一段短的子程序,完成機(jī)器代碼的編程工作。事實(shí)上,機(jī)器代碼段非常簡短。它所要做的工作只是將送給系統(tǒng)調(diào)用的參數(shù)加載到CPU寄存器中,接著執(zhí)行int $0x80指令。然后運(yùn)差棗行系統(tǒng)調(diào)用,系統(tǒng)調(diào)用的返回值將送入CPU的一個寄存器中,標(biāo)準(zhǔn)的庫子旅耐程序取得這一返回值,并將它送回用戶程序。\x0d\x0a\x0d\x0a 為使系統(tǒng)調(diào)用的執(zhí)行成為一項(xiàng)簡單的任務(wù),Linux提供了一組預(yù)處理宏指令。它們可以用在程序中。這些宏指令取一定的參數(shù),然后擴(kuò)展為調(diào)用指定的系統(tǒng)調(diào)用的函數(shù)。\x0d\x0a\x0d\x0a 這些宏指令具有類似下面的名稱格式:\x0d\x0a\x0d\x0a _syscallN(parameters)\x0d\x0a\x0d\x0a 其中N是系統(tǒng)調(diào)用所需的參數(shù)數(shù)目,而parameters則用一組參數(shù)代替。這些參數(shù)使宏指令完成適合于特定的系統(tǒng)調(diào)用的擴(kuò)展。例如,為了建立調(diào)用setuid()系統(tǒng)調(diào)用的函數(shù),應(yīng)該使用:\x0d\x0a\x0d\x0a _syscall1( int, setuid, uid_t, uid )\x0d\x0a\x0d\x0a syscallN( )宏指令的第1個參數(shù)int說明產(chǎn)生的函數(shù)的返回值的類型是整型,第2個參數(shù)setuid說明產(chǎn)生的函數(shù)的名稱。后面是系統(tǒng)調(diào)用所需要的每個參數(shù)。這一宏指令后面還有兩個參數(shù)uid_t和uid分別用來指定參數(shù)的類型和名稱。\x0d\x0a\x0d\x0a 另外,用作系統(tǒng)調(diào)用的參數(shù)的數(shù)據(jù)類型有一個限制,它們的容量不能超過四個字節(jié)。這是因?yàn)閳?zhí)行int $0x80指令進(jìn)行系統(tǒng)調(diào)用時,所有的參數(shù)值都存在32位的CPU寄存器中。使用CPU寄存器傳遞參數(shù)帶來的另一個限制是可以傳送給系統(tǒng)調(diào)用的參數(shù)的數(shù)目。這個限制是最多可以傳遞5個參數(shù)。所以Linux一共定義了6個不同的_syscallN()宏指令,從_syscall0()、_syscall1()直到_syscall5()。\x0d\x0a\x0d\x0a 一旦_syscallN()宏指令用特定系統(tǒng)調(diào)用的相應(yīng)參數(shù)進(jìn)行了擴(kuò)展,得到的結(jié)果是一個與系統(tǒng)調(diào)用同名的函數(shù),它可以在用戶程序中執(zhí)行這一系統(tǒng)調(diào)用。\x0d\x0a 2 添加新的系統(tǒng)調(diào)用 \x0d\x0a 如果用戶在Linux中添加新的系統(tǒng)調(diào)用,應(yīng)該遵循幾個步驟才能添加成功,下面幾個步驟詳細(xì)說明了添加系統(tǒng)調(diào)用的相關(guān)內(nèi)容。\x0d\x0a\x0d\x0a (1) 添加源代碼\x0d\x0a\x0d\x0a 之一個任務(wù)是編寫加到內(nèi)核中的源程序,即將要加到一個內(nèi)核文件中去的一個函數(shù),該函數(shù)的名稱應(yīng)該是新的系統(tǒng)調(diào)用名稱前面加上sys_標(biāo)志。假設(shè)新加的系統(tǒng)調(diào)用為mycall(int number),在/usr/src/linux/kernel/sys.c文件中添加源代碼,如下所示:\x0d\x0a alinkage int sys_mycall(int number) \x0d\x0a { \x0d\x0a return number; \x0d\x0a }\x0d\x0a 作為一個最簡單的例子,我們新加的系統(tǒng)調(diào)用僅僅返回一個整型值。\x0d\x0a\x0d\x0a (2) 連接新的系統(tǒng)調(diào)用\x0d\x0a\x0d\x0a 添加新的系統(tǒng)調(diào)用后,下一個任務(wù)是使Linux內(nèi)核的其余部分知道該程序的存在。為了從已有的內(nèi)核程序中增加到新的函數(shù)的連接,需要編輯兩個文件。\x0d\x0a\x0d\x0a 在我們所用的Linux內(nèi)核版本(RedHat 6.0,內(nèi)核為2.2.5-15)中,之一個要修改的文件是:\x0d\x0a\x0d\x0a /usr/src/linux/include/a-i386/unistd.h\x0d\x0a\x0d\x0a 該文件中包含了系統(tǒng)調(diào)用清單,用來給每個系統(tǒng)調(diào)用分配一個唯一的號碼。文件中每一行的格式如下:\x0d\x0a\x0d\x0a #define __NR_name NNN\x0d\x0a\x0d\x0a 其中,name用系統(tǒng)調(diào)用名稱代替,而NNN則是該系統(tǒng)調(diào)用對應(yīng)的號碼。應(yīng)該將新的系統(tǒng)調(diào)用名稱加到清單的最后,并給它分配號碼序列中下一個可用的系統(tǒng)調(diào)用號。我們的系統(tǒng)調(diào)用如下:\x0d\x0a\x0d\x0a #define __NR_mycall 191\x0d\x0a\x0d\x0a 系統(tǒng)調(diào)用號為191,之所以系統(tǒng)調(diào)用號是191,是因?yàn)長inux-2.2內(nèi)核自身的系統(tǒng)調(diào)用號碼已經(jīng)用到190。\x0d\x0a\x0d\x0a 第二個要修改的文件是:\x0d\x0a\x0d\x0a /usr/src/linux/arch/i386/kernel/entry.S\x0d\x0a\x0d\x0a 該文件中有類似如下的清單:\x0d\x0a .long SYMBOL_NAME()\x0d\x0a\x0d\x0a 該清單用來對sys_call_table數(shù)組進(jìn)行初始化。該數(shù)組包含指向內(nèi)核中每個系統(tǒng)調(diào)用的指針。這樣就在數(shù)組中增加了新的內(nèi)核函數(shù)的指針。我們在清單最后添加一行:\x0d\x0a .long SYMBOL_NAME(sys_mycall)\x0d\x0a\x0d\x0a (3) 重建新的Linux內(nèi)核\x0d\x0a\x0d\x0a 為使新的系統(tǒng)調(diào)用生效,需要重建Linux的內(nèi)核。這需要以超級用戶身份登錄。\x0d\x0a #pwd \x0d\x0a /usr/src/linux \x0d\x0a #\x0d\x0a\x0d\x0a 超級用戶在當(dāng)前工作目錄(/usr/src/linux)下,才可以重建內(nèi)核。\x0d\x0a\x0d\x0a #make config \x0d\x0a #make dep \x0d\x0a #make clearn \x0d\x0a #make bzImage\x0d\x0a\x0d\x0a 編譯完畢后,系統(tǒng)生成一可用于安裝的、壓縮的內(nèi)核映象文件:\x0d\x0a\x0d\x0a /usr/src/linux/arch/i386/boot/bzImage \x0d\x0a ?。?) 用新的內(nèi)核啟動系統(tǒng) \x0d\x0a 要使用新的系統(tǒng)調(diào)用,需要用重建的新內(nèi)核重新引導(dǎo)系統(tǒng)。為此,需要修改/etc/lilo.conf文件,在我們的系統(tǒng)中,該文件內(nèi)容如下:\x0d\x0a\x0d\x0aboot=/dev/hda \x0d\x0a map=/boot/map \x0d\x0a install=/boot/boot.b \x0d\x0a prompt \x0d\x0a timeout=50 \x0d\x0a\x0d\x0a image=/boot/vmlinuz-2.2.5-15 \x0d\x0a label=linux \x0d\x0a root=/dev/hdb1 \x0d\x0a read-only \x0d\x0a\x0d\x0a other=/dev/hda1 \x0d\x0a label=dos \x0d\x0a table=/dev/had\x0d\x0a\x0d\x0a 首先編輯該文件,添加新的引導(dǎo)內(nèi)核:\x0d\x0a image=/boot/bzImage-new \x0d\x0a label=linux-new \x0d\x0a root=/dev/hdb1 \x0d\x0a read-only\x0d\x0a\x0d\x0a 添加完畢,該文件內(nèi)容如下所示:\x0d\x0a boot=/dev/hda \x0d\x0a map=/boot/map \x0d\x0a install=/boot/boot.b \x0d\x0a prompt \x0d\x0a timeout=50 \x0d\x0a\x0d\x0a image=/boot/bzImage-new \x0d\x0a label=linux-new \x0d\x0a root=/dev/hdb1 \x0d\x0a read-only \x0d\x0a\x0d\x0a image=/boot/vmlinuz-2.2.5-15 \x0d\x0a label=linux \x0d\x0a root=/dev/hdb1 \x0d\x0a read-only \x0d\x0a\x0d\x0a other=/dev/hda1 \x0d\x0a label=dos \x0d\x0a table=/dev/hda\x0d\x0a\x0d\x0a 這樣,新的內(nèi)核映象bzImage-new成為缺省的引導(dǎo)內(nèi)核。為了使用新的lilo.conf配置文件,還應(yīng)執(zhí)行下面的命令:\x0d\x0a #cp /usr/src/linux/arch/i386/boot/zImage /boot/bzImage-new\x0d\x0a\x0d\x0a 其次配置lilo:\x0d\x0a\x0d\x0a # /in/lilo\x0d\x0a\x0d\x0a 現(xiàn)在,當(dāng)重新引導(dǎo)系統(tǒng)時,在boot:提示符后面有三種選擇:linux-new 、linux、dos,新內(nèi)核成為缺省的引導(dǎo)內(nèi)核。\x0d\x0a 至此,新的Linux內(nèi)核已經(jīng)建立,新添加的系統(tǒng)調(diào)用已成為操作系統(tǒng)的一部分,重新啟動Linux,用戶就可以在應(yīng)用程序中使用該系統(tǒng)調(diào)用了。\x0d\x0a\x0d\x0a ?。?)使用新的系統(tǒng)調(diào)用\x0d\x0a\x0d\x0a 在應(yīng)用程序中使用新添加的系統(tǒng)調(diào)用mycall。同樣為實(shí)驗(yàn)?zāi)康?,我們寫了一個簡單的例子xtdy.c。\x0d\x0a\x0d\x0a /* xtdy.c */ \x0d\x0a #include \x0d\x0a _syscall1(int,mycall,int,ret) \x0d\x0a main() \x0d\x0a { \x0d\x0a printf(“%d \n”,mycall(100)); \x0d\x0a }\x0d\x0a 編譯該程序:\x0d\x0a # cc -o xtdy xtdy.c\x0d\x0a 執(zhí)行:\x0d\x0a # xtdy\x0d\x0a 結(jié)果:\x0d\x0a # 100\x0d\x0a 注意,由于使用了系統(tǒng)調(diào)用,編譯和執(zhí)行程序時,用戶都應(yīng)該是超級用戶身份。
Linux內(nèi)核有多大,不同Linux版本內(nèi)核有什么差別呢
1、根據(jù)版本的不同,內(nèi)核大小也不同;我看了下最近發(fā)布的4.1.6版本下載80M左右,估計(jì)解壓之后100多兆吧。
2、不同linux版本實(shí)際是根據(jù)內(nèi)核封裝了不同的操作系統(tǒng),內(nèi)核版本相同的情況下,不同linux版本內(nèi)核實(shí)際是一樣的,不同的是封裝的操作系統(tǒng)。
3、
給你個網(wǎng)站,是linux內(nèi)核的官網(wǎng),上面各個版本的內(nèi)核都有;
4、附一下介紹吧:
Linux內(nèi)核(英語:Linux kernel),是一種計(jì)算機(jī)操作系統(tǒng)內(nèi)核,以C語言和匯編語言寫成,符合POSIX標(biāo)準(zhǔn),以GNU通用公共許可昌雀證發(fā)布。Linux內(nèi)核最早是由芬蘭黑客林納斯·托瓦茲為嘗試在自己的英特爾x86架構(gòu)計(jì)咐敏算機(jī)上提供自由免費(fèi)的類Unix系統(tǒng)而開發(fā)的。該計(jì)劃開始于1991年,林納斯·托瓦茲當(dāng)時在Usenet新聞組comp.os.minix登載帖子,這份著名的帖子標(biāo)示著Linux內(nèi)核計(jì)劃的正式開始。
在計(jì)劃的早期有一些Minix的黑客提供了協(xié)助,而今天全球有無數(shù)程序員正在為該計(jì)劃無償提供幫助。
從技術(shù)上說Linux只是一個內(nèi)核?!皟?nèi)核”指的是一個提供硬件抽象層、磁盤及文件系統(tǒng)控制、多任務(wù)等功能的系統(tǒng)軟件。一個內(nèi)核并不是一套完整的操作系統(tǒng)。有一套基于Linux內(nèi)核的完整操作系統(tǒng)叫作Linux操作系統(tǒng),或是GNU/Linux(在該系統(tǒng)中包含了很多GNU計(jì)劃的系統(tǒng)組件)。
Linux內(nèi)核是在GNU通用公共許可證第2版之下發(fā)布衡迅枝的(加上一些非自由固件、blob與各種非自由許可證)。貢獻(xiàn)者遍布世界各地,日常開發(fā)在Linux內(nèi)核郵件列表。
根據(jù)版本的不同,內(nèi)核大小也不同,新版本為幾百M(fèi)。
1、發(fā)行版的不同,主要是對于版本的選擇,穩(wěn)定性的測試,還有錯誤修正補(bǔ)丁都會讓每個發(fā)行版有自己特殊的內(nèi)核。
2、官方內(nèi)核的不同,這個區(qū)別很好說,官方的開發(fā)是基于 git 版本控制的,去看兩個 git 版本就知道了。一般是硬件支持,還有新的功能算法,還有驅(qū)動增減,錯誤修補(bǔ)什么的。
Linux的內(nèi)核版本編號有點(diǎn)像如下的樣子:
2.6.32-642.el6.x86_64
主版本.次版本。發(fā)布版本-修改版本。
雖然編號就是如上的方式來編寫,不過依據(jù)
Linux內(nèi)核
的發(fā)展歷程,內(nèi)核版本的定義有點(diǎn)不太相同。
奇數(shù)、偶數(shù)版本分類:
在2.6x版本以前,托瓦斯將內(nèi)核的發(fā)展方向分為兩類,并根據(jù)這兩類內(nèi)核的發(fā)展分別給予不同的內(nèi)核編號,那就是:
主、次版本為奇數(shù):開發(fā)中版本。
如2.5.xx,這種內(nèi)核版本主要用于測試與發(fā)展新功能,所以通常這種版本僅有內(nèi)核開發(fā)工程師會使用。如果有新增的內(nèi)核程序代碼粗薯,會加到這種版本當(dāng)中,等到很多工程師測試沒問題后,才加入下一版本的穩(wěn)定內(nèi)核中;
主、次版本為偶數(shù):穩(wěn)定版本。
如2.6.xx,等到內(nèi)核功能發(fā)展成熟后會加到這類版本中,主要用在一般家庭計(jì)算機(jī)以及企業(yè)版本中,重點(diǎn)在于提供一個用戶相對穩(wěn)定的Linux操作環(huán)境平臺。
至于發(fā)布版本則是在主、次版本架構(gòu)不變的情況下,新增的功能累積到一定程度后新發(fā)布的內(nèi)核版本。而由于Linux 的內(nèi)核是使用CPL的授權(quán),因此大家都能夠進(jìn)行內(nèi)核程序代碼的修改。
因此,如果有針對一個版本的內(nèi)核修改過的部分程序代碼,那么這個被修改過的新內(nèi)核版本就可以加上所謂的修改版本。
Linux內(nèi)核版本與Linux發(fā)行版本。
Linux內(nèi)核版本與發(fā)行版本的版本并不相同,因?yàn)樗^的Linux版本指的應(yīng)該是內(nèi)核版本,而目前最新的內(nèi)核版本應(yīng)該是4.7.2(2023/08)才對,并不會有7.x的版本出現(xiàn)。
擴(kuò)展資料:
Linux內(nèi)核的任務(wù):
1、從技術(shù)層面講,內(nèi)核是硬件與軟件之間的一個中間層。作用是將應(yīng)用層序的請求傳遞給硬件,并充當(dāng)?shù)讓?/p>
驅(qū)動程序
,對系統(tǒng)中的各種設(shè)備和組件進(jìn)行尋址。
2、從
應(yīng)用程序
的層面講,應(yīng)用程序與硬件沒有聯(lián)系,只與內(nèi)核有聯(lián)系,內(nèi)核是應(yīng)用程序知道的層次中的更底層。在實(shí)際工作中內(nèi)核抽象了相關(guān)細(xì)節(jié)。
3、內(nèi)核是一個資源管理程序。負(fù)責(zé)將可用的共享資源(CPU時間、磁盤空間、網(wǎng)巖戚者絡(luò)連接等)分配得到各個系統(tǒng)進(jìn)程。仔叢
4、內(nèi)核就像一個庫,提供了一組面向系統(tǒng)的命令。系統(tǒng)調(diào)用對于應(yīng)用程序來說,就像調(diào)用普通函數(shù)一樣。
參考資料來源:
百度百科-Linux內(nèi)核
源代碼壓縮后幾十M,解壓縮幾百M(fèi)吧?
源代碼我記得之前有人統(tǒng)計(jì),有幾千萬行。
編譯出來,要看你開啟的模塊有多少,以及什么架構(gòu),是不是加入一些除錯信息。
不同的衫陪鄭版本區(qū)別。兩個方向說?;蝽?/p>
1、發(fā)行版的不同,主要是對于版本的選擇,穩(wěn)定性的測試,還有錯誤修正補(bǔ)丁都會讓每個發(fā)行版有自己特殊的內(nèi)核。
2、官方內(nèi)核的不同,這個區(qū)別很好說,官方的開發(fā)是基于 git 版本控制的,你去看兩個 git 版本亂迅就知道了。一般是硬件支持,還有新的功能算法,還有驅(qū)動增減,錯誤修補(bǔ)什么的。
內(nèi)核一般就幾M, 內(nèi)核一般可以認(rèn)為都是相同的.
關(guān)于linux kernel assert的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
文章題目:Linux內(nèi)核斷言機(jī)制簡介(linuxkernelassert)
分享鏈接:http://www.fisionsoft.com.cn/article/djisigh.html


咨詢
建站咨詢
