歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> busybox 制作tiny linux

busybox 制作tiny linux

日期:2017/2/27 9:24:04   编辑:更多Linux

  我省去了制作啟動盤的過程,這個網上可以大把大把的抓!

  更多...

  我通過在硬盤上安裝Linux得到linux的分區:

  /dev/hda1 /boot

  /dev/hda2 /

  /dev/hda3 swap

  好了,現在開始用busybox來制作了。。。

  實際操作過程相當簡單:

  下載好busybox的源文件,大家最好到busybox的官方網站上面去下,這樣還可以看到很多文檔 :)

  我下載的是busybox-1.00-rc3版本,也是它的最新版

  tar zxvf busybox-1.00-rc3.tar.gz

  cd busybox-1.00-rc3

  make menUConfig

  (這個過程類似編譯linux內核,如果你還不會編譯內核的話,那先看看我的blog裡面的另一篇文檔好了)

  做好自己的選項後,

  make dep

  make

  make install

  默認情況下,busybox會在當前目錄下生成一個_INSTALL的目錄,編譯後生成的文件都在這個目錄下,一會兒我們也要用這個目錄下的文件來制作我們的tiny linux

  我們先看一看這個目錄下的結構:

  /usr

  /etc

  /....

  因為我是在編譯好後才寫這篇文檔的,所以目錄列不全了,反正這個也不重要,大家在嘗試中自己觀察吧

  然後就是替換工作了,關於busybox的工作原理大家可以參考busybox的資料,網上一大把一大把的抓!!

  主要的操作目錄有 etc usr bin sbin

  將這幾個目錄用剛才編譯過的目錄替換,然後將原etc目錄下的 passwd passwd- shadow shadow-  幾個文件放到busybox的目錄下(你得登陸吧,哈哈,登陸就得用這幾個文件了)

  其實這個時候系統的大小就已經不到200M了,

  下面是進一步的裁減工作,這個工作主要集中在lib目錄下

  lib目錄的結構:

  根目錄下是一些常用的so庫

  modules 是linux的模塊

  modules 目錄裡面還有 EL 結尾的文件夾目錄,如果你是多cpu的話,有一個smp結尾的目錄,如果你已經編譯了內核的話,還有一個ELcustom結尾的目錄

  決定你用那個內核,如你用smp的話,那就刪掉其他的兩個,如果你用自己編譯的內核的話,那就刪掉另外的兩個,同樣的道理

  其他在lib目錄下的so文件大家自己決定吧,不過有這樣一個問題,如果你裁減完登陸時出現“Login incorrect:User 'unknown' failed on 'tty2'”提示的話,很可能就是你這裡面的庫刪錯了,補回來吧。。

  裁減過程,除了刪除文件外,我覺得還有一個問題,就是完善功能,實現linux的常用功能:如網絡,文件系統的rw屬性等

  這個也是我在裁減過程中遇到的問題,

  1,恢復網絡功能

  網絡功能需要這樣幾個必要的條件:

  1)內核支持inet4

  2)有網卡驅動

  好了,假設上面的都成立,我們開始給這個tinylinux設定網絡:

  我的網卡是8139的所以,我需要的網卡驅動在/lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/8139too.so

  當然,pci的網卡還需要這個東東:/lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/mii.o (為什麼要這個我也說不清楚,反正要一定要有,freebsd在編譯內核的時候,也是一定要加上mii這個東西的,編譯過bsd內核的朋友一定有印象)

  ok,還有一個so是要加上的,那就是/lib/modules/2.4.21-9.ELcustom/kernel/lib/crc32.o,這個東東,是什麼作用,高手來解答吧,我也不清楚,或者大家去Google搜索一下好了

  總結一下加入網絡的步驟:

  /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/lib/crc32.o

  /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/mii.o

  /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/8139too.so

  看到什麼了嗎?

  你的網卡已經起來了。。。不過這樣還不可以

  在/etc/modules.conf文件中要增加這樣的一句:alias eth0 8139too (為啥呢?我也不懂,向大家請教,)




  現在應該可以了,控制台裡面輸入:ifconfig eth0 inet 192.168.0.2 netmask 255.255.255.0

  結果呢?應該就是大家期望的了。。

  還可以添加路由的:

  /sbin/route add default gw 192.168.0.1

  不管別的了,先ping一下網關再說:

  #ping 192.168.0.1

  .........................

  登陸到192。168。0。1上面去:

  192。168。0。1#ping 192.168.0.2

  。。。。。。。。。。。。。

  網絡功能基本上沒有問題了,我試過ping 202.102.88.*這個外網ip的。

  2。文件系統的讀寫功能。

  busybox的啟動過程跟linux是不一樣的,它在內核啟動後,運行/etc/init.d/rcS這個腳本的,而且只有這一個啟動腳本,所以,如果有什麼在啟動時候運行或初始化的程序,只能寫在這個腳本裡了。

  在我的觀察來看,linux啟動過程中,與文件系統(我指的是mount或umount這樣的操作)相關的操作是有這樣的步驟的:第一個步驟是內核以ro (read-only,只讀)的形式來mount / ,這個在grub。conf(grub的配置文件,在/boot/grub/目錄下)有這樣的描述:”kernel /boot/powerbit.vmlinux ro root=/dev/hdb1“ ,看到那個“ro”了嗎?

  第二個步驟是系統在fsck(磁盤掃描,檢查文件系統上一次關機時是否正常umount),然後進行“umount -a”

  第三個步驟是這樣的,在檢查完文件系統沒有問題後,運行"mount -t ext3 remount rw /" 這樣的語句,注意到“rw”了嗎?就是這個標志,決定我們的tiny linux的文件系統是否能夠寫入的,或許你這樣考慮,我直接在grub.conf裡面把“ro”改成“rw”不可以嗎?自己試試就知道了:)

  3。login

  關於login我不想多說了,關鍵在於/lib裡面的庫文件,不可多刪,當然,為了系統盡可能的小,也一定不要少刪啊。。

  多用戶登陸的話,需要更改/etc/inittab,詳細的參考busybox的文檔吧

  最後總結一下rcS這個文件吧:

  rcS:

  /bin/fsck ????(參數自己找找吧,不懂的話看看rc.sysinit)

  /sbin/umount -a

  /sbin/mount -a

  /sbin/mount -t ext3 remount rw /

  /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/lib/crc32.o

  /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/mii.o

  /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/8139too.so

  /sbin/ifconfig eth0 192.168.0.253 netmask 255.255.255.0

  /sbin/route default gw 192.168.0.1

  參考資料:

  www.linuxjournal.com/article.PHP?sid=4335

  www.linuxjournal.com/article.php?sid=4395

  www.linuxjournal.com/article.php?sid=4528

  感謝樓主,您的貼子非常好

  我這裡再貼一個編譯內核的技巧

  QUOTE:

  1. Code maturity level options

  代碼成熟等級。此處只有一項:prompt for development and/or incomplete code/drivers,如果你要試驗現在仍處於實驗階段的功能,比如khttpd、IPv6等,就必須把該項選擇為Y了;否則可以把它選擇為N。

  2. Loadable module support

  對模塊的支持。這裡面有三項:

  Enable loadable module support:除非你准備把所有需要的內容都編譯到內核裡面,否則該項應該是必選的。

  Set version information on all module symbols:可以不選它。

  Kernel module loader:讓內核在啟動時有自己裝入必需模塊的能力,建議選上。

  3. Processor type and features

  CPU類型。內容蠻多的,不一一介紹了,有關的幾個如下:

  Processor family:根據你自己的情況選擇CPU類型。

  High Memory Support:大容量內存的支持。可以支持到4G、64G,一般可以不選。

  Math emulation:協處理器仿真。協處理器是在386時代的寵兒,現在早已不用了。

  MTTR support:MTTR支持。可不選。

  Symmetric multi-processing support:對稱多處理支持。除非你富到有多個CPU,否則就不用選了。

  4. General setup

  這裡是對最普通的一些屬性進行設置。這部分內容非常多,一般使用缺省設置就可以了。下面介紹一下經常使用的一些選項:



  Networking support:網絡支持。必須,沒有網卡也建議你選上。

  PCI support:PCI支持。如果使用了PCI的卡,當然必選。

  PCI Access mode:PCI存取模式。可供選擇的有BIOS、Direct和Any,選Any吧。

  Support for hot-pluggabel devices:熱插拔設備支持。支持的不是太好,可不選。

  PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必選了。

  System V IPC

  BSD Process Accounting

  Sysctl support:以上三項是有關進程處理/IPC調用的,主要就是System V和BSD兩種風格。如果你不是使用BSD,就按照缺省吧。

  Power Management support:電源管理支持。

  Advanced Power Management BIOS support:高級電源管理BIOD支持。

  5. Memory Technology Device(MTD)

  MTD設備支持。可不選。

  6. Parallel port support

  串口支持。如果不打算使用串口,就別選了。

  7. Plug and Play configuration

  即插即用支持。雖然Linux對即插即用目前支持的不如Windows好,但是還是選上吧,這樣你可以拔下鼠標之類的體驗一下Linux下即插即用的感覺。

  8. Block devices

  塊設備支持。這個就得針對自己的情況來選了,簡單說明一下吧:

  Normal PC floppy disk support:普通PC軟盤支持。這個應該必選。

  XT hard disk support:

  Compaq SMART2 support:

  Mulex DAC960/DAC1100 PCI RAID Controller support:RAID鏡像用的。

  Loopback device support:

  Network block device support:網絡塊設備支持。如果想訪問網上鄰居的東西,就選上。

  Logical volume manager(LVM)support:邏輯卷管理支持。

  Multiple devices driver support:多設備驅動支持。

  RAM disk support:RAM盤支持。

  9. Networking options

  網絡選項。這裡配置的是網絡協議。內容太多了,不一一介紹了,自己看吧,如果你對網絡協議有所了解的話,應該可以看懂的。如果懶得看,使用缺省選項(肯定要選中TCP/IP networking哦)就可以了。讓我們看看,TCP/IP、ATM、IPX、DECnet、Appletalk……支持的協議好多哦,IPv6也支持了,Qos and/or fair queueing(服務質量公平調度)也支持了,還有kHTTPd,不過這些都還在實驗階段。

  10. Telephony Support

  電話支持。這個是什麼東東?讓我查查幫助,原來是Linux下可以支持電話卡,這樣你就可以在IP上使用普通的電話提供語音服務了。記住,電話卡可和modem沒有任何關系哦。

  11. ATA/IDE/MFM/RLL support

  這個是有關各種接口的硬盤/光驅/磁帶/軟盤支持的,內容太多了,使用缺省的選項吧,如果你使用了比較特殊的設備,比如PCMCIA等,就到裡面自己找相應的選項吧。

  12. SCSI support

  SCSI設備的支持。我沒有SCSI的設備,所以根本就不用選,如果你用了SCSI的硬盤/光驅/磁帶等設備,自己找好了。

