最小的Linux系統製作過程詳解

2020-12-13 電子產品世界

一,什麼是BabyLinux

本文引用地址:http://www.eepw.com.cn/article/201610/305671.htm

二,為什麼要做這樣一個linux

三,什麼人適合讀這篇文檔

四,應該具備的知識

五,linux系統引導過程簡介

六,編譯內核

七,編譯busybox

八,製作根文件系統

九,製作ramdisk映象文件

十,內核與busybox的整合

十一,安裝測試和內容調整

十二,babylinux中的BUG

十三,接下來要做的事情

十四,參考文獻

一,什麼是BabyLinux

BabyLinux不是一個完整的發行版,他是利用原有的一套完整的linux系統的內核原代碼和編譯工具,利用busybox內建的強大功能,在一張軟盤上做的一個很小的linux系統.他具備一個linux系統的基本特徵,支持linux系統最常用的一百多個命令,支持多種文件系統,支持網絡等等,你可以把他當做一張linux起動盤和修復盤來用,你也可以把他當做一個靜態路由的路由器軟體,當然,你也可以把他當做一個linux玩具,向你的朋友炫耀 linux可以做的多麼小.我把他叫做BabyLinux因為他很小巧,小的很可愛,像一個剛剛出生的小baby.

二,為什麼要作這樣一個linux

先說說我一開始的想法,當我一開始接觸linux的時候,看到書上說,linux通常安裝只需要60M左右的空間,但是我發現裝在我硬碟上的Redhat 6.0確要佔據好幾百M的空間.為什麼我的linux這麼大呢? 後來我發現,裝在我機器上的那麼多東西只有不到30%是我平時常用的,還有30%是我極少用到的,另外的40%基本上是不用的.於是,我和大多數初學者一樣,開始抱怨,為什麼linux不能做的精簡一點呢?於是,我萌發了自己裁減系統的想法.可惜那個時候我還沒有聽說過有LFS和Debain.等到我積累了足夠的linux知識後,我開始製作這樣一個小系統.

製作這樣一個小系統最大的意義在於,你可以通過製作系統了解linux的啟動過程,學會ramdisk的使用,讓你在短時間內學到更多的linux知識. 當然,你會得到很大的樂趣.這個項目只是做一個具有基本特徵的linux系統,如果你想自己做一個具有完整功能的linux,請閱讀Linux From Scratch (LFS)文檔.

三,什麼人適合讀這篇文檔

如果你是一個linux愛好者,並且很想了解linux的啟動過程和系統的基本結構,而且是一個喜歡動手研究小玩意的人,那麼這個文檔可以滿足你的需求. 如果你僅僅是用linux來做一些普通的日常工作,而不在乎你的linux到底怎麼工作,那麼這份文檔也許不太適合你.另外,如果你是linux愛好者, 但是目前還是一個剛剛入門的newbi,我建議你先把linux命令學好.不過我想我會儘可能的把這份文檔寫詳細一些,如果你有足夠的毅力,或許一個 newbi也能成功做一個babylinux.或者,你遇到一件很不巧的事情,比如你的老婆來例假了,你的這個周末就泡湯了,那麼閱讀這篇文檔並做一個 linux小玩具可以打發你的時間.

四,應該具備的知識

在做一個babylinux之前,你應當已經會應用linux最常用的命令.並且至少有一次成功編譯並安裝系統內核的經歷,會通過編譯原始碼來安裝軟體. 如果你具備了這些條件,那麼做這樣一個小系統會很順利,如果你還沒有掌握這些知識,你可能會遇到一些困難.但是只要有毅力,也可以成功.你不需要具備編程的知識,因為我的目標是:讓具有中等以上linux水平的愛好者可以通過閱讀文檔輕鬆完成這個項目.關於一張軟盤上的linux還有一個很著名的 linux叫LOAP (Linux On A

Floppy) 但是他是由比較專業的人員需要編寫很多程序完成的.而且沒有關於他製作過程的文檔.

五,linux系統引導過程簡介

首先,主板的BIOS會讀取硬碟的主引導記錄(MBR),MBR中存放的是一段很小的程序,他的功能是從硬碟讀取作業系統核心文件並運行,因為這個小程序太小了,因此通常這個小程序不具備直接引導系統內核的能力,他先去引導另一個稍微大一點的小程序,再由這個大一點的小程序去引導系統內核.在linux系統中這樣的小程序有LILO和GRUB.在這個項目中,我決定用LILO來做系統引導程序.在軟盤上啟動linux系統的過程和在硬碟上啟動的過程相似.

