導航:首頁 > 源碼編譯 > 內核編譯是個啥

內核編譯是個啥

發布時間:2023-11-15 22:22:37

1. linux內核編譯

內核,是一個操作系統的核心。它負責管理系統的進程、內存、設備驅動程序、文件和網路系統,決定著系統的性能和穩定性。Linux作為一個自由軟體,
在廣大愛好者的支持下,內核版本不斷更新。新的內核修訂了舊內核的bug,並增加了許多新的特性。如果用戶想要使用這些新特性,或想根據自己的系統度身定
制一個更高效,更穩定的內核,就需要重新編譯內核。本文將以RedHat Linux 6.0(kernel
2.2.5)為操作系統平台,介紹在Linux上進行內核編譯的方法。

一、 下載新內核的源代碼

目前,在Internet上提供Linux源代碼的站點有很多,讀者可以選擇一個速度較快的站點下載。筆者是從站點www.kernelnotes.org上下載了Linux的最新開發版內核2.3.14的源代碼,全部代碼被壓縮到一個名叫Linux-2.3.14.tar.gz的文件中。

二、 釋放內核源代碼

由於源代碼放在一個壓縮文件中,因此在配置內核之前,要先將源代碼釋放到指定的目錄下。首先以root帳號登錄,然後進入/usr/src子目錄。如果用戶在安裝Linux時,安裝了內核的源代碼,則會發現一個linux-2.2.5的子目錄。該目錄下存放著內核2.2.5的源代碼。此外,還會發現一個指向該目錄的鏈接linux。刪除該連接,然後將新內核的源文件拷貝到/usr/src目錄中。

(一)、用tar命令釋放內核源代碼

# cd /usr/src

# tar zxvf Linux-2.3.14.tar.gz

文件釋放成功後,在/usr/src目錄下會生成一個linux子目錄。其中包含了內核2.3.14的全部源代碼。

(二)、將/usr/include/asm、/usr/inlude/linux、/usr/include/scsi鏈接到/usr/src/linux/include目錄下的對應目錄中。

# cd /usr/include

# rm -Rf asm linux

# ln -s /usr/src/linux/include/asm-i386 asm

# ln -s /usr/src/linux/include/linux linux

# ln -s /usr/src/linux/include/scsi scsi

(三)、刪除源代碼目錄中殘留的.o文件和其它從屬文件。

# cd /usr/src/linux

# make mrproper

三、 配置內核

(一)、啟動內核配置程序。

# cd /usr/src/linux

# make config

除了上面的命令,用戶還可以使用make menuconfig命令啟動一個菜單模式的配置界面。如果用戶安裝了X window系統,還可以執行make xconfig命令啟動X window下的內核配置程序。

(二)、配置內核

Linux的
內核配置程序提供了一系列配置選項。對於每一個配置選項,用戶可以回答"y"、"m"或"n"。其中"y"表示將相應特性的支持或設備驅動程序編譯進內
核;"m"表示將相應特性的支持或設備驅動程序編譯成可載入模塊,在需要時,可由系統或用戶自行加入到內核中去;"n"表示內核不提供相應特性或驅動程序
的支持。由於內核的配置選項非常多,本文只介紹一些比較重要的選項。

1、Code maturity level options(代碼成熟度選項)

Prompt for development and/or incomplete code/drivers
(CONFIG_EXPERIMENTAL) [N/y/?]
如果用戶想要使用還處於測試階段的代碼或驅動,可以選擇「y」。如果想編譯出一個穩定的內核,則要選擇「n」。

1、 Processor type and features(處理器類型和特色)

(1)、Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC, PPro/6x86MX) [PPro/6x86MX] 選擇處理器類型,預設為Ppro/6x86MX。

(2)、Maximum Physical Memory (1GB, 2GB) [1GB] 內核支持的最大內存數,預設為1G。

(3)、Math emulation (CONFIG_MATH_EMULATION) [N/y/?] 協處理器模擬,預設為不模擬。

(4)、MTRR (Memory Type Range Register) support (CONFIG_MTRR) [N/y/?]

