必威体育Betway必威体育官网
当前位置:首页 > IT技术

学习操作系统:自己动手写操作系统 ->chapter5_e Kernel的制作--VGA版本

时间:2019-11-05 03:45:37来源:IT技术作者:seo实验室小编阅读:84次「手机版」
 

自己动手写操作系统

前面已经分析过了boot.asm和loader.asm的代码,有Text版本和VGA版本。

Text版本的Kernel书里有,直接看就可以。

本此学习时VGA版本的Kernel,因为书里没有,在网上没有看到,自己整合了两本书的内容

由于没有找到支持windows的支持elf_i386的ld命令。所以本Kernel.bin是在linux下编译的。

boot.asm


[BITS 32]                    ; 以32位编译
 
section .text

  jmp start
 
global	start
global	io_hlt
global	write_mem8
[EXTERN kernel_main]         ; 内核入口函数, EXTERN表明此符号在外部定义
 
start:
  cli                        ; 禁用中断
  call kernel_main           ; 调用内核入口函数
  jmp $                      ; 无限循环


io_hlt:	; void io_hlt(void);
		HLT
		RET

write_mem8:	; void write_mem8(int addr, int data);
		MOV		ECX,[ESP+4]		; [ESP+4]=> C语言传过来的第一个参数
		MOV		AL,[ESP+8]		; [ESP+8]=> C语言传过来的第二个参数
		MOV		[ECX],AL
		RET

 kernel.c

void io_hlt(void);
void write_mem8(int addr, int data);
int kernel_main()
{
   int i; 

	for (i = 0xa0000; i <= 0xaffff; i++) {
		;write_mem8(i, 15); /* MOV BYTE [i],15 */
		write_mem8(i, i & 0x0f); /* MOV BYTE [i],15 */
	}

	for (;;) {
		io_hlt();
	}
}

link.ld 

/***************************
* 文件名: link.ld  
***************************/
 
ENTRY(start)
SECTIONS
{
    . = 0x100000;
 
    .text :
    {
        *(.text)
        . = ALIGN(4096);
    }
    .data :
    {
        *(.data)
        *(.rodata)
        . = ALIGN(4096);
    }
}

nasm -f elf boot.asm -o boot.o

gcc -m32 -c -o kernel.o kernel.c

ld -Ttext 0x30400 -T link.ld -m elf_i386 -nostdlib boot.o kernel.o -o kernel.bin

制作驱动文件

把boot.bin

loader.bin

kerlen.bin导入到img文件中

并把boot.bin设置为引导文件

执行

 学后感:

32位保护模式下的Text或VGA操作都有了,剩下的就是去理解各种的文件格式,解析文件格式,显示到自己的操作系统上。

包括文件系统格式(FAT12,fat32,NTFS。。。。),应用程序文件格式(Linux下是ELF,Window是PE)、以及其他二进制文件格式(BMG、JPG。。。。)等等等等

文章最后发布于: 2019-04-17 23:51:09

相关阅读

揭秘广告软文的五种写法

引言: 如何写出最有价值的软文,一直都是营销推广的核心!应该用怎样的方法,才可以将软文的价值完全发挥出来?又有怎样的写作技巧,让我们

90%小企业写口号文案踩过这个“坑”,你在不在?

先让自己活下去,让那些高大上的口号文案先等一等呢,它们总有一天会适合你!之前有一个企业的老板,问过我一个的问题,很具有代表性,今天单

做到这十条,你也可以轻松写出价值二十万的软文

一.坚信99.9%的成功来源于软文如果你不赞同我的观点,请你右上角关掉。谢谢!如果你继续阅读的话,恭喜你,这是一篇价值二十万元人民币

操作系统 - http://bbs.pcbeta.com

操作系统 - http://bbs.pcbeta.com

自写FindWindow函数

模拟FindWindow函数,绕过所有用户层HOOK 分析API函数原理 FindWindowA最外层流程: 进入CALL USER32.77D28242: 进入CALL USER

分享到:

栏目导航

推荐阅读

热门阅读