自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Devyn的Linux內(nèi)核專題:源代碼

系統(tǒng) Linux
在下載并解壓內(nèi)核源代碼后,用戶可以看到許多文件夾和文件。嘗試去找一個(gè)特定的文件或許是一個(gè)挑戰(zhàn)。

在下載并解壓內(nèi)核源代碼后,用戶可以看到許多文件夾和文件。嘗試去找一個(gè)特定的文件或許是一個(gè)挑戰(zhàn)。謝天謝地,源代碼以一個(gè)特定的方式組織的。這使開(kāi)發(fā)者能夠輕松找到任何文件或者內(nèi)核的一部分。

內(nèi)核源代碼的根目錄下包含了以下文件夾:

  1. arch 
  2. block 
  3. crypto 
  4. Documentation 
  5. drivers 
  6. firmware 
  7. fs 
  8. include 
  9. init 
  10. ipc 
  11. kernel 
  12. lib 
  13. mm 
  14. net 
  15. samples 
  16. scripts 
  17. security 
  18. sound 
  19. tools 
  20. usr 
  21. virt 

還有一些文件在源代碼的根目錄下。它們會(huì)在下面列出。

COPYING -許可和授權(quán)信息。Linux內(nèi)核在GPLv2許可證下授權(quán)。該許可證授予任何人有權(quán)免費(fèi)去使用、修改、分發(fā)和共享源代碼和編譯代碼。然而,沒(méi)有人可以出售源代碼。

CREDITS - 貢獻(xiàn)者列表

Kbuild - 這是一個(gè)設(shè)置一些內(nèi)核設(shè)定的腳本。打個(gè)比方,這個(gè)腳本設(shè)定一個(gè)ARCH變量,這是開(kāi)發(fā)者想要生成的內(nèi)核支持的處理器類型。

Kconfig - 這個(gè)腳本會(huì)在開(kāi)發(fā)人員配置內(nèi)核的時(shí)候用到,這會(huì)在以后的文章中討論。

MAINTAINERS - 這是一個(gè)目前維護(hù)者列表,他們的電子郵件地址,主頁(yè),和他們負(fù)責(zé)開(kāi)發(fā)和維護(hù)的內(nèi)核的特定部分或文件。當(dāng)一個(gè)開(kāi)發(fā)者在內(nèi)核中發(fā)現(xiàn)一個(gè)問(wèn)題,并希望能夠報(bào)告給能夠處理這個(gè)問(wèn)題的維護(hù)者時(shí),這是是很有用的。

Makefile - This script is the main file that is used to compile the kernel. This file passes parameters to the compiler as well as the list of files to compile and any other necessary information. 這個(gè)腳本是編譯內(nèi)核的主要文件。這個(gè)文件將編譯參數(shù)和編譯所需的文件和必要的信息傳給編譯器。

README - 這個(gè)文檔提供給開(kāi)發(fā)者想要知道的如何編譯內(nèi)核的信息。

REPORTING-BUGS - 這個(gè)文檔提供如何報(bào)告問(wèn)題的信息。

內(nèi)核的代碼是以“.c”或“.h”為擴(kuò)展名的文件。 “.c”的擴(kuò)展名表明內(nèi)核是用眾多的編程語(yǔ)言之一的C語(yǔ)言寫的, “h”的文件是頭文件,而他們也是用C寫成。頭文件包含了許多“.c”文件需要使用的代碼,因?yàn)樗麄兛梢砸胍延械拇a而不是重新編寫代碼,這節(jié)省了程序員的時(shí)間。否則,一組執(zhí)行相同的動(dòng)作的代碼,將存在許多或全部都是“c”文件。這也會(huì)消耗和浪費(fèi)硬盤空間。(譯注:頭文件不僅僅可節(jié)省重復(fù)編碼,而且代碼復(fù)用也會(huì)降低代碼錯(cuò)誤的幾率)

所有上面列出的文件夾中的文件都組織得很好。文件夾名稱至少可以幫助開(kāi)發(fā)人員很好地猜測(cè)文件夾中的內(nèi)容。下面提供了一個(gè)目錄樹(shù)和描述。

