經過grub-install命令把grub安裝到u盤javascript
④這個時候。你會發現,你的u盤。已經多了一個boot文件夾,裏面有一些內容,這個時候,boot文件夾的路徑是/dev/sdb3/boot/。
⑤把「/boot/grub/grub.conf」和「/boot/grub/splash.xpm.gz」。拷貝到「/dev/sdb3/boot/grub/」如下(也就是「u盤/boot/grub/」)。
⑥而後把/dev/sdb3/boot/grub/grub.conf改動成如下內容:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:
#
#
#
#
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Red Hat Enterprise Linux Server 1280*1024(3.4.0)
root (hd0,0)
kernel /boot/vmlinuz-3.4.0 root=/dev/sda1 selinux=0 init=/sbin/init vga=795 fb:on
initrd /boot/initrd.img-3.4.0java
set default=0 set timeout=5 set gfxmode=1280x1024 menuentry 'Red Hat Enterprise Linux Server 1280*1024(3.4.0)' { set gfxpayload=1280x1024x32,1024x768x32,800x600x32,800x600x16,800x600,640x480 linux /boot/vmlinuz-3.4.0 root=/dev/sda1 selinux=0 init=/sbin/init vga=795 initrd /boot/initrd.img-3.4.0 }
製做步驟:linux
先用cfdisk 在U盤中,建立個兩個分區,第二個一下子做爲boot分區。ubuntu
本身改動一下menu.lst文件吧。這個簡單。
****************************************************************************
以上全部推翻重寫。windows
需要懂得理論上的知識,才幹作出正確的結果。
****************************************************************************
首先理解引導中U盤引導部分的過程。
1:當BISO通電引導到磁盤時。會檢查MBR區域(MBR:446+DPT:64+ENDFLAG:2=512)
MBR裏面必須存在引導程序,通常會是咱們熟悉grub,dos,95dos引導等。不然沒法引導。
這裏作個簡要說明:尋常咱們將系統安裝硬盤上,一般安裝都是安裝windows,再安裝linux,而一般當安裝linux時。會提示你是否安裝到MBR裏面,或者安裝到你的某個磁盤分區裏面,通常是你的/boot的所在分區。centos
win沒有爲其餘系統考慮過。到了本身的磁盤分區以後。對於引導其餘系統,沒有提供可以直接引導的命令。僅僅能進入後改動它的boot.ini文件。而grub提供命令命令菜單,可以進行手工引導。網絡
2:grub的製做
筆者發現win僅僅能本身主動識別出U盤的第一個分區,而對於第二個分區無動於衷。模塊化
因此作了這種分區方案。post
第一個分區用來存儲數據。第二個分區用來放置引導信息,這樣不至於在使用過程當中。本身建立的grub的boot分區,被別人勿刪除,或者格式化。this
個人1G U盤分區例如如下:
) 用於存儲引導文件。
運行命令
mount /dev/sdc5 /tmp/boot
grub-install --root-directory=/tmp/boot --no-floppy
此處腳下留神。必須講grub安裝到/dev/sdc,不然眼下對於U盤的MBR來說。沒有可以用的引導程序。
此命令運行後,會在/tmp/boot/文件夾。也就是/dev/sdc5,如下產生文件夾/boot/grub.裏面有*stage*等文件。
最後在/boot/grub 文件夾中創建menu.lst文件。
文件內容例如如下:
timeout
default
講一下。假設你用U盤引導後,他會把本身標記爲hd0。
而已經安裝在硬盤上的win操做系統以爲本身的宿主硬盤是hd0。此時引導win操做系統時就會形成盤符錯位。
所以咱們需要用map進行一下映射轉換。
map 的解釋及使用例如如下:
map TO_DRIVE
映射 驅動器FROM_DRIVE 到TO_DRIVE.
當你鏈式引導向dos同樣的操做系統。並且該系統沒有在第一個驅動器上時,必須進行該映射。
that's Ok!
****************************************************************************
隨着個人使用的越發頻繁。menu.lst上面的內容多了起來。
****************************************************************************
如下分享一下。裏面的內容。首先是文件夾結構。
如下是menu.lst的內容。
注意:
1:成功的關鍵是MBR的內容。可以用dd if=/dev/sdc of=/tmp/mbr.bin bs=446 count=1 提取 出。
hexdump -C/tmp/mbr.bin 查看
2:有時候MBR會有問題。
用這個命令清零吧。
系 統:虛擬機RHEL6.4(2.6.32)
裁剪內核:linux-2.6.34
在虛擬機+虛擬硬盤、945主板+USB,均引導內核成功,系統未做複雜裁剪,未做壓縮鏡像
1. linux內核編譯:
詳細步驟:
# tar zxvf linux-2.6.tar.gz -C /usr/src
# cd /usr/src/linux2.6
# make menuconfig
# make
# make modules_install
# cp arch/x86/boot/bzImage /boot/vmlinuz-2.6
# make install
對照/boot/grub/grub.cfg文件的改動
2. 安裝啓動盤(U盤、硬盤)
# Fdisk /dev/sdb
#mkfs.ext2 /dev/sdb1
# mkdir /tmp/boot ; mount /dev/sdb1/tmp/boot
# grub-install--root-directory=/tmp/boot --no-floppy /dev/sdb
# cp /boot/grub/grub.conf /tmp/boot/boot/grub/
# cp /boot/grub//boot/grub/splash.xpm.gz /tmp/boot/boot/grub/
# cp /boot/vmlinuz-2.6.34/mnt/boot/vmlinuz
# cp /boot/initramfs-2.6.34.img/mnt/boot/initramfs.img
3. 構建系統文件夾
# mkdir dev proc etc sbin bin lib mntusr
# cp /bin /tmp/boot/
# cp –dpr /dev/{console,fd0.hda,hda8,hda9,hda10,initctl,initrd,kmem,mem,null,ram,ram0,ramdisj,sda,tty1,tty} /tmp/boot/
# cp/etc/{default,ld.so.cache,ld.so.conf,login.defs,fstab,groub,init.d,inittab,issue,modules.conf,mtab,nsswitch.conf,pam.d,profile,rc.d} /tmp/boot/
4. 編輯grub.conf
Default爲默認啓動項
Grub2 grub.cfg
set default=0
set timeout=5
set gfxmode=1280x1024
menuentry 'Red Hat EnterpriseLinux Server 1280*1024(3.4.0)' {
setgfxpayload=1280x1024x32,1024x768x32,800x600x32,800x600x16,800x600,640x480
linux/boot/vmlinuz-3.4.0 root=/dev/sda1selinux=0 init=/sbin/init vga=795
initrd/boot/initrd.img-3.4.0
}
5. 加入必要的命令
好比:ls
Ldd ls,加入相應的依賴庫文件;ldd ls > 1.txt
6. 改動initrd
又一次編譯內核後,可能加入了本身定義的模塊。就有可能需要改動init文件。而init文件就在initrd中,這裏記錄下操做步驟,以防遺忘。
1. cp /boot/initrd-3.2.img /tmp/mylinux/initrd-3.2.img.gz
這裏之因此進行更名。是因爲initrd-3.2.img是通過gzip壓縮過的,因此需要對其解壓,但是gzip對解壓的文件的文件後綴名又有要求。因此就先進行更名。
2. gunzip initrd-3.2.9.img.gz
3. cpio -id < initrd-3.2.9.img
通過以上三步,就在當前文件夾下解壓了initrd文件。從而獲得了init文件。
依據本身的需求改動init文件後。經過如下命令又一次生成initrd文件。
4. find . | cpio -H newc -o | gzip -9 > /boot/initrd-3.2.9.img
find . | cpio -H newc -o | gzip -9>../initrd.img-3.4.0
7. 內核加入fb0
mknod /dev/fb0 c 29 0
Device Drivers --->
Graphics support --->
<*> Support for frame buffer devices--->
318 31b 35a
1024 1280 1600
8. 加入網絡驅動
# initrd,img/init
echo "0: linuxrunning on initrd.img"
echo "1: linuxrunning on usb ext2 filesystem"
read -p "select:" data
if [ $data ="0" ]; then
echo "0: linux running oninitrd.img selected"
uname -r
insmod lib/modules/3.4.0/kernel/drivers/net/mii.ko
insmod lib/modules/3.4.0/kernel/drivers/net/ethernet/realtek/r8169.ko#加入網絡
insmod lib//modules/3.4.0/kernel/drivers/usb/storage/usb-storage.ko#加入USB
sleep 1
mkdir usb
mount /dev/sda1usb
ifconfig -a
ifconfig eth0192.168.1.88
sleep 1
sh
else
echo "1: linux running on usb ext2filesystem selected"
sleep 1
fi