歡迎您光臨本站 註冊首頁

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

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0
最近在學習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/shecho "*********************************************************"
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
Empire CMS,phome.net
# 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.

本文出自 「編程者的心事!!」 博客,請務必保留此出處http://zhuyi108.blog.51cto.com/2087327/845246



[火星人 ] 製作一個linux的u盤最小系統已經有732次圍觀

http://coctec.com/docs/linux/show-post-45781.html