arch - 這個(gè)文件夾包含了一個(gè)Kconfig文件,它用于設(shè)置這個(gè)目錄里的源代碼編譯所需的一系列設(shè)定。每個(gè)支持的處理器架構(gòu)都在它相應(yīng)的文件夾中。如,Alpha處理器的源代碼在alpha文件夾中。請(qǐng)記住,隨著時(shí)間的推移,一些新的處理器將被支持,有些會(huì)被放棄。對(duì)于Linux v3.9.4,arch下有以下文件夾:

  1. alpha 
  2. arc 
  3. arm 
  4. arm64 
  5. avr32 
  6. blackfin 
  7. c6x 
  8. cris 
  9. frv 
  10. h8300 
  11. hexagon 
  12. ia64 
  13. m32r 
  14. m68k 
  15. metag 
  16. microblaze 
  17. mips 
  18. mn10300 
  19. openrisc 
  20. parisc 
  21. powerpc 
  22. s390 
  23. score 
  24. sh 
  25. sparc 
  26. tile 
  27. um 
  28. unicore32 
  29. x86 
  30. xtensa 

block – 此文件夾包含塊設(shè)備驅(qū)動(dòng)程序的代碼。塊設(shè)備是以數(shù)據(jù)塊方式接收和發(fā)送的數(shù)據(jù)的設(shè)備。數(shù)據(jù)塊都是一塊一塊的數(shù)據(jù)而不是持續(xù)的數(shù)據(jù)流。

crypto - 這個(gè)文件夾包含許多加密算法的源代碼。例如,“sha1_generic.c”這個(gè)文件包含了SHA1加密算法的代碼。

Documentation - 此文件夾包含了內(nèi)核信息和其他許多文件信息的文本文檔。如果開(kāi)發(fā)者需要一些信息,他們也許能在這里找到所需要的信息。

drivers - 該目錄包含了驅(qū)動(dòng)代碼。驅(qū)動(dòng)是一個(gè)控制硬件的軟件。例如,要讓計(jì)算機(jī)知道鍵盤并使其可用,鍵盤驅(qū)動(dòng)是必要的。這個(gè)文件夾中存在許多文件夾。每個(gè)文件夾都以硬件的種類或者型號(hào)命名。例如,'bluetooth'包含了藍(lán)牙驅(qū)動(dòng)程序的代碼。還有其他很明顯的驅(qū)動(dòng)像SCSI、USB和火線等。有些驅(qū)動(dòng)程序可能會(huì)比較難找到。例如,操縱桿驅(qū)動(dòng)不在'joystick'文件夾中,它們卻在./drivers/input/joystick。同樣鍵盤和鼠標(biāo)驅(qū)動(dòng)也在這個(gè)input文件夾中。 'Macintosh'包含了蘋果的硬件代碼。 'Xen'包含了Xen hypervisor代碼。(hypervisor是一種允許用戶在一臺(tái)計(jì)算機(jī)上運(yùn)行多個(gè)操作系統(tǒng)的軟件或硬件。這意味著在Xen允許用戶在一臺(tái)計(jì)算機(jī)上同時(shí)運(yùn)行的兩個(gè)或兩個(gè)以上的Linux系統(tǒng)。用戶還可以運(yùn)行Windows,Solaris,F(xiàn)reeBSD或其他操作系統(tǒng)在Linux系統(tǒng)上。)driver文件夾下還有許多其他的文件夾,但他們?cè)谶@篇文章中無(wú)法一一列舉,他們將在以后的文章中提到。

firmware - fireware中包含了讓計(jì)算機(jī)讀取和理解從設(shè)備發(fā)來(lái)的信號(hào)的代碼。舉例來(lái)說(shuō),一個(gè)攝像頭管理它自己的硬件,但計(jì)算機(jī)必須了解攝像頭給計(jì)算機(jī)發(fā)送的信號(hào)。Linux系統(tǒng)會(huì)使用vicam固件(firmware)來(lái)理解攝像頭的通訊。否則,沒(méi)有了固件,Linux系統(tǒng)將不知道如何處理攝像頭發(fā)來(lái)的信息。另外,固件同樣有助于將Linux系統(tǒng)發(fā)送消息給該設(shè)備。這樣Linux系統(tǒng)可以告訴攝像頭重新調(diào)整或關(guān)閉攝像頭。

