x01.os.21: print "Loading..."
Linux Inside 是中文版,值得下载一读。
先把目标设低点,开机进入后,在屏幕上打印“Loading..."即可。由于要在 bochs 中运行,首先就是安装 bochs。Oldlinux 中有相关资源,可自行下载。winxp 和 linux 的配置脚本如下:
# for windows bochs config megs : romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest floppya: 1_44="a.img", status=inserted
floppyb: 1_44="b.img", status=inserted
ata0-master: type=disk, path="c.img", cylinders=, heads=, spt= boot: a mouse: enabled=
winxp
# for linux bochs config display_library : sdl
megs : romimage : file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage : file=/usr/share/vgabios/vgabios.bin floppya: 1_44="a.img", status=inserted
floppyb: 1_44="b.img", status=inserted
ata0-master: type=disk, path="c.img", cylinders=, heads=, spt= boot : a mouse : enabled=
keyboard_mapping : enabled=, map=/usr/share/bochs/keymaps/sdl-pc-us.map
linux
当然,这只是作为参考。如是 winxp,建议直接在 bochs-sls1.0 中编译,用 dd 写入 /dev/fd1, 即 b.img;如是 ubuntu,我使用 eclipse,贪图智能提示而已,本质并无区别。github 中的代码为 Ubuntu 系统。由于要求简单,代码自然也简单,分别为 makefile, boot/bootsect.s, tools/build.c 如下:
# makefile AS86 = as86 - -a
LD86 = ld86 - AS = as
LD = ld
LDFLAGS = -s -x -M
CC = gcc
CFLAGS = -Wall -O -fstrength-reduce -fomit-frame-pointer -nostdinc -Iinclude
CPP = gcc -E -nostdinc -Iinclude ROOT_DEV = /dev/hd1 .c.s:
$(CC) $(CFLAGS) -S -o $*.s $<
.s.o:
$(AS) -c -o $*.o $<
.c.o:
$(CC) $(CFLAGS) -c -o $*.o $< Image: boot/bootsect tools/build
tools/build boot/bootsect > Image
sync boot/bootsect: boot/bootsect.s
$(AS86) -o boot/bootsect.o boot/bootsect.s
$(LD86) -o boot/bootsect boot/bootsect.o tools/build: tools/build.c
gcc -o tools/build tools/build.c
makefile
! boot/bootsect.s .text entry start
start:
mov ax, #0x07c0
mov ds, ax
mov es, ax
mov ss, ax
mov sp, #0xff00 mov cx, #
mov bx, #0x000c
mov bp, #msg
mov ax, #0x1301
int 0x10 die:
jmp die msg:
.byte ,,,
.ascii "Loading..."
.byte ,,, .org
.word 0xaa55
boot/bootsect.s
/*
* tools/build.c
*/ #include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/fs.h>
#include <unistd.h>
#include <fcntl.h> #define MINIX_HEADER 32
#define GCC_HEADER 1024
#define SYS_SIZE 0x2000
#define DEFAULT_MAJOR_ROOT 3
#define DEFAULT_MINOR_ROOT 1
#define SETUP_SECTS 4 void die(char* str)
{
fprintf(stderr, "%s\n", str);
exit();
} int main(int argc, char** argv)
{
int i, id, c;
char buf[];
char major_root, minor_root; if (argc == ) {
} else {
major_root = DEFAULT_MAJOR_ROOT;
minor_root = DEFAULT_MINOR_ROOT;
}
fprintf(stderr, "Root device is (%d, %d)\n", major_root, minor_root);
for (i = ; i < sizeof buf; i++)
buf[i] = ; if ((id = open(argv[], O_RDONLY, )) < )
die("Unable open bootsect");
if (read(id, buf, MINIX_HEADER) != MINIX_HEADER)
die("Unable read Minix header");
i = read(id, buf, sizeof buf);
fprintf(stderr, "bootsect is %d bytes.\n", i);
buf[] = (char)major_root;
buf[] = (char)minor_root;
if ((*(unsigned short*)(buf + )) != 0xaa55)
die("boot hasn't '0xaa55' flag.");
i = write(, buf, );
if (i != )
die("write call failed.");
close(id); return ;
}
tools/build.c
源代码:https://github.com/chinax01/Lab
在 ubuntu 中进入目录后运行如下命令即可:
make
make editcopy
bochs
x01.os.21: print "Loading..."的更多相关文章
- x01.os.13: 文件系统
停了两天电,忽然得空闲.找来破吉他,已然不成弦. 丁丁当当敲,敲到电来到.为把时间捡,熬夜三四点. 从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.t ...
- x01.os.14: 时间都去哪儿了
时间都去哪儿了 老帕的“花儿为什么这样红”,三分钟引起六次欢呼,却败给了张碧晨.试想一下,如果是人气更高的陈冰,即使唱得和张碧晨一模一样,可能仍然不敌老帕,为什么张碧晨就能取胜呢?有这么个笑话:一人弹 ...
- x01.os.9: 进程切换
进入内核后,当然不能无所事事.先创建三个进程,分别打印 A,B,C.虽然只是简单的打印,但却是一切扩展的基础,不可等闲视之. 进程切换,涉及一系列的寄存器需要保护,于是,就有了 ProcessStac ...
- x01.os.8: 加载内核
在 x01.os.7 中,借助 freedos,学习了保护模式.但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等. 引导比较简 ...
- x01.os.7: 傻子一样的等
傻子一样的等 昨日出差,办完事后,下午 2:30,准备进长途汽车站买票回家,被一人拦住,说可以带我进去,车马上就要开了,买票来不及.我以为是汽车司机,就跟了进去.进去后,他打了个电话,说 3:30 车 ...
- x01.os.18: MBR
硬盘不同于软盘,它是要分区的.这时,mbr(master boot record)便不可少了.安装 os 硬盘的第一扇区,开始有一小段不多于 446 字节的程序,然后是分区表 512-446-2 字节 ...
- x01.os.16: 添加功能
准备工作 1.确保是 win xp,如是 win 8,运行 nasm 需按提示同意安装组件. 2.确保 src 和 z_tools 在同一目录下,nasm 已包含在 z_tools 文件夹中. ...
- x01.os.12: 在 windows 中写 OS
在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...
- x01.os.11: IPC 路线图
学习的最好方法就是看代码,所以我们不妨跟着 IPC 的调用路线图,来学习学习 IPC. 从 x01.Lab.Download 下载代码后,首先进入 main.c 文件,在 TestA 中,有这么一句: ...
随机推荐
- Swift -- 对AFN框架的封装
Swift -- 对AFN框架的封装 一.封装AFN的目的 简单的说: 解耦 日常工作中,我们一般都不会去直接使用AFNetWorking来直接发送网络请求,因为耦合性太强,假设有多个控制器都使用AF ...
- WCF学习之旅—第三个示例之一(二十七)
一.前言 通过前面二十几个章节的学习,我们知道了什么是WCF:WCF中的A.B.C:WCF的传输模式:WCF的寄宿方式:WCF的异常处理.本文综合应用以上知识点,一步一步写一个小的WCF应用程序——书 ...
- ASP.NET Core真实管道详解[1]:中间件是个什么东西?
ASP.NET Core管道虽然在结构组成上显得非常简单,但是在具体实现上却涉及到太多的对象,所以我们在 <ASP.NET Core管道深度剖析[共4篇]> 中围绕着一个经过极度简化的模拟 ...
- Django:手把手带你入门
一.开发环境: Python:2.7:PyCharm 4 二.Django的安装: 打开Pycharm --> 新建项目--> 看图操作--> 自动安装Django环境 三.创建第一 ...
- 通过Matrix进行二维图形仿射变换
Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的"平直性"和"平行性".仿射变换可以通过一系列的原子变换的复合来 ...
- Chrome在302重定向的时候对原请求产生2次请求的问题说明
这个问题应该确确实实是一个Chrome的BUG,我在自己的编程环境中发现,并在多个服务器,多个编程语言的运行环境,以及多个浏览器下都测试过,都看到有2次请求出现.为了证明不是自己环境的问题,我也特意去 ...
- c 小工具的使用
1. 这是一个gps 数据过滤的小工具,目的是过滤到gps数据中不符合要求的数据,然后转为json 数据 需要两个小工具 bermuda.c ------> 过滤一定范围的数据 geo2j ...
- 《HelloGitHub月刊》第09期
<HelloGitHub>第09期 兴趣是最好的老师,<HelloGitHub>就是帮你找到兴趣! 前言 转眼就到年底了,月刊做到了第09期,感谢大家一路的支持和帮助
- MVP社区巡讲-云端基础架构:12月5日北京站 12月12日上海站
紧跟当今的技术发展趋势还远远不够,我们要引领变革!加入本地技术专家社区,获取真实案例.实况培训演示以及探讨新一代解决方案.在此活动中,您将: 了解如何运用开源(OSS)技术.Microsoft 技术及 ...
- context:component-scan" 的前缀 "context" 未绑定。
SpElUtilTest.testSpELLiteralExpressiontestSpELLiteralExpression(cn.zr.spring.spel.SpElUtilTest)org.s ...