Hello world!让 grub2 引导自己的操作系统 Xos 内核
按照惯例,Xos 的第一步是在屏幕上打印 Hello world!第一步是神奇的一步,如果读者对 PC 不了解,将很难得到头绪。
PC 开机后,CS 和 IP 被初始化为 CS=0xFFFFh,IP=0x0000h,CPU 将从 0xFFFF0h 处读取第一条指令。这个地址正好位于主板上的一段 ROM 即 BIOS 中。BIOS 中的启动程序末尾会将硬盘 MBR 扇区加载到内存 0x7C00h ,并从此处执行。这时候 CPU 处于实模式,使用INT中断可调用 BIOS 程序在屏幕上打印字符。于渊的《自己动手写操作系统》中有详细描述。
但 Xos 不会从硬盘 MBR 加载到内存中,她将通过 grub2 引导。这样做的好处是不需要改动硬盘 MBR ,也不需要用汇编写大量代码,引导程序将完成实模式到保护模式的切换。
内核让 grub2 可引导的条件是符合 Multiboot 规范,在前 8192 字节内需要提供一个 Multiboot header 。grub2 将根据 flags 位初始化内核环境并从内核入口调用内核。
下面是Xos引导测试代码:
1 typedef struct strMultiBootHeader{ 2 unsigned long magic; 3 unsigned long flags; 4 unsigned long checksum; 5 }MultiBootHeader; 6 7 void mbprint(char* str); 8 9 unsigned long magic; 10 11 MultiBootHeader mbh __attribute__((section(".text"))) ={ 12 .magic = 0X1BADB002, 13 .flags = 0X00000003, 14 .checksum = -(0X1BADB002 + 0X00000003), 15 }; 16 17 void KernelEntry(void) 18 { 19 __asm__("movl %%eax,%0":"=m"(magic)); 20 21 if( magic != 0X2BADB002 ) 22 { 23 mbprint("Kernel load errer!\n"); 24 return; 25 } 26 mbprint("Hello world!\n"); 27 while(1) 28 ; 29 return; 30 } 31 32 void mbprint(char* str) 33 { 34 char *pvideo = (char *)0xB8000; 35 while( *str != '\n' ) 36 { 37 *pvideo++ = *str++; 38 *pvideo++ = 0x04; 39 } 40 41 return; 42 }
用下面的命令生成内核:
1 gcc multiboot.c -c -fno-builtin 2 ld multiboot.o -o Xos -Ttext 0x10000 --entry=KernelEntry
在 grub2 配置文件 /boot/grub/grub.cfg 里添加启动项:
1 menuentry 'Xos0.01'{ 2 insmod part_msdos 3 insmod ext2 4 set root='hd0,msdos1' 5 multiboot /boot/Xos 6 }
Hello world!让 grub2 引导自己的操作系统 Xos 内核的更多相关文章
- 【教程】在UEFI启动方式下,通过GRUB2引导,直接从硬盘ISO文件安装Windows10和Ubuntu双系统
本文为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/9949789.html 动机 最近在自学MIT6.828 Operating S ...
- [FW]修复ubutnu12.04+win7的grub2引导
[转]修复ubutnu12.04+win7的grub2引导 原文位置:http://wenku.baidu.com/view/b6b7c9926bec0975f465e2f8.html ps:我使用的 ...
- Linux内核升级、GRUB2引导故障处理与密码破解
目录 内核升级 GRUB2内核启动设置 GRUB2引导菜单加密 GRUB2引导故障及修复 救援模式管理 Rhel7破解root密码 内核升级 查看当前内核版本: uname -r 查看可升级内核: ...
- U盘+GRUB2引导PE或linux镜像
利用U盘制作启动盘,引导WinPE.Linux安装的文章多如牛毛,与他们相比本文的特点有: 1.用且仅用grbu2做引导.不使用grub4dos,不是使用msdos mbr转到活动分区,到ntldr, ...
- grub2引导各种ISO系统镜像
1 grub2引导winpe 1下载winpe.iso镜像,放置在U盘的根目录下 2下载syslinux的memdisk,放置在U盘的根目录下 3 set root=(hd0,msdos1) 设置U ...
- 为云而生,腾讯云服务器操作系统TencentOS内核正式开源
1月9日,腾讯云宣布将开源其服务器操作系统TencentOS内核.相比业内其它版本Linux 内核,腾讯云 TencentOS 内核在资源调度弹性.容器支持.系统性能及安全等层面极具竞争力,特别适合 ...
- 修复Debian(Ubuntu)Grub2 引导
重装win7, 之前的系统debian 的引导就没有了. 而debian 的盘似乎没有ubuntu的livecd模式,于是用ultraISO将ubuntu的ios文件写入到u盘中. boot时选择启动 ...
- centos7备份还原与grub2引导和rescue模式修改root密码
一.centos7备份1.su -2.cd /3.tar -zpPcvf backup.tgz --exclude=/sys --exclude=/mnt --exclude=/proc --excl ...
- CentOS7.2 设置GRUB2引导界面分辨率
最近在学习OS引导启动,GRUB2的学习材料也不少,主要还看官方手册清晰些. 公司里办公机的多启动用的ubuntu的界面,还挺炫酷的.之前看其他博客网文里看到可以设置grub2的分辨率,我拿CentO ...
随机推荐
- (转)C# wnform 请求http ( get , post 两种方式 )
本文转载自:http://www.cnblogs.com/hailexuexi/archive/2011/03/04/1970926.html 1.Get请求 string strURL = &quo ...
- 【转】JDBC为什么要使用PreparedStatement而不是Statement
http://www.importnew.com/5006.html PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement.PreparedSta ...
- Redis资料汇总专题
1.Redis是什么? 十五分钟介绍 Redis数据结构 Redis系统性介绍 一个很棒的Redis介绍PPT 强烈推荐!非同一般的Redis介绍 Redis之七种武器 锋利的Redis redis ...
- C语言每日一题之No.4
这几天老大也没安排我什么项目,于是想正好趁着空补C.当然,是利用晚上加班时间,白天正常上班时间还是学习公司的平台. 今儿个突然弱弱的感觉到在公司补C是件很低级的事情,哪怕是在加班时间都会被喷,因为大家 ...
- SVN学习之参数定义及设置
http://jackyrong.iteye.com/blog/238835 conf目录中打开svnserve.conf ,去掉注释,搞成如下这样 [general] anon-access = r ...
- (WPF) MVVM: ComboBox Binding, XML 序列化
基本思路还是在View的Xmal里面绑定ViewModel的属性,虽然在View的后台代码中也可以实现binding,但是还是在Xmal里面相对的代码量要少一些. 此例子要实现的效果就是将一个List ...
- unity客户端与c++服务器之间的简单通讯_1
// 服务器 # pragma once using namespace std; # include <iostream> # include <string> # incl ...
- KMP算法的Next数组详解 转
这个写的很好,还有讲kmp,值得一看. http://www.cnblogs.com/tangzhengyue/p/4315393.html 转载请注明来源,并包含相关链接. 网上有很多讲解KMP算法 ...
- 关于GameObject.activeInHierarchy,activeSelf,SetActive
activeSelf(read only只读):物体本身的active状态,对应于其在inspector中的checkbox是否被勾选activeInHierarchy(read only只读):物体 ...
- 通过IP连接网上打印机(转载)
From:http://zhidao.baidu.com/link?url=YZzFWur4-UZrNEobHv9zTkbYocMAjKkCq0LBj1QjJ6wApUT7MljxoD8JMBREUH ...