Unix V6 环境搭建:Simh 安装 Unix V6、Unix V6 基本使用以及源代码获取
一、引言
最近心血来潮看到了一本有意思的书:《Unix内核源码剖析》。这本书有意思之处在于,作者的研究对象是 Unix V6。虽然 Unix V6 已经是 1975 年的系统了,但是其源代码拢共只有 1w 行左右,并且使用了 C 语言(K & R 之前的标准),还是现代操作系统的鼻祖,所以说是初学者最好的研究对象。本着看看总不会吃亏就买了这本书,没想到一开始就差点弃掉。因为这个 Unix V6 系统想要在自己的电脑上搭建起来,着实需要花点精力。
其实搭建 Unix V6 环境、Unix V6 系统的基本使用以及源代码的获取,作者虽然没有明说,但是在附录中的指引中已经指出了能够找到这些资料的地方。
这里,我通过自己的实践,结合作者的指引以及网上的一些博客,成功在 Win10 系统上搭建了 Unix V6 系统。这篇博客本着对网友零假设的基础上进行详细的阐述,力图让每一位阅读本博客的网友都可以按着我这篇博客的内容,一步一步的在自己的 Windows 电脑上搭建出 Unix V6 环境。
那么, 让我们开始吧:)
ps:
Simh 和 Unix V6 的下载速度可能很慢,这里我放到了自己的百度网盘上,供大家下载:
链接:https://pan.baidu.com/s/1NVGMtm4egJicV8TedfsGAA 提取码:mkkj
再 ps:
本博客涉及到的链接网址,这里做个整理:
Simh官方网址
Installing Unix v6 (PDP-11) on SIMH
Unix V6 Manuals (http://man.cat-v.org/unix-6th/)
The Unix Tree
二、下载 Simh
《Unix内核源码剖析》的作者在附录中给出了 Simh 的官方地址,但是具体如何下载我们需要的版本,他并没有细说,也没有细说 Simh 到底是什么:
Simh官方网址 (http://simh.trailing-edge.com/)
简单来说,Simh 是一个旨在模拟历史上的操作系统的一个模拟器软件,我们的 Unix V6(PDP-11)也就正好在它的模拟范畴里面,并且其对 Unix V6 提供了完善的模拟支持,因此我们搭建 Unix V6 环境,一般都是离不开 Simh 的。
那么问题来了,我们下载哪个版本的 Simh 呢?
根据作者在附录中给出的安装指引中,能看到我们只需要 Simh 版本在 3.8-1 及其以后的即可,因此,这里我贴出了 Simh3.9.0 (目前是最新的稳定版本)的下载地址:
下载 Simh3.9.0 (http://simh.trailing-edge.com/sources/simhv39-0-exe.zip)
下载下来,其中的 pdp11.exe 就是我们将要使用的程序:
不过我们暂时先不使用它,把它放在一边,因为我们还需要下载 Unix V6 的系统镜像(英文是 tape,我不知道翻译成什么好,也许系统胶带更好 T_T)。
三、下载 Unix V6
作者其实给出了一个介绍 Simh 安装 Unix V6 的 wiki 网址,但是这个 wiki 对于小白来说不是特别友好:
Installing Unix v6 (PDP-11) on SIMH
这个 wiki 的前提假设,就是读者已经下载了 Simh 和 Unix V6 系统镜像。在这个 wiki 中给出了 Unix V6 系统镜像的下载地址,也就是这个:
下载 Unix V6 系统镜像 (http://sourceforge.net/projects/bsd42/files/Install%20tapes/Research%20Unix/Unix-v6-Ken-Wellsch.tap.bz2/download)
下载下来的压缩包名称为 Unix-v6-Ken-Wellsch.tap.bz2,并且里面只有一个文件 Unix-v6-Ken-Wellsch.tap:
如此这般,我们已经下载了所有我们搭建 Unix V6 所需要的所有内容,达成了安装 Unix V6 系统的前提条件。接下来,让我们继续跟着那篇 wiki 的指引在 Simh 中安装 Unix V6。
四、在 Simh 中安装 Unix V6
之所以要写这篇博客,就是因为作者给出的那篇在 Simh 中安装 Unix V6 的 wiki 写的有些草略,对于小白来说,可能更想要的是事无巨细的说明书一样的东西,这里,我结合作者给出的 wiki 和网上的一些博客,详细记录下我在 Win10 系统下是如何成功在 Simh 中安装 Unix V6 的。其中,作者在附录中给出的在 Simh 中安装 Unix V6 的 wiki 地址如下,感兴趣的同学可以去看看:
Installing Unix v6 (PDP-11) on SIMH
1. 新建文件夹,解压 Simh 和 Unix V6
我们在前面下载了 simhv39-0-exe.zip 和 Unix-v6-Ken-Wellsch.tap.bz2。现在我们需要新建一个文件夹(在哪里都可以),然后将这两个文件夹的内容都解压到这个文件夹中去。
2. 重命名 Unix-v6-Ken-Wellsch.tap 为 dist.tap
这一步是非常非常关键的一步,因为在作者给出的 wiki 中,有这么一行配置代码:
attach tm0 dist.tap
其实作者的原意是,你下载下来的 Unix-v6-Ken-Wellsch.tap 先重命名为 dist.tap,然后在这一行代码中进行连接。但是这篇 wiki 的作者偏偏就漏掉了这关键的一句解释,导致很多人配置启动参数无法成功(这一点也是我看其他人的博客才无意中发现的)。
3. Simh 中配置安装 Unix V6
接下来就是点击文件夹中的 pdp11.exe 程序,配置 Unix V6 的系统启动参数。在弹出来的界面中,粘贴以下配置代码即可(这里可以复制好了之后,鼠标移动到弹出来的界面中右键进行粘贴)。
a. 安装系统(Tape boot )
加载引导块,并将根分区加载到 rk 文件上去。可能有些人会疑惑下面的 11/40
是啥,联想下 Unix V6 是在 DEC 公司的 PDP-11/40 设备上运行的就不难理解了:
set cpu 11/40
set tm0 locked
attach tm0 dist.tap
attach rk0 rk0
attach rk1 rk1
attach rk2 rk2
d cpu 100000 012700
d cpu 100002 172526
d cpu 100004 010040
d cpu 100006 012740
d cpu 100010 060003
d cpu 100012 000777
g 100000
当你运行到这一刻的时候,模拟器会卡住,此时你使用 Ctrl + E 退出,然后再准备配置硬盘信息:
g 0
运行了这行代码,会弹出一个 = 的等待输入提示符,此时按照如下对话进行输入即可:
sim> g 0
=tmrk
disk offset
0
tape offset
100
count
1
=tmrk
disk offset
1
tape offset
101
count
3999
= [## Hit CTRL-E here]
Simulation stopped, PC: 137300 (BGE 137274)
sim> q
其中 [## Hit CTRL-E here]
的意思是让你在那个地方 Ctrl + E 中断运行。我这里的运行截图如下:
b. 安装硬盘(disk install)
在上一步的最后,我们 q 退出了程序,现在我们接着再点击 pdp11.exe,然后输入下面的配置代码:
set cpu 11/40
set tto 7b
set tm0 locked
attach tm0 dist.tap
attach rk0 rk0
attach rk1 rk1
attach rk2 rk2
dep system sr 173030
boot rk0
此时,程序会打印出来一个 @ 符号提示输入,输入如下内容即可告诉模拟器我们要加载 Unix 核心模块:
rkunix
c. 修改终端显示为小写(Fixing the Terminal)
如果此时你输入 ls,会发现默认的不管输入还是显示都是大写字母,只需要输入下面的配置代码即可转为小写:
# STTY -LCASE
d. 重新构建内核(Rebuilding the kernel)
我们需要重新构建内核,才能让内核能够支持 SImh 提供的硬件设备。首先,我们需要重建 mkconfg 程序:
chdir /usr/sys/conf
cc mkconf.c
mv a.out mkconf
其中的 chdir 是移动目录的指令, cc 是 C 编译器,默认输出为 a.out 文件,然后 mv 修改名称为 mkconf。
当我们重新构建了 mkconf,还需要给他一个基本的配置文件:
# ./mkconf
rk
tm
tc
8dc
lp
done
#
接下来,我们编译配置,将其与内核的其余的库文件进行链接,最后将其复制到 unix 目录里面去:
as m40.s
mv a.out m40.o
cc -c c.c
as l.s
ld -x a.out m40.o c.o ../lib1 ../lib2
mv a.out /unix
其中的 as 是汇编命令。为了确认,我们可以查看内核大小是否为 30Kb 大小:
# ls - /unix
-rwxrwxrwx 1 root 30346 Oct 10 12:45 /unix
e. 构建设备文件(building device files)
复制粘贴运行配置指令即可:
/etc/mknod /dev/rk0 b 0 0
/etc/mknod /dev/rk1 b 0 1
/etc/mknod /dev/rk2 b 0 2
/etc/mknod /dev/mt0 b 3 0
/etc/mknod /dev/tap0 b 4 0
/etc/mknod /dev/rrk0 c 9 0
/etc/mknod /dev/rrk1 c 9 1
/etc/mknod /dev/rrk2 c 9 2
/etc/mknod /dev/rmt0 c 12 0
/etc/mknod /dev/lp0 c 2 0
/etc/mknod /dev/tty0 c 3 0
/etc/mknod /dev/tty1 c 3 1
/etc/mknod /dev/tty2 c 3 2
/etc/mknod /dev/tty3 c 3 3
/etc/mknod /dev/tty4 c 3 4
/etc/mknod /dev/tty5 c 3 5
/etc/mknod /dev/tty6 c 3 6
/etc/mknod /dev/tty7 c 3 7
chmod 640 /dev/*rk*
chmod 640 /dev/*mt*
chmod 640 /dev/*tap*
f. 恢复操作系统的其余部分(Restoring the rest of the OS)
dd if=/dev/mt0 of=/dev/rk1 count=4000 skip=4100
/etc/mount /dev/rk1 /usr/source
dd if=/dev/mt0 of=/dev/rk2 count=4000 skip=8100
mkdir /usr/doc
g. 配置启动(configure boot)
# cat >> /etc/rc
/etc/mount /dev/rk1 /usr/source
/etc/mount /dev/rk2 /usr/do
然后点击 Ctrl + D 中断。
h. 重新构建 df 指令(rebuild the df command)
# chdir /usr/source/s1
# ed df.c
/rp0/d
.-2a"/dev/rk0","/dev/rk1",
.
w
q
# cc -s -O df.c
# cp a.out /bin/df
# rm a.out
在你运行 ed df.c
的时候,会出现诸如 1282
或者 1297
或者其他的数字,不用惊慌,这是正常现象。
i. 检查文件系统(check filesystems)
icheck /dev/rrk0
dcheck /dev/rrk0
icheck /dev/rrk1
dcheck /dev/rrk1
icheck /dev/rrk2
dcheck /dev/rrk2
j. 启动多用户登录服务(enable multiser)
默认的 /etc/ttys 文件没有监听多个端口,我们可以通过配置以下代码进行修改:
# ed /etc/ttys
1,8s/^0/1/p
w
q
#
k. 重启(reboot)
这里的多次运行 sync 并不是强迫症,也不是没有意义的,因为没有重启指令,我们只能强制同步多次,并且 Ctrl + E 中断退出模拟器:
# sync
# sync
# sync
# sync
# [## Hit CTRL-E here]
Simulation stopped, PC: 002502 (MOV (SP)+,177776)
sim> q
4. 正常运行(Running normally)
我们已经配置好了 Simh 和模拟器中的 Unix V6,每次运行的时候,我们都可以点击 pdp11.exe(或者从 cmd 中运行它),然后复制粘贴如下配置代码:
set cpu 11/40
set cpu idle
set tto 7b
set tm0 locked
attach rk0 rk0
attach rk1 rk1
attach rk2 rk2
attach lpt printer.txt
set dci en
set dci lines=8
set dco 7b
att dci 5555
boot rk0
其中的 5555 端口是提供给其他用户登录用的。接着我们在弹出来的 @ 后面输入 unix,在接下来提示的 login 后面以 root 用户登录。
至此,我们就搭建好了 Unix V6 环境了,你可以欢快的尝试各种 Unix V6 所支持的命令了:)
五、Unix V6 的使用
1. Unix V6 手册
作者在附录中给出了 Unix V6 的使用手册,大家可以看看,里面有相当详细的阐述,包括 Unix V6 所支持的命令以及相关解释、系统调用、C 函数库等等信息:
Unix V6 Manuals (http://man.cat-v.org/unix-6th/)
你可以参照里面的内容,使用 Unix V6 系统。
2. Unix V6 正常运行
有人可能嫌弃每次在 Simh 中运行 Unix V6 都要粘贴前面那一大串的配置信息,怎么样才能简化这个操作呢?
这个很简单,我们可以新建一个文件比如说 config.ini,将配置内容写入进去:
set cpu 11/40
set cpu idle
set tto 7b
set tm0 locked
attach rk0 rk0
attach rk1 rk1
attach rk2 rk2
attach lpt printer.txt
set dci en
set dci lines=8
set dco 7b
att dci 5555
boot rk0
然后使用 cmd 运行 pdp11.exe,后面加个参数 config.ini:
pdp11.exe config.ini
这样就可以直接跳到登录步骤,输入 unix 然后输入登录名 root 即可:
六、Unix V6 的源代码获取
Unix V6 的源代码获取地址,作者也在附录中有提到,这个网址能够找到各个古老历史版本的 Unix 源代码:
The Unix Tree
其中我们需要的 Unix V6 的源代码位于:
Unix V6 源代码下载
其中下载 v6src.tar.gz
即可看到完整的 Unix V6 源代码。
七、总结
至此,我已经把我在 Win10 上成功搭建 Unix V6 环境的过程一步一步的详细写出来了。终于算是松了一口气,没想到原以为内容不多的博客,还是洋洋洒洒写了这么多。这篇博客里面大幅度参考了作者指引的 wiki 和网上的一些博客内容,诚惶诚恐之中,就连英文的翻译都有些拿捏不准,难免有些纰漏,网友如有看不透的地方,还请多多包涵呀 ^_^
这篇博客里面涉及到的安装步骤,因为原文 wiki 是英文的,有些专业术语的翻译,我也拿捏不准,因此都附上了原文英文,方便大家查看,还希望大家谅解。
《Unix内核源码剖析》这本书我也刚开始看,有些内容也还不清楚,希望这篇博客能够给同样处于我这种情况的网友一些帮助,至少都能搭建一个 Unix V6 环境出来,开心的把玩一番也是好的~~~
To be Stronger:)
Unix V6 环境搭建:Simh 安装 Unix V6、Unix V6 基本使用以及源代码获取相关推荐
- itop和mysql_LAMP环境搭建+iTop安装(实测使用centos7更方便)
LAMP环境搭建+iTop安装(实测使用centos7更方便) 发布时间:2020-06-22 13:49:02 来源:51CTO 阅读:4953 作者:归来仍少年 栏目:数据库 centos 6.7 ...
- SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建——2.安装ros-kinetic
SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建--2.安装ros-kinetic 摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式 ...
- fabric 环境 搭建与安装
fabric环境搭建与安装 一.前期系统配置 1.安装操作系统为Ubuntu20.04的虚拟机,使用虚拟机进行fabric环境搭建与安装 2.为虚拟机配置国内源,以配置清华源为例(方便后面安装软件) ...
- SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建——1.安装系统ubuntu_mate_16.04...
SLAM导航机器人零基础实战系列:(五)树莓派3开发环境搭建--1.安装系统ubuntu_mate_16.04 摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认 ...
- 阿里云轻量应用服务器环境搭建-Docker安装tomcat
阿里云轻量应用服务器环境搭建-Docker安装tomcat 参考链接:https://www.runoob.com/docker/docker-install-tomcat.html 拉取官方的镜像: ...
- pybullet机器人仿真环境搭建 1.安装pybullet,测试官方示例,基础环境搭建
pybullet机器人仿真环境搭建 1.安装pybullet 前言 安装 测试官方示例 基础环境搭建 导入pybullet 创建服务端 (可选)配置图形GUI 添加资源路径 设置重力 加载模型 迭代运 ...
- uni-app(1)— 环境搭建(安装编辑器,创建项目,项目运行)
此文为uni-app总结笔记(1)- 环境搭建 (安装编辑器 – 创建项目 – 运行到浏览器,微信开发者工具) 一: 安装编辑器HbuilderX [下载地址] : https://www.dclou ...
- ubuntu20环境搭建+Qt6安装
ubuntu20环境搭建+Qt6安装 1 镜像地址 2 安装 3 更改源 4 搭建工作环境 4.1 删除libreoffice 4.2 删除Amazon的链接 4.3 删掉基本不用的自带软件(用的时候 ...
- Linux 下ffmpeg的环境搭建与安装
Linux下ffmpeg的环境搭建与安装 背景 [FFmpeg是什么] 1· FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源软件.采用LGPL或GPL许可证,提供了录制.转 ...
- 【Selenium项目实战】项目环境搭建:安装JDK、mysql、Tomcat、jpress和测试系统
前言 一直想学习自动化测试,但是都没行动,业余时间学习零零碎碎并记录20210416. [Selenium项目实战] 项目环境搭建:安装JDK.mysql.Tomcat.jpress和测试系统 需求分 ...
最新文章
- 第四周项目五-用递归方法求解(求n的阶乘)
- Python入门100题 | 第038题
- SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点
- python 全栈开发,Day79(Django的用户认证组件,分页器)
- final、finally与finalize的区别
- spark的Web UI中的Storage啥信息都没有
- 在JS函数中执行C#中的函数、字段
- grup2命令启动windows
- MyBatis Generator逆向工程生成实体、接口、映射文件等代码
- 论文阅读笔记(七)——Thin MobileNet
- 挑战性题目DSCT302:求不同形态的平衡二叉树数目
- 签名格式 - 职场 Email 礼仪
- 使用Sencha cmd安装extjs6
- mysql 通达信公式_公式选股--均线黏合(更多公式关注公众号“斯达克逻辑”)...
- 如何用电脑调试安卓手机浏览器上的网页
- Web前端最流行图表显示组件
- 百度云同同步盘 mac版
- Verilog 与门
- 美团点评2020校招数据分析方向笔试题
- [BZOJ]1071: [SCOI2007]组队 STL优先队列
热门文章
- MySQL万字总结!超详细!
- 在html中input是什么意思,HTML中input是什么意思
- Pdf文件打印功能恢复(绿色版)
- mysql 16进制字符串转中文_mysql如何把16进制转换成中文字符显示
- 超全前端面试题及答案
- arcgis中如何导出奥维可识别的图_如何在奥维中加载ArcGIS发布的地图服务
- 斯坦福博士生自制的 PPT 生成神器火了!
- 征文第一弹 | 中国民生信托:如何利用Informatica CDC实现增量数据捕获
- JAVA基于J2ME的手机游戏开发和实现——贪吃蛇
- Zabbix5.2发布,由loT物联网和综合监控驱动!