選擇該選項,系統將生成/proc/mtrr文件對MTRR進行管理,供X server使用。

(5)、Symmetric multi-processing support (CONFIG_SMP) [Y/n/?] 選擇「y」,內核將支持對稱多處理器。

2、 Loadable mole support(可載入模塊支持)

(1)、Enable loadable mole support (CONFIG_MODULES) [Y/n/?] 選擇「y」,內核將支持載入模塊。

(2)、Kernel mole loader (CONFIG_KMOD) [N/y/?] 選擇「y」,內核將自動載入那些可載入模塊,否則需要用戶手工載入。

3、 General setup(一般設置)

(1)、Networking support (CONFIG_NET) [Y/n/?] 該選項設置是否在內核中提供網路支持。

(2)、PCI support (CONFIG_PCI) [Y/n/?] 該選項設置是否在內核中提供PCI支持。

(3)、PCI access mode (BIOS, Direct, Any) [Any] 該選項設置Linux探測PCI設備的方式。選擇「BIOS」,Linux將使用BIOS;選擇「Direct」,Linux將不通過BIOS;選擇「Any」,Linux將直接探測PCI設備,如果失敗,再使用BIOS。

(4)Parallel port support (CONFIG_PARPORT) [N/y/m/?] 選擇「y」,內核將支持平行口。

4、 Plug and Play configuration(即插即用設備支持)

(1)、Plug and Play support (CONFIG_PNP) [Y/m/n/?] 選擇「y」,內核將自動配置即插即用設備。

(2)、ISA Plug and Play support (CONFIG_ISAPNP) [Y/m/n/?] 選擇「y」,內核將自動配置基於ISA匯流排的即插即用設備。

5、 Block devices(塊設備)

(1)、Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/m/n/?] 選擇「y」,內核將提供對軟盤的支持。

(2)、Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y/m/n/?] 選擇「y」,內核將提供對增強IDE硬碟、CDROM和磁帶機的支持。

6、 Networking options(網路選項)

(1)、Packet socket (CONFIG_PACKET) [Y/m/n/?] 選擇「y」,一些應用程序將使用Packet協議直接同網路設備通訊,而不通過內核中的其它中介協議。

(2)、Network firewalls (CONFIG_FIREWALL) [N/y/?] 選擇「y」,內核將支持防火牆。

(3)、TCP/IP networking (CONFIG_INET) [Y/n/?] 選擇「y」,內核將支持TCP/IP協議。

(4)The IPX protocol (CONFIG_IPX) [N/y/m/?] 選擇「y」,內核將支持IPX協議。

(5)、Appletalk DDP (CONFIG_ATALK) [N/y/m/?] 選擇「y」,內核將支持Appletalk DDP協議。

8、SCSI support(SCSI支持)

如果用戶要使用SCSI設備,可配置相應選項。

9、Network device support(網路設備支持)

Network device support (CONFIG_NETDEVICES) [Y/n/?] 選擇「y」,內核將提供對網路驅動程序的支持。

10、Ethernet (10 or 100Mbit)(10M或100M乙太網)

在該項設置中,系統提供了許多網卡驅動程序,用戶只要選擇自己的網卡驅動就可以了。此外,用戶還可以根據需要,在內核中加入對FDDI、PPP、SLIP和無線LAN(Wireless LAN)的支持。

11、Character devices(字元設備)

(1)、Virtual terminal (CONFIG_VT) [Y/n/?] 選擇「y」,內核將支持虛擬終端。

(2)、Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]

選擇「y」,內核可將一個虛擬終端用作系統控制台。

(3)、Standard/generic (mb) serial support (CONFIG_SERIAL) [Y/m/n/?]

選擇「y」,內核將支持串列口。

(4)、Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]

選擇「y」,內核可將一個串列口用作系統控制台。

12、Mice(滑鼠)

PS/2 mouse (aka "auxiliary device") support (CONFIG_PSMOUSE) [Y/n/?] 如果用戶使用的是PS/2滑鼠,則該選項應該選擇「y」。