更多的請看:http://www.QQread.com/windows/2003/index.Html

  13. IEEE 1394(FireWire)support

  這個是什麼?低版本的沒有見過,看看幫助再說。原來是要Fireware硬件來提高串行總線的性能,我沒有,不選了。

  14. I2O device support

  這個也不清楚,幫助裡說是這個需要I2O接口適配器才能支持的,在智能Input/Output(I2O)體系接口中使用,又是要硬件,不選了。

  15. Network device support

  網絡設備支持。上面選好協議了,現在該選設備了,可想而知,內容肯定多得很。還好還好,裡面大概分類了,有ARCnet設備、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support幾大類。我用的是10/100M的以太網,看來只需要選則這個了。還是10/100M的以太網設備熟悉,內容雖然多,一眼就可以看到我所用的RealTeck RTL-8139 PCI Fast Ethernet Adapter support,為了免得麻煩,編譯到內核裡面好了,不選M了,選Y。耐心點,一般說來你都能找到自己用的網卡。如果沒有,你只好自己到廠商那裡去要驅動了。

  16. Amateur Radio support

  又一個不懂的,應該是配置業余無線廣播的吧,沒有,不要了。



  17. IrDA(infrared)support

  這個要紅外支持,免了。

  18. ISDN subsystem

  如果你使用ISDN上網,這個就必不可少了。自己看著辦好了。

  19. Old CD-ROM drivers(not SCSI、not IDE)

  做的可真周到,原來那些非SCSI/IDE口的光驅誰還在用啊,自己選吧,反正我是用的IDE的CD-ROM,不選這個。

  20. Character devices

  字符設備。這個內容又太多了,先使用缺省設置,需要的話自己就修改。把大類介紹一下吧:

  I2C support:I2C是Philips極力推動的微控制應用中使用的低速串行總線協議。如果你要選擇下面的Video For Linux,該項必選。

  Mice:鼠標。現在可以支持總線、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad,自己根據需要選擇。

  Joysticks:手柄。即使在Linux下把手柄驅動起來意義也不是太大,游戲太少了。

  Watchdog Cards:雖然稱為Cards,這個可以用純軟件來實現,當然也有硬件的。如果你把這個選中,那麼就會在你的/dev下創建一個名為watchdog的文件,它可以記錄你的系統的運行情況,一直到系統重新啟動的1分鐘左右。有了這個文件,你就可以恢復系統到重啟前的狀態了。

  Video For Linux:支持有關的音頻/視頻卡。

  Ftape, the floppy tape device driver:

  PCMCIA character device support:

  21. File systems

  文件系統。內容又太多了,老法子,在缺省選項的基礎上進行修改。介紹以下幾項:

  Quota support:Quota可以限制每個用戶可以使用的硬盤空間的上限,在多用戶共同使用一台主機的情況中十分有效。

  DOS FAT fs support:DOS FAT文件格式的支持,可以支持FAT16、FAT32。

  ISO 9660 CD-ROM file system support:光盤使用的就是ISO 9660的文件格式。

  NTFS file system support:ntfs是NT使用的文件格式。

  /proc file system support:/proc文件系統是Linux提供給用戶和系統進行交互的通道,建議選上,否則有些功能沒法正確執行。

  還有另外三個大類都規到這兒了:Network File Systems(網絡文件系統)、Partition Types(分區類型)、Native Language Support(本地語言支持)。值得一提的是Network File Systems裡面的兩種:NFS和SMB分別是Linux和Windows相互以網絡鄰居的形式訪問對方所使用的文件系統,根據需要加以選擇。

  22. Console drivers

  控制台驅動。一般使用VGA text console就可以了,標准的80*25的文本控制台。

  23. Sound

  聲卡驅動。如果你能在列表中找到聲卡驅動那自然最好,否則就試試OSS了。

  24. USB supprot

  USB支持。很多USB設備,比如鼠標、調制解調器、打印機、掃描儀等,在Linux都可以得到支持,根據需要自行選擇。

  25. Kernel hacking

  配置了這個,即使在系統崩潰時,你也可以進行一定的工作了。普通用戶是用不著這個功能的。

  對了,你還是把“我省去了制作啟動盤的過程,這個網上可以大把大把的抓!”也加上的好,這樣更有利於其他人的學習

  制作啟動盤的過成實際上是在一個空空的硬盤或軟盤上加上啟動信息的過程,針對linux或unix來講,也就是增加lilo啟動信息的過程,從而使得我們轉移到本硬盤的內核能夠啟動,進一步能夠執行linux其他的一些必要的系統初始程序...

  啟動盤的制作過程可以搜索關鍵字:"制作軟盤linux" 或"tiny linux"

  或這個url: (http://www.google.com/search?hl=zh-CN&q=%E5%88%B6%E4%BD%9C%E8%BD%AF%E7%9B%98%E5%90%AF%E5%8A%A8%E7%9A%84linux&lr= )

  如果你裁減的linux是在硬盤上的話,可以這樣:

  1,准備兩塊硬盤A B,分別安裝好linux.

  2,講其中A上linux重新編譯內核,盡量做到最小且滿足您的需要,並設置好lilo或grub,保證編譯好的內核能夠啟動起來.

  3,在機器上掛載硬盤B且是B成為主硬盤,保證啟動時候啟動B上的linux系統,再將A掛在機器上,保證A是B的從盤.

  4,啟動linux,進入B硬盤上的系統

  5,在B硬盤上編譯好busybox.(如1樓貼中所述)

  6,刪除硬盤A中的/bin /sbin 和/lib目錄中的一些其他的少用的庫文件(這個需要大家自己嘗試,我沒有做具體的記錄)用硬盤B上編譯好的busybox中的/usr /bin /sbin /etc拷貝到A盤的相應分區上面..

  7,去掉B盤,使A盤做主盤(保證A是主盤的同時,還要保證類似grub中"/dev/da0 /dev/da1"這樣的參數正確,如果啟動時後找不到內核,問題一般出在這裡,一個比較穩妥的方法是兩塊硬盤完全相同,且保證A B分別做主盤時硬盤跳線都一樣,接到主板的數據線都一樣)..

  8,如果此時A盤不能啟動,請大家聯系我....



  9,如果A盤能夠啟動,從新用B做主盤,A做從盤,參照主貼中的描述完善A盤中的文件,主要是不需要的函數庫的清理和網絡功能,及文件系統功能的完善...

  10,完善好以後,可以將A盤做成Ghost,然後直接ghost到軟盤/CF盤/其他硬盤上...

  11,登陸功能的完善,這個很討厭(個人覺得),大家刪除/lib下面的庫的時候一定要小心,如一下加密的庫,如pam的庫,libc的庫等...(有興趣可以查看linux登陸過程的相關介紹,我看過,但是早就忘了)

  注:在我確定這個思路以後,裁減時間一共用了1天的時間(此前用其他方案做了一個星期沒有完成),大約50次拆/裝硬盤...希望大家在制作的過程中不要怕麻煩..

原文鏈接:http://www.cublog.cn/u/11176/showart_137695.html



  還有另外三個大類都規到這兒了:Network File Systems(網絡文件系統)、Partition Types(分區類型)、Native Language Support(本地語言支持)。值得一提的是Network File Systems裡面的兩種:NFS和SMB分別是Linux和Windows相互以網絡鄰居的形式訪問對方所使用的文件系統,根據需要加以選擇。

  22. Console drivers

  控制台驅動。一般使用VGA text console就可以了,標准的80*25的文本控制台。

  23. Sound

  聲卡驅動。如果你能在列表中找到聲卡驅動那自然最好,否則就試試OSS了。

  24. USB supprot

  USB支持。很多USB設備,比如鼠標、調制解調器、打印機、掃描儀等,在Linux都可以得到支持,根據需要自行選擇。

  25. Kernel hacking

  配置了這個,即使在系統崩潰時,你也可以進行一定的工作了。普通用戶是用不著這個功能的。

  對了,你還是把“我省去了制作啟動盤的過程,這個網上可以大把大把的抓!”也加上的好,這樣更有利於其他人的學習

  制作啟動盤的過成實際上是在一個空空的硬盤或軟盤上加上啟動信息的過程,針對linux或unix來講,也就是增加lilo啟動信息的過程,從而使得我們轉移到本硬盤的內核能夠啟動,進一步能夠執行linux其他的一些必要的系統初始程序...

  啟動盤的制作過程可以搜索關鍵字:"制作軟盤linux" 或"tiny linux"

  或這個url: (http://www.google.com/search?hl=zh-CN&q=%E5%88%B6%E4%BD%9C%E8%BD%AF%E7%9B%98%E5%90%AF%E5%8A%A8%E7%9A%84linux&lr= )

  如果你裁減的linux是在硬盤上的話,可以這樣:

  1,准備兩塊硬盤A B,分別安裝好linux.

  2,講其中A上linux重新編譯內核,盡量做到最小且滿足您的需要,並設置好lilo或grub,保證編譯好的內核能夠啟動起來.

  3,在機器上掛載硬盤B且是B成為主硬盤,保證啟動時候啟動B上的linux系統,再將A掛在機器上,保證A是B的從盤.

  4,啟動linux,進入B硬盤上的系統

  5,在B硬盤上編譯好busybox.(如1樓貼中所述)

  6,刪除硬盤A中的/bin /sbin 和/lib目錄中的一些其他的少用的庫文件(這個需要大家自己嘗試,我沒有做具體的記錄)用硬盤B上編譯好的busybox中的/usr /bin /sbin /etc拷貝到A盤的相應分區上面..

  7,去掉B盤,使A盤做主盤(保證A是主盤的同時,還要保證類似grub中"/dev/da0 /dev/da1"這樣的參數正確,如果啟動時後找不到內核,問題一般出在這裡,一個比較穩妥的方法是兩塊硬盤完全相同,且保證A B分別做主盤時硬盤跳線都一樣,接到主板的數據線都一樣)..

  8,如果此時A盤不能啟動,請大家聯系我....

  9,如果A盤能夠啟動,從新用B做主盤,A做從盤,參照主貼中的描述完善A盤中的文件,主要是不需要的函數庫的清理和網絡功能,及文件系統功能的完善...

  10,完善好以後,可以將A盤做成Ghost,然後直接ghost到軟盤/CF盤/其他硬盤上...

  11,登陸功能的完善,這個很討厭(個人覺得),大家刪除/lib下面的庫的時候一定要小心,如一下加密的庫,如pam的庫,libc的庫等...(有興趣可以查看linux登陸過程的相關介紹,我看過,但是早就忘了)

  注:在我確定這個思路以後,裁減時間一共用了1天的時間(此前用其他方案做了一個星期沒有完成),大約50次拆/裝硬盤...希望大家在制作的過程中不要怕麻煩..

原文鏈接:http://www.cublog.cn/u/11176/showart_137695.html


right">



Copyright © Linux教程網 All Rights Reserved