Linux系統內核被引導程序裝入內核並運行後,linux內核會檢測系統中的各種硬體.並做好各種硬體的初始化工作,使他們在系統正式運行後能正常工作.之後內核做的最後一個工作是運行

/sbin 下的init程序,init是英文單詞initialization(初始化)的簡稱,init程序的工作是讀取/etc/inittab文件中描述的指令,對系統的各種軟硬體環境做最初化設定.最後運行mingetty等待用戶輸入用戶名登錄系統.所有的工作就這麼簡單,雖然linux啟動的時候有很多內容,看上去十分高深,但是都不過是對這個過程的擴充.明白了這個道理,你可以寫一些腳本程序讓他在系統啟動的特定時間運行完成任務.事實上系統內核並不關心/sbin下的init是不是真的init,只要是放在/sbin下名叫init的可執行程序他都可以執行.可以做以下實驗:

編寫一個非常簡單的C程序:

main()

{

printf(「hello,world!\n」);

}

保存後以init.c保存他,並用gcc編譯.

#gcc –-static -o init init.c

這裡的--static 參數告訴gcc把這個程序靜態聯接,這樣這個程序不倚賴任何庫就能運行.把編譯好的init程序拷貝到/sbin下,備份好原來的那個.重新啟動系統最後系統的輸出結果是: hello,world!

然後停在那裡.做這個實驗以前先確定你知道如何把系統恢復到原來的狀態,有一個簡單的方法,在內核啟動前給他加上init=參數,比如你原先的init被你改成了init.bak 只要在啟動的時候給內核加上init=/sbin/init.bak就可以用原來的init程序啟動系統.

做完以上實驗,就明白了內核和init程序之間的關係.此外,init程序不一定是一個二進位可執行程序,他可以是一個bash腳本,一個指向另一個程序的聯接,他的位置也並不一定要在/sbin下,只要在啟動內核時,給內核加上init參數就能被運行,比如,開始時給內核加上init= /bin/bash參數,內核在最後一步就直接運行bash給出提示符,不用登錄系統就可以輸入命令了.其功能類似單用戶模式啟動系統. /sbin/init 程序只是內核默認運行的第一個程序.

六,編譯一個linux系統內核

1,編譯前的規劃和準備

在編譯內核前,請先確定你的需求,把你的需求羅列成一張詳細的表格.你需要讓內核支持什麼硬體,支持多少種分區類型和文件系統,支持哪些網卡,支持哪些網絡協議.等等.請儘可能詳細的羅列這些內容,但是你也不要太貪心,因為你所有能利用的空間只有1440K,如果你編譯出一個大於1440K或很接近這個數字的內核,你的這個項目就不能完成了,你已經沒有空間再放ramdisk映象文件,除非你原意再多出一張軟盤,做一個兩張軟盤的小linux系統.對於音效卡驅動之類,我勸你還是放棄吧,因為一個音效卡驅動也許只讓你的內核增大了十多K,但是你有了一個音效卡驅動就務必要有一個播放器吧,否則音效卡驅動就沒有意義,可一個播放器的大小可不是一張軟盤可以裝得下的.在我先前製作的babylinux內核有900多K,其中,文件系統部分站了大部分,因為我的目標是把他做成一個系統修復盤.因此我在內核中編譯7種文件系統的支持,每減少一個文件系統就可以減小几十甚至200多K的內核大小.越是複雜,越是安全的文件系統,其支持模塊也越大,比如在linux下FAT模塊只有32K,VFAT只有17K,但是ext3的模塊就有86K,JFS達到216K, reiserfs模塊是224K,可以想像,編譯一個支持7個文件系統的900多K的內核,文件系統部分就佔了600K以上的空間,所以如果某一個文件系統是你根本不用的,那麼還是不要編譯進內核把,這樣至少可以省下100多K的空間.對於其他的驅動,比如網卡,通常大小只有8,9K,最大的也不過10多 K,因此可以把常用的網卡晶片的驅動都編譯進去.另外如果你想讓你的babylinux支持U盤,那麼scsi的驅動模塊也是不可小看的,他通常要接近 150K,因為U盤是被當做scsi設備來驅動的.另外你還需要讓你的內核支持即插即用,這些都是不小的空間開銷,我的建議是你放棄一兩個你不用的文件系統.總之,你最後編譯出來的內核大小最好不要超過900K,否則你在busybox裡只能編譯進去很少的命令.