fs - 這是文件系統(tǒng)的文件夾。理解和使用的文件系統(tǒng)所需要的所有的代碼就在這里。在這個(gè)文件夾里,每種文件系統(tǒng)都有自己的文件夾。例如,ext4文件系統(tǒng)的代碼在ext4文件夾內(nèi)。 在fs文件夾內(nèi),開(kāi)發(fā)者會(huì)看到一些不在文件夾中的文件。這些文件用來(lái)控制整個(gè)文件系統(tǒng)。例如,mount.h中會(huì)包含掛載文件系統(tǒng)的代碼。文件系統(tǒng)是以結(jié)構(gòu)化的方式來(lái)存儲(chǔ)和管理的存儲(chǔ)設(shè)備上的文件和目錄。每個(gè)文件系統(tǒng)都有自己的優(yōu)點(diǎn)和缺點(diǎn)。這是由文件系統(tǒng)的設(shè)計(jì)決定的。舉例來(lái)說(shuō),NTFS文件系統(tǒng)支持的透明壓縮(當(dāng)啟用時(shí),會(huì)在用戶不知道的情況下自動(dòng)壓縮存儲(chǔ)文件)。大多數(shù)文件系統(tǒng)缺乏此功能,但如果在fs文件夾里編入相應(yīng)的文件,它們也有這種能力。

include - include包含了內(nèi)核所需的各種頭文件.這個(gè)名字來(lái)自于C語(yǔ)言用"include"來(lái)在編譯時(shí)導(dǎo)入頭文件。

init - init文件夾包含了內(nèi)核啟動(dòng)的處理代碼(INITiation)。main.c是內(nèi)核的核心文件,這是用來(lái)銜接所有的其他文件的源代碼主文件。

ipc - IPC代表進(jìn)程間通訊。此文件夾中的代碼是作為內(nèi)核與進(jìn)程之間的通信層。內(nèi)核控制著硬件,因此程序只能請(qǐng)求內(nèi)核來(lái)執(zhí)行任務(wù)。假設(shè)用戶有一個(gè)打開(kāi)DVD托盤的程序。程序不直接打開(kāi)托盤,相反,該程序通知內(nèi)核托盤應(yīng)該被打開(kāi)。然后,內(nèi)核給硬件發(fā)送一個(gè)信號(hào)去打開(kāi)托盤。這些代碼同樣管理kill信號(hào)。舉例來(lái)說(shuō),當(dāng)系統(tǒng)管理員打開(kāi)進(jìn)程管理器去關(guān)閉一個(gè)已經(jīng)鎖死的程序,這個(gè)關(guān)閉程序的信號(hào)被稱為kill信號(hào)。內(nèi)核接收到信號(hào),然后內(nèi)核會(huì)要求程序停止或直接把進(jìn)程從內(nèi)存和CPU中移除(取決于kill的類型)。命令行中的管道同樣用于進(jìn)程間通信。管道會(huì)告訴內(nèi)核在某個(gè)內(nèi)存頁(yè)上寫入輸出數(shù)據(jù)。程序或者命令得到的數(shù)據(jù)是來(lái)自內(nèi)存頁(yè)上的某個(gè)給定的指針。

kernel - 這個(gè)文件夾中的代碼控制內(nèi)核本身。例如,如果一個(gè)調(diào)試器需要跟蹤問(wèn)題,內(nèi)核將使用這個(gè)文件夾中代碼來(lái)將內(nèi)核指令通知調(diào)試器跟蹤內(nèi)核進(jìn)行的所有動(dòng)作。這里也有跟蹤時(shí)間的代碼。在內(nèi)核文件夾下有個(gè)"power"文件夾,這里的代碼可以使計(jì)算機(jī)重新啟動(dòng)、關(guān)機(jī)和掛起。

lib - 這個(gè)文件夾包含了內(nèi)核需要引用的一系列內(nèi)核庫(kù)文件代碼。

mm - mm文件夾中包含了內(nèi)存管理代碼。內(nèi)存并不是任意存儲(chǔ)在RAM芯片上的。相反,內(nèi)核小心地將數(shù)據(jù)放在RAM芯片上。內(nèi)核不會(huì)覆蓋任何正在使用或保存重要數(shù)據(jù)的內(nèi)存區(qū)域。

net - net文件夾中包含了網(wǎng)絡(luò)協(xié)議代碼。這包括IPv6、AppleTalk、以太網(wǎng)、WiFi、藍(lán)牙等的代碼,此外處理網(wǎng)橋和DNS解析的代碼也在net目錄。

