自己写内核–编译内核

在ubuntu下面: 写代码boot.asm ● 编译:nasm -f elf boot.asm -o boot.o 如果没有nasm,则安装它 apt install nasm -y 。 写代码kernel.c ● 编译:gcc -m32 -c -o kernel.o kernel.c 写代码link.ld ● 用ld命令链接目标文件boot.o和kernel.o,指明使用链接脚本link.ld: ld -T link.ld -m elf_i386 -nostdlib boot.o kernel.o -o mykernel 运行上面命令后,会生成我们要启动的真正的内核mykernel,这个mykernel满足GRUB启动规范。 ● 如何将文件弄到模拟环境中呢:在 ubuntu 中将 mykernel 文件 ftp 到一个服务器中,在 win7 中通过filezilla将文件下载到硬盘,将虚拟机的硬盘文件映射成可读写的网络硬盘,将 mykernel 文件拷贝到网络硬盘中,断开网络硬盘,启动虚拟机。ok。 在windows下面: nasm好像有win版本。曾经用过。 但还没找到windows下的gcc编译成elf文件的方法,暂不知道该如何交叉编译。 link还没到这步,还不知道。

写操作系统-搭建自己的环境

1、虚拟机● 在VMware中创建一个虚拟机,硬盘10G,内存1G,1个内核。● 安装DOS7.1。安装时,选择Full installation,not install Add-Ons,not install AccessDOS,not Enable UMB memory and EMS。● 拷贝grub4dos文件到虚拟机硬盘。关掉虚拟机,在win7下将myos.vmdk映射成可读写的虚拟盘 z ,拷贝grub4dos文件到 z 盘,断开虚拟盘 z 。● 在VMware中启动dos,在autoexec.bat文件中增加ECHO Press any key to start GRUB or Ctrl+C to DOSpause >nulrem delay by command pingrem ping 127.1 -n 10 >nulgrub.exe● 拷贝grub4dos目录下的grub.exe、menu.lst文件到根目录。● 修改menu.lst文件,增加以下代码:title myosfind –set-root /mykernelkernel /mykerneltitle back to DOSquit● 拷贝自己的内核文件mykernel到C盘根目录。● 重启系统,就开始加载内核mykernel了。● 至此,可以备份这个虚拟机目录了,便于在其它机器上使用。● 以后更改了内核,只要把文件mykernel拷贝过来覆盖原文件即可。

通过grub启动自己的内核

★ 原理 https://blog.csdn.net/liyuanbhu/article/details/7583595 在 PC 机上捣鼓自己的操作系统遇到的第一个难题就是如何将内核加载到内存中执行。读过于渊写的《自己动手写操作系统》,发现这部分的工作非常繁琐。而且实际上这部分工作和操作系统没太大的关系。好在开源的引导加载程序也已经发展的很成熟了,如grub和uboot。我们可以利用前人的成果,将自己的操作系统改造成可以用现有引导加载程序引导的内核。 这里采用GRUB作为引导加载程序。uboot主要用于arm芯片的flash启动。 GRUB 引导加载程序广泛应用于 Linux、各种 BSD 系统的引导,具有极高的可靠性。满足多重引导规范(The Multiboot Specification),可以引导各种满足多重引导规范的操作系统内核。 多重引导规范 多重引导规范并不强制要求内核的格式,但是如果采用 ELF 格式,将会带来许多方便。本文下面的介绍都是基于内核采用 ELF 格式。如果您的内核碰巧不能采用 ELF 格式,请您参考多重引导规范的官方文本中 3.1 节关于 Multiboot Header 的介绍。 能够被 GRUB 引导的内核有两个条件: (1) 需要有一个 Multiboot Header ,这个 Multiboot Header 必须在内核镜像的前 8192 个字节内,并且是首地址是 4 字节对齐的。 (2) 内核的加载地址在 1MB 以上的内存中,这个要求是 GRUB 附加的,并非多重引导规范的规定。 Multiboot Header的分布必须如下所示: 偏移量 类型 域名 备注 0… Continue reading 通过grub启动自己的内核