Linux0.11 环境搭建:

我参考的是这个博客:http://blog.csdn.net/u014688145/article/details/50575588
下载的文件:点击打开链接http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040329.zip
2、解压Linux-0.11-devel-040329.zip,目录结构如下图所示:

这里真正使用到的文件为:Bochs-2.1.1.exe 、bochsrc-hd.bxrc、bootimage-0.11、bootimage-0.11-hd、hdc-0.11.img
3、点击Bochs-2.1.1.exe进行安装。
4、安装完毕后,将所有linux-0.11-devel-040329下的文件,拷贝到刚才安装bochs下的根目录。原目录如下:

拷贝过后目录为:

5、拷贝完成后,运行bochsrc-hd.bxrc,若安装成功,打开即能见到如下界面:

这已经是x86PC模拟器上,搭建完成的Linux操作系统。建立linux操作平台命令,就能操作Linux。由于学习操作系统需要,我们需要在Linux下,编译操作系统以及完成简单的源码修改,从而达到理解Linux内核的能力。接下来,主要演示Linux内核源码的修改,以及内核的编译过程。由于该Linux版本的原因,我们还需要对代码做出调整,方能成功编译。

内核编译过程:

1、进入/usr/src/linux 目录下,键入命令 cd ../src/linux ,如下图所示:


2、进行编译,键入命令 make clean 和 make后。

若出现如下所示错误:gcc-cc1: Invalid option “string-insns”。这是需将Linux目录下的Makefile文件中的-mstring-insns参数去掉。除此之外,每个子目录fs,lib,kernel以及kernel目录下的三个驱动程序子目录(math, blk_drv, chr_drv)的Makefike当中的-mstring-insns参数去除掉。此处只演示根目录下的Makefile文件修改。
3、依次修改:/linux/Makefile、/linux/fs/Makefile、/linux/lib/Makefile、
/linux/kernel/Makefile、/linux/kernel/math/Makefile、/linux/kernel/blk_drv/Makefile、/linux/kernel/chr_drv/Makefile文件。linux目录下,键入:vi Makefile。如下图所示:

找到文件中的-mstring-insns 参数,并删去保存。
4、到/usr/local/bin中找到文件ar,并把ar 改名为gar,键入命令:mv ar gar。如下图所示:


5、回到linux 目录下,重新键入make clean以及 make,完成内核的编译链接。

出现上图提示,即表面程序编译成功。完成编译后,便可以开始修改内核源码,从而达到扩展操作系统功能以及学习操作系统的目的。这里,我们简单修改下,linux操作系统开机启动项bootsect.s源码,让开机后输出个性化的字符串。
6、进入/usr/src/linux/boot目录,修改bootsect.s源码,保存并退出。

[plain] view plain copy
! Print some inane message
mov    ah,#0x03        ! read cursor pos
xor    bh,bh
int    0x10
mov    cx,#47      //这里表示的显示的字符个数
mov    bx,#0x0007        ! page 0, attribute 7 (normal)
mov    bp,#msg1
mov    ax,#0x1301        ! write string, move cursor
int    0x10
msg1:
.byte 13,10
.ascii "Loading system ...MGl the very nubility man"   //这里写的是要显示的字符内容
.byte 13,10,13,10
.org 508  

7、修改完成后,在linux目录下,重新键入make命令,完成编译。
8、make成功后生成引导启动映象文件Image。若需要输出这个Image文件, 可以首先备份bootimage-0.11-hd文件, 然后使用下面命令就会把bootimage-0.11-hd替换成新的引导启动文件,键入命令:dd bs=8192 if=Image of=/dev/fd0。如下图所示:

9点击reset重启Linux操作系统。如下图所示:

这里多谢Demon-初来驾到帖子的帮助,让我用bochs搭建了Linux0.11的环境,开始了Linux0.11源代码的阅读,3Q。