samples - 此文件夾包含了程序示例和正在編寫中的模塊代碼。假設(shè)一個(gè)新的模塊引入了一個(gè)想要的有用功能,但沒(méi)有程序員說(shuō)它已經(jīng)可以正常運(yùn)行在內(nèi)核上。那么,這些模塊就會(huì)移到這里。這給了新內(nèi)核程序員一個(gè)機(jī)會(huì)通過(guò)這個(gè)文件夾來(lái)獲得幫助,或者選擇一個(gè)他們想要協(xié)助開(kāi)發(fā)的模塊。

scripts - 這個(gè)文件夾有內(nèi)核編譯所需的腳本。最好不要改變這個(gè)文件夾內(nèi)的任何東西。否則,您可能無(wú)法配置或編譯內(nèi)核。

security - 這個(gè)文件夾是有關(guān)內(nèi)核安全的代碼。它對(duì)計(jì)算機(jī)免于受到病毒和黑客的侵害很重要。否則,Linux系統(tǒng)可能會(huì)遭到損壞。關(guān)于內(nèi)核的安全性,將在以后的文章中討論。

sound - 這個(gè)文件夾中包含了聲卡驅(qū)動(dòng)。

tools - 這個(gè)文件夾中包含了和內(nèi)核交互的工具。

usr - 還記得在以前的文章中提到vmlinuz和其他類似的文件么?這個(gè)文件夾中的代碼在內(nèi)核編譯完成后創(chuàng)建這些文件。

virt - 此文件夾包含了虛擬化代碼,它允許用戶一次運(yùn)行多個(gè)操作系統(tǒng)。這與先前提到的Xen是不同的。通過(guò)虛擬化,客戶機(jī)操作系統(tǒng)就像任何其他運(yùn)行在Linux主機(jī)的應(yīng)用程序一樣運(yùn)行。通過(guò)Xen這樣的hypervisor(注:虛擬機(jī)管理程序),兩個(gè)操作系統(tǒng)可以同時(shí)管理硬件。在虛擬化中,在客戶機(jī)操作系統(tǒng)上運(yùn)行在Linux內(nèi)核上,而在hypervisor中,它沒(méi)有客戶系統(tǒng)并且所有的系統(tǒng)不互相依賴。

提示:絕不在內(nèi)核源代碼內(nèi)移動(dòng)文件,除非你知道你在做什么。否則,編譯會(huì)由于缺失文件失敗。

Linux內(nèi)核的文件夾結(jié)構(gòu)保持相對(duì)穩(wěn)定。內(nèi)核開(kāi)發(fā)者會(huì)做一些修改,但總體來(lái)說(shuō),這些設(shè)置對(duì)整個(gè)內(nèi)核版本都是一樣。驅(qū)動(dòng)程序文件夾的布局也基本保持一樣。

via: http://www.linux.org/threads/the-linux-kernel-the-source-code.4204/

責(zé)任編輯:奔跑的冰淇淋 來(lái)源: Linux中國(guó)
相關(guān)推薦

2013-10-31 14:09:14

Linux內(nèi)核

2013-11-05 09:55:37

2013-11-07 13:59:56

Linux內(nèi)核

2013-11-25 14:07:11

Linux內(nèi)核內(nèi)核特性

2013-11-05 09:58:39

Linux內(nèi)核

2013-11-06 13:03:10

Linux內(nèi)核

2013-11-12 11:01:46

Linux內(nèi)核

2013-10-31 16:29:10

Linux內(nèi)核

2013-12-18 14:44:10

2013-11-25 17:39:17

Linux內(nèi)核PCIACPI

2013-12-18 11:14:57

Linux內(nèi)核Linux Kerne

2013-12-20 13:08:12

Linux內(nèi)核服務(wù)器

2010-03-29 16:48:18

Nginx內(nèi)核優(yōu)化

2019-07-01 06:30:07

微軟開(kāi)發(fā)Linux

2011-03-30 09:59:31

ThunderboltHTC

2010-06-10 10:20:29

openSUSE使用教

2010-06-10 10:32:35

openSUSE使用教

2010-03-02 10:44:52

Linux rpm

2015-08-28 09:38:51

Linux源代碼分析工具

2010-01-07 13:44:54

Linux內(nèi)核代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)