您现在的位置是:首页 > 正文

在Ubuntu下,从零开始写操作系统(0)-笔记

2024-02-01 01:20:17阅读 2

 

1.安装Ubuntu 16.04操作系统 32位,因为16.04版本是最稳定的版本。安装方法请百度。
2.安装bochs; 命令:sudo apt-get install bochs
3.安装gcc;可能系统没有自带gcc, 命令:sudo apt-get install gcc

编写如下代码
 

//16位的代码段
.code16
//代码起始
.text    
mov %cs,%ax    
mov %ax,%ds //设置ds,es和cs为同一段    
mov %ax,%es    
call Dispstr //显示字符串    
jmp    
.Dispstr:    
mov $bootmsg,%ax    
mov %ax,%bp    
mov $16,%cx    
mov $0x1301,%ax    
mov $0x0c,%bx    
mov $0,%dl    
int $0x10 //调用10号中断的显示字符串功能    
ret
bootmsg: .ascii "Hello,OS World!"
.org 510
.word 0xaa55

编写Makefile文件如下

OBJCOPY=objcopy

all: boot.img

#Step 1:gcc 调用as将boot.S编译成目标文件boot.o
boot.o: boot.S
	$(CC) -c boot.S
#Step 2:ld 调用脚本foot.ld将boot.o链接成可执行文件boot.elf
boot.elf: boot.o
	$(LD) boot.o -o boot.elf -e -c -T$(LDFILE)
#Step3: objcopy 移除boot.elf 中无用的section(.pdr,.comment,.note),
#	strip 掉所有符号信息,输出为二进制文件 boot.bin
boot.bin: boot.elf
	@$(OBJCOPY) -R .pdr  -R .comment -R .note -S -O binary boot.elf boot.bin
#Step 4:生成可启动软盘镜像
boot.img: boot.bin
	@dd if=boot.bin of=boot.img bs=512 count=1	#用boot.bin 生成镜像文件第一个扇区
	#在bin生成镜像文件后补空白,最后成为合适大小的软盘镜像
	@dd if=/dev/zero of=boot.img skip=1 seek=1 bs=512 count=2879
clean:
	@rm -rf *.o *.elf *.bin *.img


编译成功后,使用bochs -qf os,运行,os文本内容如下:


#Configuration file for Bochs(Linux) 
#filename of ROM images 
romimage: file=$BXSHARE/BIOS-bochs-latest 
#=======================================================================
vgaromimage:file=$BXSHARE/VGABIOS-lgpl-latest
#=======================================================================
#what disk images will be used 
#=======================================================================
floppya: 1_44=./boot.img, status=inserted
#=======================================================================
# choose the boot disk. 
#=======================================================================
boot: floppy
#=======================================================================
#where do we send log messages?  
#=======================================================================
log:bochsout.txt
#=======================================================================
#disable the mouse
#=======================================================================
mouse: enabled=0
#=======================================================================
#enable key mapping, using US layout as
keyboard: type=mf, serial_delay=200, paste_delay=100000
#=======================================================================
#how much memory the emulated machine will have
#=======================================================================
megs:32

 

网站文章

  • 第十三周总结

    这周重点了解水王的题目,去借鉴别人的代码去修改这一周在代码上花费的时间加起来差不多16个小时。共写了1000行代码。转载于:https://www.cnblogs.com/lishengming00/p/11071283.html...

    2024-02-01 01:20:11
  • 众多互联网薪资一览表【技术岗】

    众多互联网薪资一览表【技术岗】

    我们平常戏称的“程序猿”、“码农”、“工程狮”都属于技术岗位,大家眼中以“格子衫+牛仔裤”为标配的直男一族。但相对来讲,技术岗位算是互联网行业薪资水平最高的岗位。*图片来源:网络岗位职责:把产品的想法...

    2024-02-01 01:20:04
  • keepalive安装部署步骤

    keepalive VRRP

    2024-02-01 01:19:38
  • Nginx配置:真实IP设置到请求头提供给应用

    Nginx配置:真实IP设置到请求头提供给应用

    项目采用前后端分离后,中间用Nginx进行请求转发,但是如此以来,后台应用获取到的客户端IP地址就总是127.0.0.1(Nginx和后台应用在同一台机器,获取到的总是Nginx的转发的请求IP)。其...

    2024-02-01 01:19:32
  • WCF Resource

    What is WCF? Writing the WCF Hello World App Writing your first WCF client转载于:https://www.cnblogs.com/javafun/archive/2008/04/13/1151405.html

    2024-02-01 01:19:25
  • android lint工作机制,Android架构

    android lint工作机制,Android架构

    MVCmvc model view controller 模式视图控制器M: 业务逻辑处理V:处理数据显示的部分C:Activity处理用户交互的问题,中间桥梁的作用,解耦的作用。特点:耦合性低扩展性...

    2024-02-01 01:18:50
  • No.2-VulnHub-Lampiao渗透学习

    No.2-VulnHub-Lampiao渗透学习

    VulnHub-Lampiao渗透学习 一、前言 靶机地址:https://www.vulnhub.com/entry/lampiao-1,249/ 难度:简单 目标:获取root权限,并获取到fla...

    2024-02-01 01:18:43
  • python获取当前项目所在文件路径(name ‘__file__‘ is not defined)

    s.path.abspath(os.path.dirname(os.path.realpath(‘file’)))注意__file__要加引号。否则会报错name ‘file’ is not defined

    2024-02-01 01:18:36
  • 实验二:熟悉常用的HDFS操作

    实验二:熟悉常用的HDFS操作

    1、理解HDFS在Hadoop体系结构中的角色2、熟悉使用HDFS操作常用的Shell命令3、熟悉HDFS操作常用的Java API1、操作系统:Windows2、Hadoop版本:3.1.33、JD...

    2024-02-01 01:18:07
  • 【高并发】多线程环境下如何保证共享变量的安全性?冰河建议你使用ThreadLocal,一文带你彻底搞懂ThreadLocal

    【高并发】多线程环境下如何保证共享变量的安全性?冰河建议你使用ThreadLocal,一文带你彻底搞懂ThreadLocal

    ThreadLocal是JDK提供的,支持线程本地变量。也就是说,如果我们创建了一个ThreadLocal变量,则访问这个变量的每个线程都会有这个变量的一个本地副本。如果多个线程同时对这个变量进行读写操作时,实际上操作的是线程自己本地内存中的变量,从而避免了线程安全的问题。

    2024-02-01 01:18:01