您的位置:首页 > 其它

操作系统课程记录(2)————制作grub启动盘(1)

2017-03-18 15:41 183 查看

下载qemu模拟器

sudo apt-get install qemu


qemu是linux下的通用的,开放源码的机器模拟器和虚拟器。可以模拟多种架构下的系统。一般qemu命令不能直接使用,需要指定需要模拟的架构。这里我们使用
qemu-system-i386


下载linux内核

linux内核在https://www.kernel.org/就可以下载到。国内的服务的话,中科大的镜像站很丰富的软件资源。当然,搜索厦门大学镜像站,清华大学镜像站什么的(不一定有,我没试过),都可以搜索到。中科大的下载地址在

http://mirrors.ustc.edu.cn/kernel.org/linux/kernel/

可以下载到。在里面选择自己的想要的版本就行了。我用的是linux-3.10.98,操作系统是Ubuntu16.10,32位版本的。(下面有些操作在64位下会出现问题,当然也不是不能解决)。

下载之后通过

tar -xzvf fileName.tar.gz


解压得到源码目录

下面就来编译linux源码,假设解压得到的linux的源码目录是
~/Downloads/linux-3.10.98
,于是采用i386的缺省编译:

cd  ~/Downloads/linux-3.10.98
make i386_defconfig
make


make的过程可能会比较久。(据说make加上 -j num,其中num是你电脑的内核数目,会比较快。然而我下载了一个linux-4的源码,make跟make -j num没什么区别。)

准备一个应用程序

为什么需要准备应用程序以及接下来的操作是为什么,等以后我再补充吧,因为我也不是很懂。选择你喜欢的文本编辑器写一个helloworld.c程序在~目录下。

#include <stdio.h>
int main()
{
printf("hello world!\n");
while(1);
return 0;
}


然后编译,注意gcc 的参数:

cd ~
gcc -static -m32 helloworld.c -o hello


如果你是32位的系统,理应是没有问题的。如果你是64位的系统,可能因为-m32的缘故导致编译出错,在gcc之前你需要下载编译32位程序需要的库:

sudo apt-get install build-essential module-assistant
sudo apt-get install gcc-multilib g++-multilib


然后你在~目录下就得到了一个hello可执行程序。

准备文件

cd
mkdir rootfs
mkdir rootfs/dev
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/ram d 1 0
cp hello rootfs


生成映像

cd rootfs
find .| cpio -o --format=newc > ../rootfs.img


运行内核

cd
qemu-system-i386 -kernel ./Downloads/linux-3.10.98/arch/x86/boot/bzImage -initrd rootfs.img -append "root=/dev/ram rdinit=/hello"


运行的结果应该是这样的:



无限输出是因为那一句while(1)语句。当然也可以不加,最后只会输出一句helloworld语句并且报
attemp to kill init,which is...
,是可以理解的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: