http://caiwei8888.blog.163.com/blog/static/3017424120101913353856/

学习赵炯博士的《linux 0.11 内核完全注释》,在搭建实验环境时发现没有WinXP下bochs建立linux 0.11 编译环境的文章,都是直接用的赵博的linux-0.11-devel-040329.zip直接进行的实验。有鉴于此,我花费了2周时间打造了自己的linux0.11简易编译环境。

开始制作前,需要XP系统已经安装了WinRAR,UltraEdit,Bochs 2.1.1 ,WinImage8.0

还有把sls-0.99pl.tar.bz2解压到一个单独得文件夹sls-0.99pl下。

我们开始吧! :)

首先需要编辑sls-0.99pl文件夹的bochsrc文件,先做个备份,然后把bochsrc的文件名改为“sls.bxrc”(文件名可以随意,后缀必须是bxrc),然后编辑它(如果不修改可能会出现ROM: couldn't open ROM image file 'C:\Program Files\Bochs-2.1.1/bios/BIOS-bochs-latest'.信息,提示不能运行bochs),把文件第12行和36行的“$BXSHARE/bios/*”改为“BXSHARE/*”即删除bios目录,因为安装2.1.1默认应该是没有这个目录的。OK,存盘,双击sls.bxrc打开SLSLinux,按“空格”选择显示模式。出现“softland login:”字样时按回车输入“root”进入系统。关闭SLSLinux系统。按照《内核》中14.3.1节的流程,创建一个256M的硬盘镜像。做好后把镜像从bochs 安装目录剪切到sls-0.99pl目录下。编辑sls.bxrc文件ata0-master一行下加入“ata0-slave:type=disk,path=.\hdc.img,cylinders=520,heads=16,spt=63”,存盘退出UE文本编辑器。按照《内核》中14.5.2节在硬盘镜像中创建minix文件系统。和sls-0.99pl同一个目录下建立linux0.11文件夹,将256M的硬盘镜像从sls-0.99pl目录移动到linux0.11目录,将sls.bxrc文件 “ata0-slave:type=disk,path=.\hdc.img,cylinders=520,heads=16,spt=63”一行去掉,存盘退出UE文本编辑器。 接着按照《内核》中14.5.3节内容建立根文件系统。直到第14.6节,以上是建立linux0.11编译环境的前提。

这时你应该已经得到了一个最简单的linux0.11操作系统(如上图所示),我们需要向里面加入工具,才能使它能够自己编译内核。

一个关于bochs linux0.11系统和WinXP系统文件传输的方法(小于1.44M的文件):

------ 用bochs自带的Disk Image Creation Tools 建立一个空的1.44M软盘镜像,这个镜像是为了在linux0.11根文件系统没有安装mtools时使用的文件传输载体(注意:第一次使用这个文件前,即执行命令mount前需要用 “mkfs /dev/fd1 1440”命令创建文件系统)。因为WinImage不认非DOS盘,而linux0.11在没有安装mtools时也不认DOS盘,这时就需要用SLSLINUX做中间转换,注意这里dos盘不支持长文件名,需要在SLSLinux下改名。

第一个软件先安装gcc-1.40,这是因为linux是开源的,所以一些工具是需要在机器上编译才能运行。

这里开始安装工具之前,先分别用bochs自带工具和WinImage建立两个镜像文件(fnull.img,b.img)b.img为dos格式是WinImage工具建立的。然后编辑sls.bxrc添加” floppyb: 1_44=b.img, status=inserted”,使用WinImage工具将gcc-1.40.taz加入到b.img中。打开SLSlinux,进入系统后,用“mdir b:”查看有没有 gcc-1.40.taz文件,然后在根目录建一个文件夹lin-ext用于转换文件到linux0.11系统。使用命令 “ mcopy b:* /lin-ext”将gcc1.40安装文件拷贝到SLSLinux系统中(如下图)。

拷贝完成后,点“config”按钮,然后在调试的窗口中将软驱B中的镜像转换为fnull.img

(如下图)

当出现“continue simulation”字样时返回到SLSLINUX系统中,用“mount /dev/fd1 /mnt”命令加载到/mnt目录。如果出现(mount:unknown error 26240),这时需要用“mkfs /dev/fd1 1440”创建文件系统后才能正常使用。然后用命令”cp gcc-lib~1.taz /mnt”把安装文件拷贝到fnull.img镜像中。在XP系统中,把fnull.img文件拷贝到linux-0.11目录中,添加“floppyb: 1_44=fnull.img, status=inserted”到linux0.11配置文件中,双击打开linux-0.11 ,在命令提示符下输入“mkdir /mnt”建立/mnt节点,使用”mount /dev/fd1 /mnt”加载软驱,“cp /mnt/gcc-lib~1.taz /tmp”拷贝文件到tmp目录下,运行“tar –zxvf gcc-lib~1.taz”解压缩文件

得到gcclib目录,接着在/usr节点下建立include目录,local/bin目录,local/lib目录。然后“cd /tmp/gcclib”进入gcclib目录,使用“cp –r include /usr”“cp –r local /usr”将文件拷贝过去,拷贝结束后执行“gcc –s –o hello hello.c”如果执行成功会生成hello这个可执行程序。

执行它,屏幕出现“hello,world”证明安装成功。运行“gcc -v”显示“gcc version 1.40”。到此gcc1.40安装完毕。(在/tmp节点删除gcclib目录和taz文件命令是“rm gcc-lib~1.taz”“rm –rf gcclib”)。如下图所示

第二个软件安装utils.tar.Z,其中主要是make工具。同样,先将文件利用WinImage加载到b.img镜像中,在SLSlinux系统中拷贝到lin-ext目录,然后换fnull.img镜像(以上步骤请参看gcc1.40的安装。这里需要先将fnull.img里的数据清空就是到软盘目录里用“rm *”命令),将文件拷贝到fnull.img,再将文件fnull.img拷贝到linux-0.11目录。打开linux-0.11系统。加载fnull.img 。将utils.tar.Z拷贝到/tmp目录,“tar –zxvf utils~1.z”解压文件(这里的utils~1.z可视具体的情况而定)。解压后,会生成一个usr目录将里面的bin目录拷贝到/usr目录,make工具就安装成功了。安装完成后如下图。

第三个软件安装 mtools2.05,用于读写DOS软盘,同上将mtools压缩包拷到linux0.11的/tmp目录,然后解压缩到mtools目录里,先不要编译,需要修改Makefile,device.c以及mread.c这三个文件,首先将Makefile 6-10行改为

CC      = gcc

cc      = gcc

CFLAGS = -O -Wall

LDFLAGS      = -s

LD   = gcc

去掉原来的“LINT=lint”这一行。

修改device.c 在文件头下面添加

#define MYDEVICE

#ifdef MYDEVICE

struct device device[] = {

{'A', "/dev/fd0", 0L, 12, 0, (int (*)()) 0, 80, 2, 18},

{'B', "/dev/fd1", 0L, 12, 0, (int (*)()) 0, 80, 2, 18},

{'\0', (char *) NULL, 0L, 0, 0, (int (*) ()) 0, 0, 0, 0}

};

#endif/*MYDEVICE*/

上面这些是为了mtools命令添加的设备,其实就是两个软盘。

修改mread.c 在第19行也就是”#else /* BSD */“这一行下面添加

“#include ”

全部修改完毕,运行命令“make install”正常执行后如下图所示

第四个软件安装 gccbin.tar.Z,里面有gas,gld等以及lib库

第五个软件安装 as86.tar.gz ,里面有as86,ld86两个二进制执行程序

第四和五软件安装比较简单,主要是一些编译内核的工具,如:gas,gld,等执行程序。具体的安装可以参考前三个软件的安装。(我开始时没有找到gas的可执行程序,就把网上的源代码拷到linux0.11系统里进行编译,如果大家对编译gas源代码感兴趣,请给我留言)

然后把linux 0.11内核代码拷贝到linux根文件系统中

开始编译。。。

Good Luck!

希望这篇文章能对您有所帮助。有任何问题给我写留言或者发邮件都可以。

本文所需要的软件

-------WinRAR

-------UltraEdit

-------Bochs 2.1.1

-------WinImage8.0.8000

-------sls-0.99pl.tar.bz2

-------gcclib-1.40.taz

(可以在linux-0.11-devel-040329.zip压缩包中找到)

-------mtools-2.0.5.tar.Z

-------utils.tar.Z

-------gccbin.tar.Z

-------as86.tar.gz

------- gas-1.38.1.tar.bz2

-------bootimage-0.11.Z

-------rootimage-0.11.Z

Xp下的程序编译成linux,WinXP下打造自己的linux 0.11简易编译环境(原创)相关推荐

  1. python运行过程中会被编译成二进制_Python代码在运行过程中,会被编译成二进制代码。_学小易找答案...

    [单选题]1. ( )是违反设备安全操作规程的错误做法. [单选题]Thank you for your letter ___________ 24th March. (1.0分) [单选题]超外差接 ...

  2. 使用linux内核,打造自己的linux

    学习过linux的同学都只知道linux是开源免费的,也只是非常棒的,.但是既然开源,那我们是否自己也可以动手打造一个简单的linux呢?今天我们来实验一下 1.在虚拟机里添加一块新的硬盘 2.在新的 ...

  3. linux共享xp打印机驱动下载,给debian共享winxp下的打印机

    论坛里别人的经验,先收集起来,有空再试验. ------------------------------------------------------------------------------ ...

  4. 二手市场三大顽疾背后:支付宝小程序能成闲鱼下一个流量跳板吗?

    "这个好便宜,不买有点亏"."完了,下个月就要吃土了"等等这些声音不断环绕在人们的耳边,而这里面有很大的因素就是,6.18.双十一.双十二等促销节日不断激发人们 ...

  5. 无法远程xp服务器,五步快速处理在WinXP下IIS无法远程访问的问题

    IIS并非一个windows XP系统里常用的服务,但是对于专业技术人员来说却是不可或缺的.但是众所周知IIS的稳定性上比Apache要差,经常会遇到IIS无法启动.失效或者无法远程访问的问题.下面系 ...

  6. 打造自己的linux桌面,亲手打造自己的Linux桌面环境

    2.名称:Docky 网址:http://wiki.go-docky.com Docky非常类似Cairo-Dock,不过它使用Mono,因此增添了一点额外开销.但是它也非常完善和漂亮,能够获得上述类 ...

  7. linux 修改jdk版本 /usr/src/jdk-11.0.11/bin/java: 无法执行二进制文件

    下载的jdk版本与linux匹配不正确 更换成上图中就可以了

  8. linux下java程序乱码,解决linux下java程序(例如applet)中文乱码问题

    解决linux下java程序(例如applet)中文乱码问题 平台:Mandriva 2006.0 将Windows下的字体文件simsun.ttc拷贝到/usr/share/fonts/zh_CN, ...

  9. java程序安装 打包_Java项目怎么打包成在windows下的可安装程序

    一:将项目文件导出成jar文件: 1,找到我们完成的项目代码,导出:(右键单击->Export) 2,选择java ->JAR file 下一步: 3,第一个不勾选,下一步: 4,选择ja ...

最新文章

  1. Cachegrind--缓存命中检查工具及其可视化
  2. React Native知识
  3. 1.EXTJS Row Editor Grid 点取消时插入的新行 的解决方法
  4. python获取div标签的id_Python 获取div标签中的文字实例
  5. c++ 箭头符号怎么打_老司机怎么测量三极管管型、管脚和性能?三极管测量此中有深意...
  6. mac无法ssh localhost
  7. 华为云大数据轻模式体验:忘掉底层烦恼,专注数据开发
  8. 圆通速递:2022年1月快递产品收入36.19亿元 同比增长20.09%
  9. Webstorm的常用快捷键
  10. k8s、jenkins集成
  11. 指数函数在c语言中怎么输入,指数函数如果想得到整型的值怎样做?
  12. 基本概念---part3
  13. HUSTOJ SPJ 示例
  14. 平凡人的野望:我们为赛博世界保管记忆
  15. U深度-重装电脑系统
  16. 全志a20 开发板 linux,全志A83T开发板SDK资料,A20/A31S升级,QT5,Android5.1,Lubuntu
  17. MSN 无法登陆,错误代码: 80072efd,如何解决
  18. 寻觅那款你心仪的国际象棋app
  19. 20-40K/月,百度车联网招聘多岗位Android工程师(地点:深圳)
  20. python发送短信验证码登录_python发送短信验证码

热门文章

  1. js修改style中某个属性_JS 和 CSS 交互的 5 种方法
  2. 实验11.2 链表 6-1 建立学生信息链表
  3. java 虚引用 作用_Java的强引用、弱引用、软引用和虚引用,以及用途
  4. 为什么下拉框拉不下来_为什么体重降不下来?4个饮食方法降低热量摄入,让体重降下来...
  5. Java黑皮书课后题第3章:**3.24(游戏:抽牌)编写程序,模拟从一副52张的牌中抽一张牌,程序应显示牌的大小、花色
  6. oracle数据库元数据SQL查询
  7. web.xml 通过contextConfigLocation配置spring 的方式
  8. 时间选择器 可以选择日期和时间
  9. 关于内存流与字符串的转换
  10. Linq to SQL学习