13、Filesystems(文件系統)

(1)、Quota support (CONFIG_QUOTA) [N/y/?] 選擇「y」,內核將支持磁碟限額。

(2)、Kernel automounter support (CONFIG_AUTOFS_FS) [Y/m/n/?] 選擇「y」,內核將提供對automounter的支持,使系統在啟動時自動 mount遠程文件系統。

(3)、DOS FAT fs support (CONFIG_FAT_FS) [N/y/m/?] 選擇「y」,內核將支持DOS FAT文件系統。

(4)、ISO 9660 CDROM filesystem support (CONFIG_ISO9660_FS) [Y/m/n/?]

選擇「y」,內核將支持ISO 9660 CDROM文件系統。

(5)、NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/m/?]

選擇「y」,用戶就可以以只讀方式訪問NTFS文件系統。

(6)、/proc filesystem support (CONFIG_PROC_FS) [Y/n/?] /proc是存放Linux系統運行狀態的虛擬文件系統,該項必須選擇「y」。

(7)、Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?] EXT2是Linux的標准文件系統,該項也必須選擇「y」。

14、Network File Systems(網路文件系統)

(1)、NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?] 選擇「y」,內核將支持NFS文件系統。

(2)、SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS)

選擇「y」,內核將支持SMB文件系統。

(3)、NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS)

選擇「y」,內核將支持NCP文件系統。

15、Partition Types(分區類型)

該選項支持一些不太常用的分區類型,用戶如果需要,在相應的選項上選擇「y」即可。

16、Console drivers(控制台驅動)

VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?] 選擇「y」,用戶就可以在標準的VGA顯示方式下使用Linux了。

17、Sound(聲音)

Sound card support (CONFIG_SOUND) [N/y/m/?] 選擇「y」,內核就可提供對音效卡的支持。

18、Kernel hacking(內核監視)

Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?] 選擇「y」,用戶就可以對系統進行部分控制。一般情況下選擇「n」。

四、 編譯內核

(一)、建立編譯時所需的從屬文件

# cd /usr/src/linux

# make dep

(二)、清除內核編譯的目標文件

# make clean

(三)、編譯內核

# make zImage

內核編譯成功後,會在/usr/src/linux/arch/i386/boot目錄中生成一個新內核的映像文件zImage。如果編譯的內核很大的話,系統會提示你使用make bzImage命令來編譯。這時,編譯程序就會生成一個名叫bzImage的內核映像文件。

(四)、編譯可載入模塊

如果用戶在配置內核時設置了可載入模塊,則需要對這些模塊進行編譯,以便將來使用insmod命令進行載入。

# make moles

# make modelus_install

編譯成功後,系統會在/lib/moles目錄下生成一個2.3.14子目錄,裡面存放著新內核的所有可載入模塊。

五、 啟動新內核

(一)、將新內核和System.map文件拷貝到/boot目錄下

# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.3.14

# cp /usr/src/linux/System.map /boot/System.map-2.3.14

# cd /boot

# rm -f System.map

# ln -s System.map-2.3.14 System.map

(二)、配置/etc/lilo.conf文件。在該文件中加入下面幾行:

default=linux-2.3.14

image=/boot/vmlinuz-2.3.14

label=linux-2.3.14

root=/dev/hda1

read-only

(三)、使新配置生效

# /sbin/lilo

(四)、重新啟動系統

# /sbin/reboot

新內核如果不能正常啟動,用戶可以在LILO:提示符下啟動舊內核。然後查出故障原因,重新編譯新內核即可。

了解更多開源相關,去LUPA社區看看吧。
希望對你能有所幫助。

2. 嵌入式Linux內核編譯求解!!!!!

