制作自己的Linux发行版–实践篇(4)

使用loopback设备来制作启动盘。

#创建一个4M的文件
xuyang@ubuntu15:/tmp$ dd if=/dev/zero of=/tmp/fsfile bs=1k count=4096
记录了4096+0 的读入
记录了4096+0 的写出
4194304字节(4.2 MB)已复制,0.0222274 秒,189 MB/秒

#4096 = 4M
xuyang@ubuntu15:/tmp$ lt -lh fsfile 
-rw-rw-r-- 1 xuyang xuyang 4.0M  4月  1 13:49 fsfile

#创建文件系统
xuyang@ubuntu15:/tmp$ mke2fs /tmp/fsfile
mke2fs 1.42.12 (29-Aug-2014)
Discarding device blocks: 完成                            
Creating filesystem with 4096 1k blocks and 1024 inodes

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Writing superblocks and filesystem accounting information: 完成

#挂载
xuyang@ubuntu15:/tmp$ sudo mount -t ext2 /tmp/fsfile /mnt
xuyang@ubuntu15:/tmp$ ls /mnt
lost+found
xuyang@ubuntu15:/tmp$ sudo mount -l  | grep fsfile
/tmp/fsfile on /mnt type ext2 (rw,relatime)


#安装grub2到这个设备
#各种失败...

换一种方法:

利用grub2直接制作启动盘

制作grub2启动盘:参考文档

xuyang@ubuntu15:~$ grub-mkrescue -o grub.iso
grub-mkrescue: warning: Your xorriso doesn't support `--grub2-boot-info'. Some features are disabled. Please use xorriso 1.2.9 or later..
xuyang@ubuntu15:~$ xorriso
程序“xorriso”尚未安装。 您可以使用以下命令安装:
sudo apt-get install xorriso
xuyang@ubuntu15:~$ sudo apt-get install xorriso
...

xuyang@ubuntu15:~$ grub-mkrescue -o grub.iso
xorriso 1.3.2 : RockRidge filesystem manipulator, libburnia project.

Drive current: -outdev 'stdio:grub.iso'
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 60.1g free
Added to ISO image: directory '/'='/tmp/grub.kdUIeO'
xorriso : UPDATE : 281 files added in 1 seconds
xorriso : UPDATE : 281 files added in 1 seconds
xorriso : NOTE : Copying to System Area: 512 bytes from file '/usr/lib/grub/i386-pc/boot_hybrid.img'
xorriso : UPDATE :  100.00% done
ISO image produced: 2492 sectors
Written to medium : 2492 sectors at LBA 0
Writing to 'stdio:grub.iso' completed successfully.

#这样就生成了grub.iso

然后就可以使用这个grub.iso来进行系统启动了。 启动之后,进入grub命令行

要创建一个包含更多其他内容的启动盘可以这样

#创建一个目录
$ mkdir iso

#创建 GRUB目录:
$ mkdir -p iso/boot/grub

#可以在iso/boot/grub下设置grub.cfg, 并拷贝其他的文件和目录到iso/目录下

#然后,制作iso
$ grub-mkrescue -o grub.iso iso

#这样将生成一个可启动的grub.iso

在可启动光盘中包含linux内核和内存映像文件,

xuyang@ubuntu15:~/iso/boot$ ls -F
grub/  initrd.img-4.2.0-16-generic  vmlinuz-4.2.0-16-generic

然后在制作一个iso,比如叫grub1.iso , 然后以这个iso启动,在进入grub之后,使用linuxinitrd指定内核和内存映像文件,然后就可以boot进入系统了

grub>linux /boot/vmlinuz-4.2.0-16-generic
grub>initrd /boot/initrd.img-4.2.0-16-generic
grub>boot

这样linux系统就已经起来了。

查看ubuntu的启动盘

把ubuntu15.10的光盘镜像挂载,然后查看

sudo mount ./xxx.iso /mnt
#进入到grub目录,查看grub.cfg
xuyang@ubuntu15:~/uu/boot/grub$ cat grub.cfg 

if loadfont /boot/grub/font.pf2 ; then
    set gfxmode=auto
    insmod efi_gop
    insmod efi_uga
    insmod gfxterm
    terminal_output gfxterm
fi

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry "Try Ubuntu without installing" {
    set gfxpayload=keep
    linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash ---
    initrd  /casper/initrd.lz
}
menuentry "Install Ubuntu" {
    set gfxpayload=keep
    linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity quiet splash ---
    initrd  /casper/initrd.lz
}
menuentry "OEM install (for manufacturers)" {
    set gfxpayload=keep
    linux   /casper/vmlinuz.efi  file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity quiet splash oem-config/enable=true ---
    initrd  /casper/initrd.lz
}
menuentry "Check disc for defects" {
    set gfxpayload=keep
    linux   /casper/vmlinuz.efi  boot=casper integrity-check quiet splash ---
    initrd  /casper/initrd.lz
}

通过查看这个文件,可以清楚的看到,该系统使用的内核是/casper/vmlinuz.efi, 光盘映像文件使用的是/casper/initrd.lz .

其中试用和安装ubuntu的区别在与传给内核的参数不一样。 安装的参数多了一个only-ubiquity,因此,安装系统的代码应该在内核里面。因此这里需要去看看内核的代码,至少需要了解这几个参数是什么意思?



本文地址: http://www.bagualu.net/wordpress/archives/6248 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注