相關焦點

  • 基於busybox的嵌入式Linux根文件系統的的製作方法
    根文件系統一直是Linux系統不可或缺的組件,在嵌入式Lin-ux中,內核在啟動期間進行的最後操作之一就是安裝根文件系統。Busybox是構建嵌入式Linux根文件系統的軟體,用它製作根文件系統簡單、方便,而且設置靈活。
  • 採用busybox的嵌入式Linux根文件系統的的製作方法
    根文件系統一直是Linux系統不可或缺的組件,在嵌入式Lin-ux中,內核在啟動期間進行的最後操作之一就是安裝根文件系統。Busybox是構建嵌入式Linux根文件系統的軟體,用它製作根文件系統簡單、方便,而且設置靈活。
  • 嵌入式Linux NFS 根文件系統的構建及研究
    摘要:在嵌入式Linux系統開發過程中,根文件系統是構建嵌入式Linux系統的重要組成部分。為了方便和簡化嵌入式Linux開發過程中的調試過程,主要研究了如何使用Busybox構建出基本的嵌入式Linux根文件系統,包括Busybox的配置、編譯和安裝。
  • ARM Linux根文件系統Root Filesystem的製作
    /sys用於掛載「sysfs文件系統」,「sysfs文件系統」在內核裡面可以選。目前我認為它就是給udev提供支持的,。「sysfs文件系統」也需要使用初始化腳本掛載。另外還可以有/tmp、/mnt、/swp、/var這樣的不是嵌入式系統必須的目錄,在說完Shell的製作之後,我再談建立目錄的事情。
  • 【Linux】Linux系統中的權限詳解
    所以對於了解linux系統中的各種權限及要給用戶,服務等分配合理的權限十分重要。一.文件基本權限   首先看下linux下的文件權限,可以使用ll命令或者是帶-l(長列表選項)的ls命令。   三.ACL(Access Control List )權限    linux系統中一個文件只有一個所屬組,一個所有者,acl權限是解決用戶對文件權限不足,也就是用戶身份不夠的情況下。
  • 基於S3C2440的嵌入式Linux根文件系統構建
    根文件系統的製作就是生成包含上述各種文件的文件系統的過程,可通過直接拷貝宿主機上交叉編譯器處的文件來製作根文件系統,但是這種方法製作的根文件系統一般過於龐大。也可通過一些工具如busybox來製作根文件系統,用busybox製作的根文件系統可以做到短小精悍並且運行效率較高。
  • Linux 系統內核的調試
    儘管使用虛擬機的方法可以只用一臺PC即能搭建調試環境,但是對系統其他方面的性能也提出了一定的要求,同時也增加了搭建調試環境時複雜程度。另外,kgdb內核的編譯、配置也比較複雜,需要一定的技巧,筆者當時做的時候也是費了很多周折。當調試過程結束後時,還需要重新製作所要發布的內核。使用kgdb並不能進行全程調試,也就是說kgdb並不能用於調試系統一開始的初始化引導過程。
  • Linux下vim編輯器的使用小技巧
    Vim是Linux作業系統中最常用一個編輯器。如配置文件的更改、環境變量的設置等等基本上都是在這個vim編輯器上完成。所以這是Linux系統管理員最常用的一個工具。不過這個工具雖然小,但是其有很多的實用小技巧。有些系統管理員可能並不知道。
  • 吉時利發布基於LINUX的參數測試系統
    其最主要升級是在每套測試系統中的嵌入式控制電腦上移植Linux作業系統(OS)。本項升級為其控制電腦提供更穩定的OS和更長的服務壽命,減少了用戶升級新工作站和軟硬體資源的開銷。此外,此次固件升級相比原來基於UNIX的系統具有更高的測試產能。新軟體授權(license)方法採用USB棒作為每套測試器的硬體鑰匙,通過在不同工作站間的遷移縮短維護時間。
  • 淺談分析Arm linux 內核移植及系統初始化的過程二
    Platform_device結構對象將被直接通過設備操作函數註冊導系統中去。具體註冊和註銷過程在下一節介紹。4.3. 處理器、設備4.4.具體過程參見系統初始化的相關部分。5. 系統初始化5.1.);//setup processor and machine and destinate some pointers for do_initcalls() s5、淺談分析Arm linux 內核移植及系統初始化的過程 諮詢QQ:313807838// for example init_machine
  • Linux 文件和文件夾權限詳解
    Linux 文件和文件夾權限詳解一點PHP建站技術分享之linux權限探討,很多初學者只是在練習的時候使用過幾次命令,例如chmod又或者chown等,但是很少會在實際中會去關心這個問題,下面一點博主詳細給大夥分析linux中權限這一問題。
  • 最簡單的虛擬機下安裝Linux並實現遠程登陸控制
    Linux的重要性不言而喻,小編就不作闡述了。十二本人也不是一個擅長說廢話的人,可能是多年的職業習慣養成的。下面直接開始吧。7.重新開啟虛擬機,選擇第一項,進去語言選擇中文8.軟體選擇改為gnome(後期成為大神後可以改為最小安裝),安裝位置直接點擊確認9.設置root密碼 並等待安裝完成10.同意協議,並打開網絡連接(後期也可通過命令打開)
  • Linux系統下安裝MySQL的步驟詳解
    推廣 | 令人窒息的獎品等你―2016最權威的全球開發者調研 如下是我工作中的記錄,介紹的是linux系統下使用官方編譯好的二進位文件進行安裝MySql的安裝過程和安裝截屏,這種安裝方式速度快,安裝步驟簡單!
  • 基於Linux/NC中小學的資源管理和互動教學系統
    在開發過程中,通過對不同系統使用者授予不同的權限,在權限上採取3級管理模式:管理員、教師和普通的用戶組(學生)。所有的用戶權限分配都由管理員完成,管理員可以根據實際情況給每個用戶分配權限。同時對普通的用戶組學生用戶根據所在年級進行權限的分配,使每個學生用戶在進入系統時根據權限登錄相應的用戶界面。當每年有新的學生入學或正常的學籍進行變化時,管理員應根據情況對學生的用戶權限進行註冊、更新或者刪除。
  • Linux掛載命令mount用法及參數詳解
    loop:用來把一個文件當成硬碟分區掛接上系統 ro:採用只讀方式掛接設備 rw:採用讀寫方式掛接設備 iocharset:指定訪問文件系統所用字符集3、device 要掛接(mount)的設備。4、dir設備在系統上的掛接點(mount point)。1、從光碟製作光碟鏡像文件。
  • 每天一個 Linux 命令(31): /etc/group文件詳解
    linux /etc/group文件是有關於系統管理員對用戶和用戶組管理的文件,linux用戶組的所有信息都存放在/etc/group文件中。具有某種共同特徵的用戶集合起來就是用戶組(Group)。用戶組(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件。
  • Linux系統從入門到放棄?
    續上一個學期學完了的Linux基礎知識學習過程,這一學期的centos伺服器技術學完後,讓我對於Linux系統的學習又加深了許多。我知道了Linux只是個 內核。現在的Linux作業系統,都是用這麼一個內核,加上其它的應用程式構成的。
  • Linux下用Busy Box製作Ramdisk全過程
    1 建立根文件系統結構#mkdir rootfs#cd rootfs#mkdir bin dev etc lib proc sbin tmp usr var#chmod 1777 tmp#mkdir usr/bin usr/lib usr/sbin#mkdir var/lib var/lock var/log
  • linux基礎應用(NFS文件共享)
    NFS簡介NFS(Network File System)網絡文件系統,由NFS伺服器端和NFS客戶端構成,通過網絡(一般是區域網)使不同主機系統,可以彼此共享文件。NFS客戶端mount掛載NFS伺服器端共享的文件目錄到NFS客戶端本地系統的某一個掛載點下,NFS客戶端本地訪問掛載點的共享目錄時,像是訪問本地的磁碟分區或目錄一樣,實際上訪問的是掛載的NFS伺服器目錄。
  • 五種Linux桌面操作過程錄製的文件
    Linux系統越來越受到電腦用戶的歡迎,於是很多人開始學習Linux時,在很多時候,我們需要將在Linux桌面上的操作過程錄製下來,比如製作屏幕演示