本文档是在virtualbox5.1.30和ubuntu14.04下制作的。目的是了解系统的启动过程。1、新建虚拟机(名称:linux,类型:Linux,版本:Ubuntu(64bit))除虚拟硬盘大小设置2G外,其他选项默认即可。2、在已经安装了ubuntu的虚拟机中添加上述虚拟硬盘。首先在安装好的ubuntu上选择Settings->Storage->Controller:SATA->Addvirtualharddisk。找到第1步创建的虚拟硬盘。结果如图:3.启动安装好的ubuntu。对虚拟硬盘进行分区。/dev/sdb为步骤1中的虚拟硬盘。分区命令:sudofdisk/dev/sdb创建主分区:4.为虚拟硬盘安装grubboot。A。将/dev/sdb1格式化为ext4文件系统。如图所示:b.将/dev/sdb1挂载到/mnt。命令:sudomount-text4/dev/sdb1/mnt/c。安装grub.5。添加grub.cfg最简单的方法是将ubuntu虚拟机上的/boot/grub/grub.cfg复制到/mnt/boot/grub/,然后修改.a。修改所有uuid,将原来的uuid替换成图中的uuid(sdb1)(每个分区都有唯一的uuid)。b.如图所示修改第147、165和182行。6.复制vmlinux和ramdisk。命令如图:7.自己写一个init程序,测试内核是否可以启动。代码如图:(文件名mian.c)编译命令:gcc-staticmain.c-oinit,然后将init复制到/mnt.8。在/mnt、sys、dev三个文件夹下创建proc,/mnt内容如下:9、启动linux虚拟机,如图所示,说明kernel和init运行成功。10.复制sh和ls命令程序和动态库。(可以多复制一些命令)注意:这里不能用ubuntu系统的bash作为init进程,sh其实就是dasha。首先在/mnt下创建bin、lib/x86_64-linux-gnu、lib64文件夹。b.sudocp/bin/sh/bin/ls./bin/c.查看sh和ls需要的动态库,如下:d.将步骤c中的动态库复制到lib/x86_64-linux-gnu和lib64中。结果如图:11.启动linux虚拟机,启动前修改grub.cfg的init=/bin/sh,或者启动时修改。结果如下:
