运行自己的操作系统(linux版)(一)

大部分内容来自WB. YANG的一本书,书名忘记了

1.linux所需要的安装的工具

vim, virtualbox,g++

2.编写自己的操作系统,懒得在linux上装个输入法,只好用蹩脚的英文写的注释,阅读时请自带避雷针

系统引导程序:boot.S

1 .code16                          #使用16位模式汇编  
 2 .text                            #代码段开始  
 3         mov     %cs, %ax     #初始化栈寄存器、数据段寄存器和通用段寄存器  
 4         mov     %ax, %ds  
 5         mov     %ax, %es  
 6         call    DispStr         #调用字符串显示函数,call function to display string  
 7         jmp    .               #while(1),无限循环  
 8 DispStr:                     #字符串显示函数  
 9         mov     $BootMessage, %ax  
10         mov     %ax, %bp        #ES:BP = address of string  
11         mov     $16, %cx        #CX = length of string  
12         mov     $0x1301, %ax    #AH = 13, AL = 01h  
13         mov     $0x00c, %bx     #page number = BH=0, word color = BL = 0Ch  
14         mov     $0, %dl  
15         int     $0x10            #进入中段10h is interrupt number  
16         ret                      #返回  
17 BootMessage:.ascii "Hello, OS world!"
18 .org 510                        #fill 0 in first 510 BYTE
19 .word 0xaa55                    #end with 0xaa55

连接脚本:solrex_x86.ld

1 SECTIONS  
2 {  
3     . = 0x7c00;  
4     .text :  
5     {  
6         _ftext = .; /*program will be loeaded to 0x7c00*/
7     } = 0  
8 }

编译连接文本Makefile

1 CC=g++  
 2 Ld=ld  
 3 LDFILE=solrex_x86.ld  
 4 OBJCOPY=objcopy  
 5   
 6 all:boot.img  
 7   
 8 #Step 1:g++ call as, boot.S -> boot.o  
 9 boot.o:boot.S  
10     $(CC) -c boot.S  
11   
12 #Step 2:ld call link script, boot.o -> boot.elf  
13 boot.elf:boot.o  
14     $(LD) boot.o -o boot.elf -e c -T$(LDFILE)  
15   
16 #Step 3:objcopy remove the useless section(such as .pdr, .commemnt, .node) i    n boot.efl,   
17 #        strip all signal information, the output is boot.bin  
18 boot.bin:boot.elf  
19     @$(OBJCOPY) -R .pdr -R .comment -R .note -S -O binary boot.elf boot.bin  
20   
21 #Step 4:generate bootable software image  
22 boot.img:boot.bin  
23  @dd if=boot.bin of=boot.img bs=512 count=1      #用 boot.bin 生成镜像文件第一个扇区  
24  # 在 bin 生成的镜像文件后补上空白,最后成为合适大小的软盘镜像  
25  @dd if=/dev/zero of=boot.img skip=1 seek=1 bs=512 count=2879  
26  
27 clean:  
28  @rm -rf boot.o boot.elf boot.bin boot.img

boot.S -> boot.o -> boot.elf -> boot.bin ->boot.img

3.生成os的镜像文件

把以上三个文件放在同一个目录,并输入make,则在同一目录生成boot.img

4.加载和运行

运行virtualbox

new一个新的操作系统

setting->storage->Add controller->Add floopy controller->add floopy deviec->choose disk->导入上一步中生成的boot.img

start

posted @ 2014-06-14 23:21  windmissing  阅读(407)  评论(0编辑  收藏  举报