日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

linux内核实验平台搭建,搭建自己的Linux实验系统(一)

發(fā)布時間:2025/4/16 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核实验平台搭建,搭建自己的Linux实验系统(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

當(dāng)你對操作系統(tǒng)已經(jīng)有了基本的把握;而且對Linux也有了初步的了解,可是,如果你是一個程序員,你肯定還是會覺得惴惴不安:Linux到底是怎么回事?

求知和求實是程序員的天性,我們當(dāng)然有義務(wù)滿足自己的天性,所以,相關(guān)的實踐必需在此展開。可是,我們到底要實踐些什么呢?

不如從搭建Linux系統(tǒng)開始。

在搭建的時候,我們需要制作一個root文件系統(tǒng):你很清楚了,所有必須的軟件和數(shù)據(jù)都在上面,只要我們選定的范圍合適,那么什么是操作系統(tǒng)最核心的組成部分在我們實驗以后顯然會一清二楚;我們需要制作一個內(nèi)核鏡像:沒有內(nèi)核,操作系統(tǒng)將會怎樣?但是沒有(不包含)用不到的內(nèi)核功能,操作系統(tǒng)肯定會安然無恙。實驗過后,你肯定會清楚內(nèi)核到底要做些什么!內(nèi)核和文件系統(tǒng)都有了,那不就OK了?稍等,怎么把兩者綁定到一塊呢?還有硬件啟動的麻煩事,怎么才能讓系統(tǒng)真正開始工作呢?

“安得倚天抽寶劍,將汝截為三段!”一段編譯,一段創(chuàng)建,一段自己連…

好了,不開玩笑了,讓我們開始吧。

搭建的基礎(chǔ)?

首先我們必須做出一個基本決定,到底是從源代碼開始搭建呢?還是從現(xiàn)有系統(tǒng)上裁減出一個系統(tǒng)呢?如果是從源代碼開始搭建,那么我們需要對所有的軟件包進(jìn)行下載、編譯、鏈接和安裝,這中間步驟非常繁瑣,在這里我們不希望選取這種方式。說實話,其實這方面有非常不錯的Howto文檔LinuxFromScrach(有翻譯好的中文文檔),你完全可以按照該文檔進(jìn)行搭建。

但是,我們的考慮是用最小的代價--消耗時間最短、相關(guān)硬件需求最少--來完成操作,而且整個過程必須保證安全可靠,即使初學(xué)者出現(xiàn)一些誤操作,也不應(yīng)該影響原來安裝好的系統(tǒng)。所以,我們決定從現(xiàn)有的系統(tǒng)上抽出我們所需的原料。

分三步建立系統(tǒng)

非常遺憾,搭建Linux操作系統(tǒng)的人基本上都是diyer,所以不存在什么標(biāo)準(zhǔn)流程。但是大體流程都大同小異,無非是:首先編譯內(nèi)核——將內(nèi)核源代碼編譯成一個可執(zhí)行的鏡像文件,當(dāng)然,此時可能還會需要編譯一些模塊,這要取決于你是如何配置內(nèi)核的。

有了編譯好的內(nèi)核還遠(yuǎn)遠(yuǎn)不夠,因為你還沒有能容納系統(tǒng)程序和應(yīng)用程序的文件系統(tǒng),所以接下來需要創(chuàng)建一個root文件系統(tǒng)。文件系統(tǒng)要包含什么?第二步會有詳細(xì)的說明。

內(nèi)核與文件系統(tǒng)都有了,現(xiàn)在是萬事具備,只欠東風(fēng)了。只要將內(nèi)核和文件系統(tǒng)邦定到一起,讓機(jī)器啟動后載入我們編譯的內(nèi)核,進(jìn)而安裝root文件系統(tǒng),然后執(zhí)行其中的初始化程序,我們的工作就大功告成了。說來輕松,可這個收尾動作難度系數(shù)還是蠻高的,初學(xué)者往往都在這里要栽跟頭--你必須對系統(tǒng)啟動過程了如指掌才能左右逢源。

搭建一個操作系統(tǒng)是我們深入了解Linux系統(tǒng)的一個非常好的途徑。當(dāng)然,由于操作系統(tǒng)這門學(xué)科本身涵蓋面非常廣,而實際的操作系統(tǒng)軟件又龐大不堪。所以,一開始從任何層面著手實踐肯定都會有盲點,有不能理解的地方,其實不用著急,隨著內(nèi)容的逐漸展開,希望您和我們一起探討,共同解開這些疑惑。

前面提到過,我們希望搭建的過程安全便捷,但不是每個朋友都能找到空硬盤或者磁盤(看看你的機(jī)器,也許連軟驅(qū)都沒有)來做新系統(tǒng)的。而且為了防止初學(xué)的朋友不小心誤操作,新開分區(qū)等危險操作也應(yīng)該盡力避免。所以,我們決定在系統(tǒng)啟動時使用RAM盤來存放根文件系統(tǒng)。

提醒:這種實現(xiàn)其實在嵌入式系統(tǒng)中常常用到,許多嵌入系統(tǒng)并沒有硬盤,只有容量很小的ROM disk,里面存放壓縮過的數(shù)據(jù);而且運(yùn)行中根本就不需要向磁盤存儲任何數(shù)據(jù)。

現(xiàn)在開始,我們一同做個這樣的實驗小系統(tǒng),你要付出些代價是:時間+無數(shù)次擊健。

編譯內(nèi)核

第一步要做的工作是挑選一個合適版本的內(nèi)核源代碼包,然后編譯它。不要以為編譯內(nèi)核很神秘,其實它和編譯普通程序差不多,內(nèi)核源代碼其實就是“一大堆”程序,它也是通過編譯一個個的文件,然后將它們鏈接成一個可執(zhí)行鏡像文件。這個鏡像就是你在/boot目錄下看到的vmlinuz-*。(如果你細(xì)心的話,一定能發(fā)現(xiàn)在該目錄下還有一個叫vmlinux的文件。其實這兩個文件是一回事,前面那個不過是經(jīng)過壓縮的罷了。)

正如第一部分所提到過的,Linux內(nèi)核具有很強(qiáng)的伸縮性,在編譯內(nèi)核時,你很容易就能發(fā)現(xiàn)這一點:很多功能是可選的,如果系統(tǒng)需要它,就可以將其編譯到內(nèi)核。不過加入太多的功能會使內(nèi)核迅速膨脹起來。一種替代的方式是將某些功能編譯成模塊,放在文件系統(tǒng)里,等你真正需要它時,再把它載入到內(nèi)存中供內(nèi)核使用。

雖然是個實驗系統(tǒng),但我們希望它支持盡可能多的硬件和實現(xiàn)盡可能多的功能。所以我們配置內(nèi)核編譯選項時,除了支持最基本的ext2文件系統(tǒng),PCI接口,自動裝載模塊機(jī)制以外,又把ext3,JFS,即插即用,網(wǎng)絡(luò),SCSI,USB等比較常用的部分加入到內(nèi)核中(我們的系統(tǒng)不大,所以,為了方便起見把它們都直接編譯到了內(nèi)核。不過也留下網(wǎng)卡驅(qū)動以模塊形式編譯,好讓大家印證一下模塊自動載入機(jī)制)。此外,為了能在虛擬內(nèi)存中建立root文件系統(tǒng),內(nèi)核還必須支持Ramdisk和initrd。

內(nèi)核網(wǎng)絡(luò)設(shè)備選項里包含大量網(wǎng)卡驅(qū)動程序,你必須知道自己的網(wǎng)卡類型才能正確選擇,一般情況下都將網(wǎng)卡驅(qū)動編譯為模塊,在系統(tǒng)啟動后載入。我們的實驗系統(tǒng)運(yùn)行在vmware下,而vmware虛擬網(wǎng)卡驅(qū)動為pcnet32,因此只包含這個驅(qū)動模塊。

編譯步驟

巧婦難為無米之炊,首先得去下載一份內(nèi)核源代碼。就算一直是飯來張口,也別指望我能給你提供內(nèi)核源碼,自己到網(wǎng)站上下載一個想要版本的內(nèi)核源代碼吧。如果是gz結(jié)尾的壓縮源文件,就使用tar xvzf linux-2.6.x.tar.gz解開,如果是bz2結(jié)尾的,就用tar xvjf linux-2.6.x.tar.bz2解開。

內(nèi)核版本編號可是有點講究的,簡單的說,偶數(shù)為穩(wěn)定版本,奇數(shù)為開發(fā)版本。我們選用的是2.4.18版,希望大家下載最新版本2.6.32。

進(jìn)入解開后的內(nèi)核源代碼目錄(標(biāo)準(zhǔn)系統(tǒng)默認(rèn)情況下在目錄/usr/src/linux下存放該系統(tǒng)的內(nèi)核源代碼,如果你自己解壓源碼包,那么如果不指明具體的目錄,默認(rèn)解壓到當(dāng)前目錄的linux目錄下),執(zhí)行命令make menuconfig,進(jìn)行內(nèi)核編譯選項的配置,選擇需要的功能,以模塊形式編譯或直接編譯到內(nèi)核。配置信息默認(rèn)情況下保存在隱含文件.config中,你也可以選擇將其保存到指定的文件中,比如可以把信息記錄在MiniSys.config中,在以后重新配置內(nèi)核時可以方便地導(dǎo)入指定的配置文件(即使是老手,配置內(nèi)核有時也會出現(xiàn)問題,導(dǎo)致編譯失敗。我們建議初學(xué)者從默認(rèn)情況開始,逐步加減內(nèi)核編譯選項,小步更改,多次練習(xí),逐步掌握內(nèi)核配置本領(lǐng))。

make menucofig提供給你一個終端圖形界面的配置菜單,其中列出了內(nèi)核所能提供的全部功能,如果你在選項前打上*標(biāo)號,那么該選項被編譯到內(nèi)核中,如果打上M標(biāo)號則被編譯為模塊,對于你不清楚的選項的意義,可以使用?查看它的幫助文檔。除了用make meunconfig外,如果你有復(fù)古情結(jié)的話,可以試試使用make config,它完成同樣的功能,不過你得有足夠得耐心去忍受洪水一般涌過的命令行信息,同時不厭其煩對功能項進(jìn)行取舍(選或)。如果你在X環(huán)境下(桌面環(huán)境),不妨使用make xconfig配置,相比前兩種方法,它更容易看清楚一些,推薦眼神不好的網(wǎng)友使用。

保存內(nèi)核配置后,就執(zhí)行make dep,該操作檢查代碼之間的相互依賴關(guān)系,比如引用的頭文件是不是都被包含了。

makeclean,該操作用來清除以前編譯內(nèi)核時遺留下來的生成物。采取這個步驟是習(xí)慣問題,現(xiàn)在新版本的內(nèi)核已經(jīng)不是必需的了。

makebzImage或make zImage,編譯內(nèi)核——bzimage和zImage兩種內(nèi)核之間最大的差別是對于內(nèi)核體積大小的限制。zImage內(nèi)核需要放在實模式1MB的內(nèi)存之內(nèi),所以其體積受到了限制。而bzImage的內(nèi)核沒有1MB內(nèi)存限制,因此通常用它。

編譯過程漫長而且乏味(至少在我的vmware虛擬機(jī)中非常慢),尤其討厭的是,要是你選擇功能不當(dāng),那編譯時就會出錯,終止編譯過程。這時你不得不從頭開始,修改選項,重新編譯,好不麻煩。所以每次配置都不要追求勇猛精進(jìn),最好參考我們的建議,逐步添加功能,保存配置信息,以防不測。

注意,內(nèi)核編譯完了,還要編譯模塊。即使您在配置內(nèi)核時沒有使用任何模塊,最好也不要跳過此步驟,在編譯完內(nèi)核后立刻編譯并安裝模塊是個好習(xí)慣。當(dāng)然,如果您確實沒有配置什么模塊的話,這部分工作很快就會結(jié)束。

makemodules,編譯內(nèi)核模塊,凡是在配置內(nèi)核時標(biāo)記為M的部分都將被編譯為模塊。

makemodules_install,將編譯好的內(nèi)核模塊安裝到正確的位置上,一般會放在/lib/modules//這個目錄下。當(dāng)然,如果你想改變模塊的安裝目錄,可以修改Makefile文件,通過設(shè)置INSTALL_MOD_PATH來改變模塊的安裝目錄。

等蝗蟲一樣的字符風(fēng)暴在屏幕上停歇后(當(dāng)然不是滿屏的出錯信息!),你真的擁有新內(nèi)核了。它藏在內(nèi)核源碼目錄下的子目錄arch/i386/boot下,叫作bzImage或zImage(根據(jù)你的make操作而定),模塊也被安裝到了相應(yīng)的位置上。

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的linux内核实验平台搭建,搭建自己的Linux实验系统(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。