Linux0.11学习研究相关推荐

  1. main 函数解析(二)—— Linux-0.11 学习笔记(六)

    main函数解析(二)--Linux-0.11 学习笔记(六) 4.6 blk_dev_init函数 void blk_dev_init(void) {int i;for (i=0 ; i<NR ...

  2. main函数解析(一)——Linux-0.11 学习笔记(五)

    main()函数解析(一)--Linux-0.11 学习笔记(五) 经过了前面的各种铺垫,终于来到了main函数.这篇博客的任务是把init/main.c讲清楚.由于牵扯到很多的函数调用,要想一次就说 ...

  3. kernel_mktime() 详解 —— Linux-0.11 学习笔记(四)

    题目:kernel_mktime() 详解 -- Linux-0.11 学习笔记(四) 在init/main.c文件中,有一个函数static void time_init(void) 该函数读取 C ...

  4. setup.s 分析—— Linux-0.11 学习笔记(二)

    更新记录 版本 时间 修订内容 1.0 2018-4-14 增加了"获取显示模式"这一节,AL取值的表格 标题: setup.s 分析-- Linux-0.11 学习笔记(二) 老 ...

  5. linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader

    直接看代码,即使已经理解了代码,但是还是会有种没有学到手的感觉.真正的掌握来自实践,来自己动手做出来."简单AB任务切换程序"系列文章的目的是,在bochs下,实践出简单AB两个任 ...

  6. linux0.11学习之schedule

    在一个操作系统中,最重要的部分就是任务调度,linux的0.11版本的任务调度函数比较简单,所以学习任务调度的原理非常适用. 下面我们贴出来schedule函数的代码. 12 /*3 * 'sched ...

  7. head.s 分析——Linux-0.11 学习笔记(三)

    题目:head.s 分析 head.s 程序在被编译生成目标文件后会与内核其他程序一起被链接成 system 模块,它位于 system 模块的最开始部分,这也就是为什么称其为"头部(hea ...

  8. linux0.11学习笔记-技术铺垫-简单AB任务切换程序(3)-调试手段和方法

    写底层代码,我们需要特别的手段去调试,去debug.本文针对几种应用场景,介绍几种手段. 1. 查看文件的二进制值 - hexdump命令 以文章(2)中的head程序为例子 ld head.o -m ...

  9. main() 函数解析(一)——Linux-0.11 剖析笔记(六)

    文章目录 1. 宏定义`_syscall0` 2. `setup.s`读取的参数 3. 读取CMOS实时时钟信息 3.1 `outb_p(value,port)` 3.2 `inb_p(port)` ...

最新文章

  1. php amqp扩展安装,php扩展AMQP,安装报错解决
  2. Yum在线升级之网络(本地)服务器的搭建!
  3. 详细讲解python中的析构方法;
  4. Vista新特征(Features)(英文)
  5. 笔记本html怎么插入图片,将图像嵌入到jupyter笔记本中并导出为HTML
  6. 全球最伟大社交软件!微信入选“现代百大设计最佳产品”:排名超Facebook
  7. java 中的锁 aqs_Java并发编程系列-(4) 显式锁与AQS
  8. maven项目引用新模块,依赖的jar包与新模块中的jar包版本不一致
  9. 大数据挖掘有哪些技术
  10. 发生服务器错误 显示预览,我的电脑为何在做asp的时候按F12键不能预览!预览就出错!错误代码500说服务器或者DNS错误...
  11. 如何运行网上下载的matlab代码?怎样找到matlab主程序?
  12. 【fiddler】用fiddler实现android手机抓包
  13. 网站被ddos攻击了怎么办?网站正在被ddos攻击怎么解决
  14. 基于 Node.js + Koa 构建完整的 Web API 项目
  15. Echarts参数属性学习Gird演示案例
  16. nginx报错问题记录
  17. LANDSAT8 LEVEL2 COLLECTION2如何在ENVI中正确打开
  18. [鲁林希] 学习动力篇
  19. Windows Mobile 6.5系统详细使用教程!
  20. 微信小程序wx.getUserProfile接口的使用

热门文章

  1. ssm基于jsp的在线点餐系统 毕业设计源码111016
  2. MATLAB绘画双纵坐标图改纵坐标颜色都为黑色
  3. WR720N改造记录1
  4. 豪斯曼检验matlab,豪斯曼检验、空间面板模型选择等问题
  5. [k8s]如何处理dockerfile无expose情况下在k8s里暴漏访问
  6. 深入理解Spring两大特性:IoC和AOP
  7. 蓝桥 密码锁(Java)
  8. linux中关于磁盘配额的描述,Linux中的磁盘配额
  9. 【区块链108将】数据盾:顶级白客们对于网络安全的美好憧憬
  10. WordPress快速增加百度收录的方法