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..."的更多相关文章

  1. x01.os.13: 文件系统

    停了两天电,忽然得空闲.找来破吉他,已然不成弦.           丁丁当当敲,敲到电来到.为把时间捡,熬夜三四点. 从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.t ...

  2. x01.os.14: 时间都去哪儿了

    时间都去哪儿了 老帕的“花儿为什么这样红”,三分钟引起六次欢呼,却败给了张碧晨.试想一下,如果是人气更高的陈冰,即使唱得和张碧晨一模一样,可能仍然不敌老帕,为什么张碧晨就能取胜呢?有这么个笑话:一人弹 ...

  3. x01.os.9: 进程切换

    进入内核后,当然不能无所事事.先创建三个进程,分别打印 A,B,C.虽然只是简单的打印,但却是一切扩展的基础,不可等闲视之. 进程切换,涉及一系列的寄存器需要保护,于是,就有了 ProcessStac ...

  4. x01.os.8: 加载内核

    在 x01.os.7 中,借助 freedos,学习了保护模式.但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等. 引导比较简 ...

  5. x01.os.7: 傻子一样的等

    傻子一样的等 昨日出差,办完事后,下午 2:30,准备进长途汽车站买票回家,被一人拦住,说可以带我进去,车马上就要开了,买票来不及.我以为是汽车司机,就跟了进去.进去后,他打了个电话,说 3:30 车 ...

  6. x01.os.18: MBR

    硬盘不同于软盘,它是要分区的.这时,mbr(master boot record)便不可少了.安装 os 硬盘的第一扇区,开始有一小段不多于 446 字节的程序,然后是分区表 512-446-2 字节 ...

  7. x01.os.16: 添加功能

    准备工作  1.确保是 win xp,如是 win 8,运行 nasm 需按提示同意安装组件.  2.确保 src 和 z_tools 在同一目录下,nasm 已包含在 z_tools 文件夹中.  ...

  8. x01.os.12: 在 windows 中写 OS

    在 windows 中写操作系统,需要一系列的辅助工具.在此,要感谢川谷秀实!所有工具,都在 z_tools 文件夹中.有了大师的帮助,不妨也来尝试在 windows 中写一把 OS. 源代码及工具可 ...

  9. x01.os.11: IPC 路线图

    学习的最好方法就是看代码,所以我们不妨跟着 IPC 的调用路线图,来学习学习 IPC. 从 x01.Lab.Download 下载代码后,首先进入 main.c 文件,在 TestA 中,有这么一句: ...

随机推荐

  1. Jquery网页元素里面的操作以及JSON

    如果网页里面有复选框,下拉列表Jquery怎么来操作,主要是怎么选取数据,就是取选中值,第二个是设置哪一项选中 <script src="jquery-1.11.2.min.js&qu ...

  2. iOS-----App闪退,程序崩溃---解决方案

    1.iOS-中app启动闪退的原因 2.iOS开发-闪退问题-解决之前上架的 App 在 iOS 9 会闪退问题 3.iOS-应用闪退总结 4.iOS开发-捕获程序崩溃日志 5.iOS开发-应用崩溃日 ...

  3. 验证码识别<1>

    1. 引子 前两天访问学校自助服务器()缴纳网费,登录时发现这系统的验证码也太过“清晰”了,突然脑袋里就蹦出一个想法:如果能够自动识别验证码,然后采用暴力破解的方式,那么密码不是可以轻易被破解吗? p ...

  4. Python模拟登陆新浪微博

    上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...

  5. 应用新安全组 - 每天5分钟玩转 OpenStack(116)

    Neutron 默认的安全组规则会禁止掉所有从外面访问 instance 的流量. 本节我们会修改安全组的配置,允许 ping 和 ssh instance.有两种方法可以达到这个目的: 1. 修改 ...

  6. 安装wamp2.5报权限错误的解决办法

    安装完wampServer 2.5,新建了一个虚拟目录,xhp/ 访问xhp/index.php报You don't have permission to access 按照以前的经验,只要打开/wa ...

  7. CSS3与页面布局学习总结(一)——概要、选择器、特殊性与刻度单位

    web前端开发者最最注的内容是三个:HTML.CSS与JavaScript,他们分别在不同方面发挥自己的作用,HTML实现页面结构,CSS完成页面的表现与风格,JavaScript实现一些客户端的功能 ...

  8. Oracle 11g静默安装简明版

    环境:RHEL 6.5 + Oracle 11.2.0.4 1. 初步处理应答文件 2. 静默安装软件 3. 静默安装监听 4. 静默dbca建库 说明: 本文默认安装软件前的步骤已经设置完毕 如果没 ...

  9. 【分布式】Zookeeper请求处理

    一.前言 在前面学习了Zookeeper中服务器的三种角色及其之间的通信,接着学习对于客户端的一次请求,Zookeeper是如何进行处理的. 二.请求处理 2.1 会话创建请求 Zookeeper服务 ...

  10. PHPStorm配置自己喜欢的主题

    PHPstorm默认的主题和可选的主题有时候不能满足有些人的需求,怎么配置自己喜欢的主题呢? 1.首先先去下载自己喜欢的主题:http://www.phpstorm-themes.com/ 但是在下载 ...