本人也是試驗中的菜鳥一枚,有些經驗還有理解大家分享。
你說的這些步驟,是開發板移植或者產品移植過程中的一環,移植,就是把PC上編寫好的,已經可以完成功能的程序編程開發板晶元,你用的是arm的晶元,那就是用arm的指令系統可以辨認執行的文件。
zimage是內核映像的image文件的壓縮版,主要減少映像大小。如果是用pc機的編譯系統編譯出來,就是能在PC機上運行的linux內核,OS,放在開發板上,也是一樣的功用。
至於開發板內核會不會變,應該說你每一次燒入一個內核的時候,效果都相當於對PC機進行了一次系統重裝,系統肯定是會變的,變成了你燒錄進去的編譯好的linux2.6.28.這一點可以肯定。但是是不是變得和以前不一樣就不一定了,也許內核的文件從頭到尾都是一個,更有可能的是你手上就沒有出廠時燒入的內核程序,人家沒給你,那麼你除非不燒,掠過內核的部分永遠不變,只改變文件系統,那麼內核肯定是會變的。另外對內核改變不需要太猶豫,沒有那塊開發板上的文件從頭到尾沒變過的,內核文件也一樣,會有這種情況的只有出廠產品。開發板就是大膽折騰,才能把開發板玩好。
系統內核用zimage這樣的形式,是深層的原因是因為節省固化flash空間,還是有利於cpu內部結構運行,沒有研究過。
zimage不是直接下到板子里就能運行的,配置的問題先不說,啟動不是直接從zimage啟動的,因為這個是壓縮文件,至少要解壓之後才能使用。
但是實際上用的也不是zimage映像文件。而是uimage文件。zimage和uimage差不多。
uimage文件是用於被uboot引導的文件,是一個64K的文件頭和一個zimage文件組成的。
從編譯角度來說,現在手上的內核的創建映像的makefile文件中的目標似乎是一口氣把這幾個映像文件都生成了。單獨使用make uimage也能生成uimage映像文件。但既然uimage是從zimage轉化而來,那麼應該是必須先要編譯出了zimage才能有uimage文件生成。
有了uimage文件後,就要有uboot文件,有的板子因為搬運和運行的操作流程,還會有一級bootstrap,這是因為內部ram大小決定的。uboot是為了必要的硬體初始化和引導內核和文件系統而存在的,uboot將內核需要的軟體和硬體環境都配置好了之後,將內核復制解壓到內存中,並跳轉到內存里內核的入口,將操作權交給內核。內核正是啟動,配置無誤後掛載文件系統。
如果這些程序都完成,那麼開發板就可以運行起來了。
很不幸,我現在還沒有搞定。
但是如果你不需要移植,只是要運用一個配置好的開發板,那麼你想了解的可能是這個,下載到flash中文件的名稱和順序和地址。
名稱沒有確定的,但是大概是這樣的形式:bootloader.bin(其中包括uboot和其它形式boot,可能最初還會有bootstrap)+zimage+root.(jffs*/yaffs*/etx*)等。
燒入的地址也是要嚴格對應程序,或者手冊說明建議中的,如果出現相互覆蓋或者該有的文件不在應該的位置,那麼也是不會啟動成功的。
linux和嵌入式linux都不是很簡單的,任重道遠,共同進步吧。

3. kernel編譯時間是什麼意思

內核的編譯系統主要由kconfig,makefile和一系列腳本共同構成。其中kconfig主要用於配置內核的各項功能,它的結果決定了各個部分最終是被編譯成模塊,編譯進內核還是不編譯。在內核頂層makefile的help可以看到有一個專門用於配置內核的命令序列,後續我們會詳細介紹該部分內容。
    頂層makefile是整個內核編譯系統的入口,所有make相關的命令都由它發起,並調用定義在其中或定義在其它文件中的相應命令序列完成。它還定義了很多全局的參數,環境變數,目標和依賴等。
    除了頂層makefile之外,還有幾個定義在scripts目錄中的重要文件,它們包括kbuild.include,makefile.lib和makefile.build。其中kbuild.include中主要定義了一些通用的變數和命令,如filechk,try-run,build,arg-check,if_changed等。makefile.lib中主要定義了編譯相關的flag和命令,如c_flags,a_flags,cmd_ld,cmd_obj,cmd_uimage等。makefile.build文件是大部分目標最終調用的makefile,它會實際完成對目錄的遞歸調用和對源文件的編譯工作。
    由於頂層makefile文件比較長,若從頭閱讀很容易陷入某些細節而打斷思路的連貫性。因此,我們通過對內核目標編譯的執行流程進行分析,看看linux到底是如何編譯出來的。讓我們先了解下內核makefile支持哪些功能,在linux根目錄下執行make help,會輸出以下內容(由於列印較長,這里採用分屏顯示):

                                          圖1.1

                                          圖片1.2

                                          圖片1.3
