新聞中心
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,開(kāi)源操作系統(tǒng)Linux已經(jīng)成為了很多人的選擇,尤其是對(duì)于一些程序員來(lái)說(shuō),Linux系統(tǒng)無(wú)疑是他們工作中必不可少的工具。而對(duì)于想要了解Linux系統(tǒng)運(yùn)行原理和深入學(xué)習(xí)Linux內(nèi)核的人來(lái)說(shuō),自己編譯一份Linux系統(tǒng)將是一個(gè)非常具有挑戰(zhàn)性的任務(wù)。

雖然像Ubuntu、Debian、CentOS等已經(jīng)提供了成熟且穩(wěn)定的操作系統(tǒng),并且我們可以直接去下載和安裝這些系統(tǒng),但是如果我們想要完全掌握Linux系統(tǒng)的運(yùn)行原理以及深度了解內(nèi)核技術(shù),那么自己編譯一份Linux系統(tǒng)無(wú)疑是更佳選擇。
本文將基于x86_64架構(gòu),。
之一步:準(zhǔn)備工作
在編譯Linux系統(tǒng)之前,我們需要進(jìn)行一些準(zhǔn)備工作,以確保編譯過(guò)程的順利進(jìn)行:
1.選擇合適的Linux內(nèi)核版本
Linux內(nèi)核版本是編譯Linux系統(tǒng)的重要因素之一,選擇合適版本的內(nèi)核可以保證我們的系統(tǒng)兼容性更強(qiáng)、穩(wěn)定性更高。目前Linux內(nèi)核版本已經(jīng)非常多,我們可以在Kernel.org官網(wǎng)上獲取到源代碼。
2.安裝必備工具
在編譯Linux系統(tǒng)過(guò)程中,我們需要安裝一些必要的工具,這些工具包括GCC、Glibc、Make等,可以使用以下命令進(jìn)行安裝:
sudo apt-get install gcc g++ make binutils libc6-dev-i386
3.選擇合適的主機(jī)Linux系統(tǒng)
我們需要在一個(gè)已經(jīng)安裝好的Linux系統(tǒng)上進(jìn)行編譯工作,推薦選擇Ubuntu或Debian系統(tǒng)。
4.準(zhǔn)備交叉編譯工具鏈
編譯Linux系統(tǒng)需要用到交叉編譯工具鏈,可以通過(guò)以下命令進(jìn)行安裝:
sudo apt-get install gcc-arm-linux-gnueabi
或者通過(guò)源碼編譯的方式安裝:
cd build
tar xf /path/to/archives/gcc-linaro-5.5.0-2023.10-x86_64_arm-linux-gnueabihf.tar.xz
export PATH=$PATH:/path/to/gcc-linaro-5.5.0-2023.10-x86_64_arm-linux-gnueabihf/bin
第二步:下載并解壓Linux內(nèi)核源代碼
首先我們需要在Kernel.org官網(wǎng)上獲取到需要編譯的內(nèi)核版本的源代碼壓縮包,并使用以下命令進(jìn)行解壓:
tar zxvf linux-version.tar.gz
其中version為需要編譯的Linux內(nèi)核版本號(hào)。
第三步:配置Linux內(nèi)核
進(jìn)入內(nèi)核源碼目錄,使用make xconfig命令打開(kāi)內(nèi)核的配置菜單:
make xconfig
在配置菜單中進(jìn)行相關(guān)選項(xiàng)的配置。大部分選項(xiàng)可以按照默認(rèn)值進(jìn)行配置,但是需要注意的是要開(kāi)啟以下選項(xiàng):
1.Enable Loadable module support
2.64-bit kernel
3.The ADVANCE Linux Sound Architecture
4.The Enhanced Real Time Clock Support
5.Ext3 file system
6.Ext4 file system
7.The Loopback Device Support
8.Devtmpfs filesystem
9.The PCI host bridge support
10.The USB support
11.The USB Mass Storage support
12.The USB Stereo hack support
13.The USB Serial Converter support
14.The USB ATMEL ATMega and AVRISP support
15.The USB Compaq Ipaq Microcomms support
16.The USB FTDI FT245BM/FT245BQ support
17.The USB MELCO MCR-U2 art card reader support
18.The USB G and CDMA modem support
19.The USB Serial Converter Coolgear support
20.The USB Serial Converter Cypress support
21.The USB Serial Converter PocketCHIP support
22.The USB Prolific 2303 Single Port Serial Driver
23.The USB serial device converter driver
24.The USB Bluetooth 4.0 (Low Energy) device support
25.The USB HID driver support
除上述選項(xiàng)外,還需要在菜單下方的“Device Drivers”中開(kāi)啟以下選項(xiàng):
1.Generic Driver Options
2.Multiple devices driver support
3.Network Devices
4.Most Ethernet Adapters (PCI, USB, ISA, etc.)
5.Wireless LAN
6.Intel PRO/Wireless 3945ABG/BG and Intel Wireless WiFi Link 4965AGN Support
7.Sound card support
8.Advanced Linux Sound Architecture
9.SCSI device support
10.SCSI disk support
11.AHCI SATA support
12.Parallel ATA support
13.ATA SFF support
14.USB Mass Storage support
進(jìn)行內(nèi)核配置后,使用以下命令開(kāi)始編譯:
make -j4
其中-j4表示使用4個(gè)核進(jìn)行編譯,可以根據(jù)自身CPU核心數(shù)進(jìn)行調(diào)整。
第四步:準(zhǔn)備文件系統(tǒng)
在Linux系統(tǒng)中,文件系統(tǒng)是非常重要的一個(gè)部分,系統(tǒng)中所有的文件都存在于文件系統(tǒng)之中。我們可以使用BusyBox來(lái)構(gòu)建一個(gè)臨時(shí)的文件系統(tǒng)。
首先從BusyBox官網(wǎng)上下載BusyBox源碼包,使用以下命令進(jìn)行解壓:
tar xf busybox-version.tar.bz2
其中version為BusyBox版本號(hào)。
進(jìn)入BusyBox目錄,使用make defconfig命令生成默認(rèn)的配置文件:
cd busybox-version
make defconfig
生成的默認(rèn)配置文件名稱為.config。使用make menuconfig命令進(jìn)行配置:
make menuconfig
在菜單中選擇以下幾個(gè)常用的選項(xiàng)進(jìn)行配置:
1.Settings
2.Init Utilities
3.Additional Utilities
4.Shell Utilities
5.Networking Utilities
配置完成后,使用以下命令進(jìn)行編譯:
make
在BusyBox目錄下生成了busybox可執(zhí)行文件,在執(zhí)行文件所在目錄下創(chuàng)建一個(gè)臨時(shí)的文件夾,例如:
mkdir rootfs
然后在rootfs目錄下創(chuàng)建dev、etc、proc、sys和tmp五個(gè)目錄:
mkdir -p rootfs/{dev,etc,proc,sys,tmp}
使用以下命令在rootfs/etc目錄下創(chuàng)建兩個(gè)空文件:
touch rootfs/etc/{passwd,group}
第五步:安裝內(nèi)核和文件系統(tǒng)
進(jìn)入Linux內(nèi)核源碼目錄,在make命令編譯完成之后,使用以下命令進(jìn)行安裝:
make ARCH=arm INSTALL_PATH=/path/to/your/rootfs install
其中/path/to/your/rootfs為之前創(chuàng)建的臨時(shí)文件系統(tǒng)目錄。執(zhí)行以上命令之后,在臨時(shí)文件系統(tǒng)內(nèi)就已經(jīng)安裝了編譯好的內(nèi)核。
在內(nèi)核和文件系統(tǒng)安裝好之后,我們需要生成一個(gè)可供u-boot引導(dǎo)的鏡像文件。使用以下命令生成鏡像文件:
cd /path/to/your/rootfs
find . | cpio -o –format=newc > ../rootfs.cpio
cd ..
mkimage -A arm -O linux -T ramdisk -d rootfs.cpio.gz rootfs.uboot
至此,我們已經(jīng)成功地完成了自己編譯Linux系統(tǒng)的過(guò)程。
自己編譯Linux系統(tǒng)是一個(gè)非常具有挑戰(zhàn)性的任務(wù),但是也是非常有趣的,通過(guò)這個(gè)過(guò)程我們可以更深入地了解Linux系統(tǒng)的運(yùn)行原理和內(nèi)核技術(shù)。為了完成這個(gè)任務(wù),我們需要做好一些準(zhǔn)備工作,選擇合適的Linux內(nèi)核版本、安裝必要的工具、選擇合適的主機(jī)Linux系統(tǒng)以及準(zhǔn)備好交叉編譯工具鏈等等。在內(nèi)核和文件系統(tǒng)安裝好之后,我們需要生成一個(gè)可供u-boot引導(dǎo)的鏡像文件。希望通過(guò)這篇文章的介紹,大家可以更好地了解自己編譯Linux系統(tǒng)的過(guò)程。
相關(guān)問(wèn)題拓展閱讀:
- 如何才能自己寫(xiě)一個(gè)簡(jiǎn)單的linux操作系統(tǒng)
- Linux操作系統(tǒng)中默認(rèn)安裝的C語(yǔ)言編譯系統(tǒng)是
如何才能自己寫(xiě)一個(gè)簡(jiǎn)單的linux操作系統(tǒng)
只要你學(xué)過(guò)匯編和C,只滿足于寫(xiě)個(gè)“簡(jiǎn)單的操作系統(tǒng)”,一兩天就能搞定。
隨便把你寫(xiě)過(guò)的小程序,用直接寫(xiě)擾納硬盤(pán)軟件(或者自己編一個(gè),調(diào)用winapi的WriteFile函數(shù)就可以),寫(xiě)進(jìn)硬盤(pán)/U盤(pán)引導(dǎo)區(qū)。記住,起始地址是7c00。
這就好了。注意,引導(dǎo)區(qū)只有440個(gè)字節(jié)給你用,程序不能太大,所以這部分基本要用匯編寫(xiě)。440字節(jié)后面是硬盤(pán)/U盤(pán)分區(qū)信息,不可以亂動(dòng)。亂動(dòng)以后bios可能沒(méi)法識(shí)別硬緩嫌沒(méi)盤(pán)/U盤(pán)。
引導(dǎo)區(qū)最后兩個(gè)字節(jié)必須是55AA,不過(guò)一般你不用管,硬盤(pán)/U盤(pán)格式化的時(shí)候都已經(jīng)給你寫(xiě)好了。
這樣你的程序就在開(kāi)機(jī)的時(shí)候直接運(yùn)行了。
想調(diào)用大程序也沒(méi)問(wèn)題,你需要寫(xiě)個(gè)不超過(guò)440字節(jié)的程序,負(fù)責(zé)把第二個(gè)扇區(qū)的內(nèi)容載入內(nèi)存并執(zhí)行,由第二個(gè)扇區(qū)的代碼負(fù)責(zé)把所有代碼載入內(nèi)存。后面的部分用C寫(xiě)或者別的高級(jí)語(yǔ)言寫(xiě)都沒(méi)什么問(wèn)題了。
至于你想要具體作什么,就寫(xiě)什么,屏幕上畫(huà)個(gè)畫(huà),管管硬盤(pán)上的文件,和用戶互動(dòng)一下,你隨意。和你平常寫(xiě)程序沒(méi)啥兩樣??傊粋€(gè)能完成任務(wù)的簡(jiǎn)單操作系統(tǒng)就完事了。
最多幾天時(shí)間你就能搞定。這差不多能搞個(gè)接近dos1.0的“簡(jiǎn)單操作系統(tǒng)”。
不過(guò)接下來(lái)者攔才是你真正要學(xué)的。例如文件管理,內(nèi)存管理,保護(hù)模式,進(jìn)程管理啥的。麻煩歸麻煩,但解放了自由了,終于可以編寫(xiě)內(nèi)核態(tài)才準(zhǔn)用的代碼了,做的事情全部都是用戶態(tài)下面不讓做的事情。操作系統(tǒng)的學(xué)習(xí),從這里才算真正開(kāi)始。
Linux操作系統(tǒng)中默認(rèn)安裝的C語(yǔ)言編譯系統(tǒng)是
Linux操作系統(tǒng)
中默認(rèn)安裝的C語(yǔ)言編譯系統(tǒng)是GCC(GNU Compiler Collection),
是Linux下最常用的C語(yǔ)言
編譯器
,是GNU項(xiàng)目中符合ANSI,C標(biāo)準(zhǔn)的編譯系統(tǒng),能夠編譯用C、Object C等語(yǔ)言編寫(xiě)的程序。
同時(shí)它可以通過(guò)不同的前端模塊來(lái)支持各種語(yǔ)言,如Java、Fortran、Pascal、Modula,3和Ada等。
C語(yǔ)言的標(biāo)準(zhǔn)
1.1 K,RC
1973年,Dennis M Ritchie設(shè)計(jì)和實(shí)現(xiàn)了C語(yǔ)言,從那以后使用者此伏擾逐漸增加。
1978年,Kernighan 和 Ritchie 合著了《The C Programming Language》,這本書(shū)定義的C語(yǔ)言被稱為 K,RC 。
1.2 標(biāo)準(zhǔn) C
隨著C語(yǔ)言使用日益廣泛,出現(xiàn)了許多新問(wèn)題,人們迫切希望對(duì)C語(yǔ)言進(jìn)行標(biāo)準(zhǔn)化。
之一個(gè)標(biāo)準(zhǔn):C89
1983年,ANSI成立了一個(gè)委員會(huì)X3J11,對(duì)C語(yǔ)言進(jìn)行標(biāo)準(zhǔn)化。
1989年,ANSI 批準(zhǔn)了之一個(gè)C語(yǔ)言標(biāo)準(zhǔn) X3,,并于1990年公布,被稱為 ANSIC、C89 或 C90。
1990年,這個(gè)標(biāo)準(zhǔn)又被批準(zhǔn)為
ISO標(biāo)準(zhǔn)
:ISO,IEC 9899:1990 。
ANSIC標(biāo)準(zhǔn)被ISO采納,并且ISO發(fā)布的修訂版也被ANSI采納,因此
ANSI標(biāo)準(zhǔn)
和ISO標(biāo)準(zhǔn)實(shí)際上沒(méi)有技術(shù)區(qū)別。這些名稱的含義是相同的森旦:ANSI C、ISO C、標(biāo)準(zhǔn)C。
1994年和1996年,ISO發(fā)布了兩個(gè)技術(shù)更正,更正了1990ISOC標(biāo)準(zhǔn)中的錯(cuò)誤。
第二個(gè)標(biāo)準(zhǔn):C94
1995年,ISO發(fā)布了1990ISOC標(biāo)準(zhǔn)的一個(gè)補(bǔ)充,稱為AMD1。擴(kuò)充后的標(biāo)準(zhǔn)被稱為C94或C95。
第三個(gè)標(biāo)準(zhǔn):C99
1999年,ISO發(fā)布了一個(gè)新版本的ISOC標(biāo)準(zhǔn):ISO,IEC9899:1999,稱為C99。
2023年、2023年和2023年,ISO發(fā)布了三個(gè)技術(shù)更正,更正了1999ISOC標(biāo)準(zhǔn)中的錯(cuò)誤。
第四個(gè)標(biāo)準(zhǔn):C11
2023年,ISO發(fā)布了一個(gè)新版本的ISOC標(biāo)準(zhǔn):ISO,IEC9899:2023,稱為C11。C11 是 C語(yǔ)言的最新標(biāo)準(zhǔn)。
1.3 GNUC
1984年,Richard Stallman 發(fā)起了GNU計(jì)劃,它的目標(biāo)是開(kāi)發(fā)一個(gè)完整且自由的Unix-like操作系統(tǒng)(GNU系統(tǒng))。
GNU系統(tǒng)是一個(gè)完整的操作系統(tǒng),包括
操作系統(tǒng)內(nèi)核
和各種工具軟件。各種GNU系統(tǒng)的變種(例如Redhat、Ubuntu等)已經(jīng)被廣泛使用,它們使用的操作系統(tǒng)內(nèi)核廳謹(jǐn)都是Linux。雖然這些系統(tǒng)經(jīng)常被稱為L(zhǎng)inux,但準(zhǔn)確地說(shuō),它們是GNU/Linux系統(tǒng)。
GNU在編寫(xiě)Linux時(shí)擴(kuò)展了標(biāo)準(zhǔn)C,稱為GNUC。
GNU C的擴(kuò)展詳見(jiàn):Extensions to the C Language Family
GNU C也稱為L(zhǎng)inux C,一般用于Linux上的開(kāi)發(fā),而標(biāo)準(zhǔn)C可以跨平臺(tái)。
GNU C使用的編譯器是GCC。
linux 自己編譯系統(tǒng)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 自己編譯系統(tǒng),手把手教你實(shí)現(xiàn)自己編譯Linux系統(tǒng),如何才能自己寫(xiě)一個(gè)簡(jiǎn)單的linux操作系統(tǒng),Linux操作系統(tǒng)中默認(rèn)安裝的C語(yǔ)言編譯系統(tǒng)是的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專(zhuān)業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
當(dāng)前標(biāo)題:手把手教你實(shí)現(xiàn)自己編譯Linux系統(tǒng)(linux自己編譯系統(tǒng))
當(dāng)前URL:http://m.fisionsoft.com.cn/article/cdsecdh.html


咨詢
建站咨詢
