製作一個linux的u盤最小系統

最近在學習linux了,爲了瞭解linux系統的機制,花了一個月時間研究,走了很多彎路,看了很多老資料終於做成功了,現在看起來真簡單的一個東西竟然花了那麼長時間去做真是浪費生命啊!閒話少說,爲了繼承linux系統的精神,讓我純手打記錄一下製作過程,供後來者參考吧!!
主機環境:ubuntu 11.04 (我用XP下的的虛擬機)
u盤:      金士頓 2G   (用不了那麼多,U盤現在都大)
下載內容:最新內核linux-3.3
         最新制作內核文件工具: busybox-1.9.2

過程如下:

1.u盤分區
1)將優盤分成3個區,兩個主分區,一個擴展分區。
用到的終端命令是fdisk 
fdisk  /dev/sdb 進入u盤操作
                      -p查看分區
                      -d刪除分區
                      -n創建分區
                      -a激活分區
                      -w保存分區表並退出
                      -q退出不保存分區表
這些都是我用到的命令。
至於分區的大小,就隨意了,你看着那個block自己劃分吧,錯了也沒關係,回到上面繼續改就是了。
2)格式化分區
先卸載u盤上的所有分區才能格式化的。
mkfs.ext2 /dev/sdb1 格式化你的主分區
mkfs.vfat /dev/sdb3 格式化你的擴展分區
你可也用df -lh查看你的mount關係。
2.grub/grub2安裝
先要把安裝的分區掛載在一個地方纔能安裝成功的,這是我試了好多次,失敗了好多次才知道的。
mount /dev/sdb1 /tmp
grub-install --root-directory=/tmp/boot /dev/sdb
將grub安裝到/dev/sdb u盤的mbr上 
這個時候你會發現在你的/dev/sdb1分區下出現一個boot目錄,裏面有grub目錄和很多文件。
3)在系統根目錄下/boot/grub/下將grub.cfg拷貝到你的U盤分區/boot/grub下面吧,進去修改grub.cfg就可以啓動u盤了。
只修改兩個地方就行了,一個是UUID,一個是root。
至於uuid你把u盤插拔一下,用df查看你的分區掛載在哪個上面的uuid,複製下來修改。
至於root,你用u盤啓動,進入grub命令行,用ls命令查看一下,哪個盤符下面有個boot目錄,哪個盤符就是你的分區,記住它,出去改一下root裏面的名字就行了。
我的是(hd0,msdos1),記住進grub命令行查看時後面要加/的,不然報錯。
3.製作kernel內核
網上其實有很多,每個版本大體都相同。
下載後,用tar jxvf 命令解壓。tar jxvf linux3.3 tar.bz2
進入linux-3.3 然後執行4部曲;
   1是make mrproper
   2是make menuconfig  進入菜單選擇兩項,
    一個是General Setup –> Initial RAM filesystem and RAM disk support
    另一個是 Device Drivers –> Block Devices –> RAM block device  support
     其他默認就好。
     3是make.
     4是make modules
完了後進入linux-3.3/arch/X86/boot/bzImage ,拷貝bzImage 到你的boot目錄下。
4.製作文件系統initrd.img
1)解壓文件製作工具tar jxvf busybox-1.9.2.tar.bz2
進入解壓文件目錄busybox-1.9.2.跟kernel差不多,就少第壹步。
    1.make menuconfig  與kernel編譯一樣也有要注意的兩項:第一個是
Busybox Settings –> Build Options –> Build Busybox as a static binary第二個是Installation Options–>Don't use /usr 其他默認就好。
   2.make
   3.make install
編譯好的文件放在_install 中。
2) 創建目錄文件
  mkdir rootfs
將_install目錄裏面的文件全部拷入rootfs裏面。然後在rootfs下 mkdir etc,proc dev目錄,隨意創建幾個tmp ,var,home目錄就好了。
  拷貝系統根目錄/dev下的 這幾個文件,console,null,zero,tty也可以將ram和tty系列都拷過來。
  建立etc目錄下的文件。直接從編譯好的busybox文件裏面拷貝到你的rootfs裏面的etc中去,cp -r busybox-1.9.2/examples/bootfloopy/etc/*  ~/rootfs/etc
3)文件修改
要修改的文件時etc下面的,inittab,fstab,init.d/rcS, profile這幾個文件。
修改inittab文件:
::sysinit:/etc/init.d/rcS
::respawn:/bin/sh


修改fstab 文件 :
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0

修改/init/rcS文件:
#! /bin/sh
echo "*********************************************************"
echo " linux u pan  system "
echo " Love Linux ! "
echo "********************************************************"
修改 profile文件:
# Set user path
echo "Set user path in /etc/profile"
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
# Set PS1
echo "Set PS1 in /etc/profile"
export PS1="[\u@\h \W]# "
echo "Done"
echo
怎麼修改不要我說了吧,sudo  gedit ~~~!!
4)製作initrd.img
在rootfs目錄上,
dd if=/dev/zero of=/tmp/disk bs=1M count=10
mkfs.ext2 -m0 /tmp/disk
mkdir /mnt/ram
mount -o loop /tmp/disk /mnt/ram
cp -R rootfs/* /mnt/ram
umount /mnt/ram
dd if=/tmp/disk of=initrd.img
這樣在rootfs目錄邊上是不是有個initrd.img文件了。
然後把initrd.img拷貝到你的boot目錄下。
4,總結,到此,整個系統已經做好了,在你的u盤分區上boot目錄下有grub bzImage initrd.img。好了,重啓系統,從優盤進入,發現是不是已經進入了你的最小系統了,哈哈,忘了說了,把你grub.cfg上面那些多餘的啓動項刪除就不用手動進你的系統了。
好累啊,終於碼完了。感謝我吧!
如果還有任何疑問可以問我,當然你可以百度 ,goole。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章