操作系统课程记录(2)————制作grub启动盘(1)
来源:互联网 发布:局域网时间同步软件 编辑:程序博客网 时间:2024/05/06 18:42
下载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可执行程序。
准备文件
cdmkdir rootfsmkdir rootfs/devsudo mknod rootfs/dev/console c 5 1sudo mknod rootfs/dev/ram d 1 0cp hello rootfs
生成映像
cd rootfsfind .| cpio -o --format=newc > ../rootfs.img
运行内核
cdqemu-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...
,是可以理解的。
- 操作系统课程记录(2)————制作grub启动盘(1)
- 操作系统课程记录(2)——制作grub启动盘(2)
- 操作系统课程记录(1)——感想
- 制作grub 0.97启动盘
- grub 启动盘制作
- 秘籍——制作 W2K 启动盘!
- U大师U盘启动盘制作工具(V1.1.0版)——升级U盘
- Linux——使用dd制作u盘启动盘
- MIT操作系统课程CS6.828实验(2) —— 实验工具指导
- MIT操作系统课程CS6.828实验(1) —— 工具链安装
- MIT操作系统课程CS6.828实验(3) —— 启动PC(Lab1)
- mac下的改装人生——制作mac os 启动盘
- [系统装机]如何用UltraISO制作U盘启动盘——图文详解
- 制作Linux的优盘(usb)启动盘
- 用移动硬盘安装win7(制作启动盘)
- Ubuntu启动盘制作(U盘)
- 制作一个USB 多启动盘(MBR)
- 制作Ubuntu安装启动盘(U盘)
- Android Studio离线打包DCloud Html 5+项目
- 算法(第4版本)1.1.30
- C#多线程和线程池
- 前端渲染和后端渲染,要说的都在这里?
- C基础练习4(2012电科复试C)
- 操作系统课程记录(2)————制作grub启动盘(1)
- 最近因为项目需要,所以配置了linux下面的eclipse平台配置opencv3.0的环境,参考了一些正真有用的网页,记录
- oracle 实现 存在记录就更新,不存在就插入 merge into
- JSTL获取当日时间与数据时间比较
- VMware虚拟机的三种联网方法及原理
- app流量测试
- Maven Jetty Plugin 配置指南(翻译)
- JS实现钟表效果
- 进化之路