它支持的目標大致包含以下幾部分:
(1)清理相關的目標
(2)配置相關的目標
(3)通用目標
(4)靜態分析目標
(5)kernel自測目標
(6)kernel打包相關的目標
(7)文本相關的目標
(8)架構相關的目標
(9)一些通用的選項
    顯然,我們最關心的是linux內核的生成過程,故我們採用以下順序來組織本文,在涉及到架構相關的內容時,本文都以arm的aarch64為例。
2.配置相關目標
  make menuconfig的執行過程分析
3.通用目標
  (1)make vmlinux的執行過程分析
  (2)make moles的執行過程分析
  (3)其它通用目標的執行過程
4.清理目標的執行過程分析
5.通用命令行選項的用法介紹
  (1)V選項介紹
  (2)O選項介紹
  (3)C選項介紹
6.makefile.build文件的分析
京東爆款好物每滿300減40,千萬別錯過~
京東
廣告

Kernel 編譯、安裝內核詳細過程
5下載·0評論
2011年6月29日
kernel編譯過程
1976閱讀·0評論·0點贊
2019年6月9日
什麼是編譯
7995閱讀·0評論·1點贊
2020年8月13日
Linux Kernel編譯
2034閱讀·0評論·1點贊
2018年8月9日
android 內核編譯時間戳,Android 啟動性能優化 - kernel篇
223閱讀·0評論·1點贊
2021年6月3日
Android 系統編譯之內核編譯
3.1W閱讀·27評論·18點贊
2018年9月12日
還在等什麼?京東爆款商品每滿300減40,立即搶購!

京東
廣告
kernel編譯步驟解析
2871閱讀·0評論·0點贊
2022年4月14日
Linux Kernel 編譯流程 (一)
1265閱讀·0評論·0點贊
2021年1月18日
[內核源碼編譯]編譯內核-kernel編譯問題集錦
343閱讀·1評論·1點贊
2022年8月27日
【ESWIN實習】一、熟悉kernel編譯流程
579閱讀·0評論·0點贊
2021年2月24日
編譯kernel
824閱讀·0評論·0點贊
2015年7月21日
Android每次編譯kernel時間都會改變(不讓它改變)
2154閱讀·0評論·1點贊
2017年10月13日
"Kernel version" 中編譯時間的前世今生
1598閱讀·0評論·3點贊
2016年4月15日
[kernel]linux內核基礎: 版本、源碼、編譯與調試
9419閱讀·0評論·1點贊
2022年3月28日
kernel編譯
476閱讀·1評論·1點贊
2019年10月20日
linux 模塊編譯過程,首次編譯Kernel模塊的經歷
656閱讀·0評論·0點贊
2021年5月11日
系統移植-(三)kernel內核源碼的配置和編譯過程
919閱讀·1評論·2點贊
2020年4月13日
樹莓派4B內核驅動開發(二)本地編譯內核
321閱讀·0評論·0點贊
2021年2月24日
編譯生成的kernel說明
1558閱讀·0評論·0點贊
2010年1月20日
Kernel 編譯配置機制
5883閱讀·1評論·1點贊
2014年5月7日
去首頁
看看更多熱門內容

4. 什麼是LINUX內核編程

真佩服樓上的2位對「內核編程」的理解力!
簡單說,Linux內核編程就是開發Linux驅動程序,學會內核編程後,將會對操作系統的內部機制和工作原理有充分了解,可以從事硬體驅動開發、嵌入式系統開發等。內核編程的語言仍是傳統的C語言,但其編寫方法和調用介面與傳統應用程序的差別較大,你必須了解如何處理中斷、如何在內核態和用戶態之間轉換、PCI、DMA、內核地址映射、內核I/O等,這不是《UNIX高級編程》所涉及的內容,可以找一本專門講Linux驅動編程的書看看,或在網上搜尋相關資料(關鍵詞:Linux DDK)。不過先提醒一句,學習內核編程的難度很大,必須做好長期心理准備

5. linux內核編譯

首先到www.kernel.org網站去下載一個2.6以上版本的內核。因為舊版本在編譯時的指令與2.6版本有些不同。用tar zxvf 或 jxvf 結壓。解壓後進入文件夾,輸入 make menuconfig 後可以看到一個圖形界面,用於對內核進行配置。具體的配置項請參考《linux 2.6 內核配置》,該文章可以從網路文庫中下載。配置完成後,記住一定要保存到.config系統文件中。最後輸入make,進行編譯。編譯完成後在boot文件夾下會自動生成zImage文件,這就是新內核的鏡像文件。編譯一般需要兩個小時。

6. linux為什麼要編譯內核

Linux內核版本是不斷更新的,通常,更新的內核會支持更多的硬體,具備更好的進程管理能力,運行速度更快、 更穩定,並且一般會修復老版本中發現的許多漏洞等。而已安裝好的Linux系統如果不是滾動升級的,或者沒有內核更新選擇的話,如果用戶想要使用這些新特性,或想根據自己的硬體平台定製一個更高效,更穩定,更快速的內核,就需要重新編譯內核。

下載源碼編譯內核,如果不做相關優化,直接編譯,結果就跟現在正在使用的系統沒什麼區別。

學習linux驅動,必須要有實踐的平台環境吧,至於需不需要購置平台,要看你的學習目的了。

7. 編譯內核和編譯內核模塊有什麼區別(linux)

LINUX 的內核編譯
1.編譯內核指的時通常的內核
2.應為內核可以將驅動和功能模塊動態的載入內核,所以在需要的時間把功能模塊
動態載入,所以就有了,內核模塊的編譯

8. Linux的內核編譯是什麼意思

所有的軟體現在基本都是用高級語言編寫的,Linux 內核也不例外。Linux 內核是用 C 語言寫的。
但高級語言編寫的程序有個問題就是,源代碼是不能直接運行的。要麼用解釋語言解釋運行(功能限制很大,應用環境限制也很大),要麼就是通過編譯器經解釋編譯鏈接後成為計算機可以直接運行的計算機語言,也就是一般成為的二進製程序。

Linux的內核編譯就是用編譯器把 Linux 的內核源代碼編譯成可以被計算機運行的二進制代碼的行為。

當然 Linux 內核並不完全都是 C 語言寫的,還有一部分匯編語言,但匯編語言也需要編譯的。

閱讀全文

與內核編譯是個啥相關的資料

熱點內容
微信大轉盤抽獎源碼 瀏覽:495
壓縮機損壞的表現 瀏覽:862
同步數據伺服器怎麼用 瀏覽:632
163郵箱伺服器的ip地址 瀏覽:48
伺服器跟域是什麼 瀏覽:126
rails啟動命令 瀏覽:463
logistic命令怎麼用 瀏覽:736
c語言點滴pdf 瀏覽:745
linuxrtc編程 瀏覽:256
linux打包並壓縮命令 瀏覽:642
aes加密的證書格式 瀏覽:97
oracledbcalinux 瀏覽:842
酬勤任務app怎麼被特邀 瀏覽:197
android應用文件夾 瀏覽:1000
平面設計法則pdf 瀏覽:337
3d圓角命令怎麼用 瀏覽:567
程序員買意外險還是重疾險 瀏覽:619
遼寧的dns伺服器地址雲空間 瀏覽:446
我的世界伺服器斷開後怎麼連接 瀏覽:413
htmltopdfpython 瀏覽:75