Linux内核学习

Linux内核学习

前言

为什么要看从Unix看起呢?因为Linux之父是参考Unix写出Linux的,所以追根溯源我就找到这里,打算从Unix源码看起,加上自己学习操作系统的学得很烂,不知道是自己的学习问题?还是操作系统理论知识本身就很抽象?于是,我就找到了《Unix内核源码剖析》这本书,从看源码然后再回头翻操作系统理论的书,沿着Unix->Linux->Android这条路走下去,逐步地对操作系统有进一步地理解。

Unix源码阅读

前期环境搭建

资料下载

在网上找到书上学习Unix内核的材料,网盘地址如下:

链接:https://pan.baidu.com/s/1upOLt8h0U93spDuSEz4C4g 
提取码:34cb

Simh 中配置安装 Unix V6

下载解压Unix V6

上面的网盘地址如果失效,请联系本人更新地址,然后下载Unix V6解压里面的三个压缩文件到本地,应该看到这样的三个文件夹:

  • simhv39-0-exe
  • Unix-v6-Ken-Wellsch.tap
  • v6src

重命名Unix-v6-Ken-Wellsch.tap

Unix-v6-Ken-Wellsch.tap这个文件夹中的Unix-v6-Ken-Wellsch.tap这个文件首先重命名dist.tap,再复制黏贴simhv39-0-exe这个文件夹里。这里为什么要重命名呢?因为在后面加载boot这段代码中有这样一行代码sim> attach tm0 dist.tap,这里的dist.tap在我们下载到的三个文件夹中都没有,所以由此可以推断它是重命名来的,但是它有什么作用呢?暂时留下一个疑问。

查看simhv39-0-exe文件目录下的文件

为什么这里会有一步查看这个文件夹下的所有文件呢?因为我发现配置参数之后,会在这个文件夹目录下新生成一些文件,所以在这里先把原有的所有文件做一个记录,到时候方便分析生成的过程发生了什么。

cmd方式查看

考虑到有些同学没有在电脑里安装Git,就使用Windows最原始的方法去查看,快捷键win+R,在这里win一般表示的是在键盘左下方的微软图标,然后弹出来的运行窗口输入cmd,一般一开始的路径是:

C:\Users\Administrator>

然后我们需要切换到simhv39-0-exe这个文件夹的磁盘下,所以我们要光标处输入磁盘符,我这个文件夹在e盘,我的输入是这样的:

C:\Users\Administrator>e:

然后显示代码是这样的:

C:\Users\Administrator>e:

E:\>

这个就表示我们已经进入到e盘的路径下,接着切换到该文件夹路径下,Tab键对文件夹的名字进行补全,由于我是在百度网盘下载的,所以我这里e盘的根目录下是BaiduNetdiskDownload文件夹,使用cd 文件名(注意这里有个空格)进入文件夹目录下,由于cmd窗口的代码不能复制黏贴,所以整个过程大致输入如下:

C:\Users\Administrator>e:

E:\>BaiduNetdiskDownload>cd "Unix V6"

E:\>BaiduNetdiskDownload\Unix V6>cd simhv39-0-exe>

E:\>BaiduNetdiskDownload\Unix V6\simhv39-0-exe>

最后,成功显示这样的路径***:\>***\Unix V6\simhv39-0-exe>就表示已经进入simhv39-0-exe文件夹中了,然后使用dir命令查看这个文件夹中的所有文件,由于文件比较多,所以就截图了:

Git Bash Here方式

Git Bash Here方式就比较简单,这个要在电脑上事先安装Git软件,直接进入到simhv39-0-exe文件夹下,右键点击该文件夹选择Git Bash Here,然后使用ls -lt命令进行查看:

Administrator@PC-20210109IEYU MINGW64 /d/simhv39-0-exe
$ ls -lt
total 13984
-rw-r--r-- 1 Administrator 197121 6291996 四月   19 14:54 dist.tap
-rwxr-xr-x 1 Administrator 197121  201223 五月    4  2012 swtp6800mp-a2.exe*
-rwxr-xr-x 1 Administrator 197121  198732 五月    4  2012 swtp6800mp-a.exe*
-rwxr-xr-x 1 Administrator 197121  192894 五月    4  2012 h316.exe*
-rwxr-xr-x 1 Administrator 197121  158566 五月    4  2012 lgp.exe*
-rwxr-xr-x 1 Administrator 197121  214245 五月    4  2012 sds.exe*
-rwxr-xr-x 1 Administrator 197121  244623 五月    4  2012 id32.exe*
-rwxr-xr-x 1 Administrator 197121  234367 五月    4  2012 id16.exe*
-rwxr-xr-x 1 Administrator 197121  233236 五月    4  2012 ibm1130.exe*
-rwxr-xr-x 1 Administrator 197121  293948 五月    4  2012 i7094.exe*
-rwxr-xr-x 1 Administrator 197121  161305 五月    4  2012 gri.exe*
-rwxr-xr-x 1 Administrator 197121  661949 五月    4  2012 altairz80.exe*
-rwxr-xr-x 1 Administrator 197121  161691 五月    4  2012 altair.exe*
-rwxr-xr-x 1 Administrator 197121  182294 五月    4  2012 s3.exe*
-rwxr-xr-x 1 Administrator 197121  193458 五月    4  2012 i1620.exe*
-rwxr-xr-x 1 Administrator 197121  188159 五月    4  2012 i1401.exe*
-rwxr-xr-x 1 Administrator 197121  437997 五月    4  2012 hp2100.exe*
-rwxr-xr-x 1 Administrator 197121  263665 五月    4  2012 eclipse.exe*
-rwxr-xr-x 1 Administrator 197121  199700 五月    4  2012 nova.exe*
-rwxr-xr-x 1 Administrator 197121  563019 五月    4  2012 vax780.exe*
-rwxr-xr-x 1 Administrator 197121  497421 五月    4  2012 vax.exe*
-rwxr-xr-x 1 Administrator 197121  341096 五月    4  2012 pdp10.exe*
-rwxr-xr-x 1 Administrator 197121  584150 五月    4  2012 pdp11.exe*
-rwxr-xr-x 1 Administrator 197121  241230 五月    4  2012 pdp15.exe*
-rwxr-xr-x 1 Administrator 197121  233454 五月    4  2012 pdp9.exe*
-rwxr-xr-x 1 Administrator 197121  262525 五月    4  2012 pdp8.exe*
-rwxr-xr-x 1 Administrator 197121  226422 五月    4  2012 pdp7.exe*
-rwxr-xr-x 1 Administrator 197121  224715 五月    4  2012 pdp4.exe*
-rwxr-xr-x 1 Administrator 197121  199295 五月    4  2012 pdp1.exe*
-rw-r--r-- 1 Administrator 197121  131072 四月    1  2008 ka655x.bin
-rwxr-xr-x 1 Administrator 197121   44544 五月    5  2005 vmb.exe*

配置 Unix V6 的系统启动参数

运行pdp11.exe可执行程序

打开simhv39-0-exe这个文件夹,找到可执行程序pdp11.exe,点击该程序,然后会弹出这个一个窗口,然后我们就可以配置 Unix V6 的系统启动参数。本来按照网上的教程应该是,复制下面这段代码,这里的复制是指一行一行地复制,而不是一整段复制,鼠标右键黏贴到弹出的窗口后的光标处,但是不知道是不是我是win7,教程博主用的是win10,所以我这里是黏贴不了的。

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
加载boot

于是,我就按照上面这段代码的顺序在弹出窗口的光标处依次输入,直到最后一行,我这里的窗口与显示的代码大致如下:

PDP-11 simulator V3.9-0
sim> set cpu 11/40
Disabling XQ
sim> set tm0 locked
sim> attach tm0 dist.tap
sim> attach rk0 rk0
RK:creating new file
sim> attach rk1 rk1
RK:creating new file
sim>attach rk2 rk2
RK:creating new file
sim>d cpu 100000 012700 
sim>d cpu 100002 172526
sim>d cpu 100004 010040
sim>d cpu 100006 012740 
sim>d cpu 100010 060003
sim>d cpu 100012 000777 
sim>g 100000
  • 加载引导块
  • 将根分区加载到 rk 文件上去

这是网摘对这个过程的解释,先找照着做,以后再回来进行补充说明。

再次查看所有文件

到这里我们看到的是光标在那里闪,我们再用上面的两种方法去查看经过这次输入之后会生成那些文件,我这里用的是第二种方式,回到simhv39-0-exe目录下右键选择Git Bash Here

Administrator@PC-20210109IEYU MINGW64 /e/BaiduNetdiskDownload/Unix V6/simhv39-0-
$ ls -lt
total 13984
-rw-r--r-- 1 Administrator 197121       0 四月   19 14:43 rk2
-rw-r--r-- 1 Administrator 197121       0 四月   19 14:42 rk1
-rw-r--r-- 1 Administrator 197121       0 四月   19 14:41 rk0
-rw-r--r-- 1 Administrator 197121 6291996 四月   19 11:20 dist.tap
-rwxr-xr-x 1 Administrator 197121  201223 五月    4  2012 swtp6800mp-a2.exe*
-rwxr-xr-x 1 Administrator 197121  198732 五月    4  2012 swtp6800mp-a.exe*
-rwxr-xr-x 1 Administrator 197121  192894 五月    4  2012 h316.exe*
-rwxr-xr-x 1 Administrator 197121  158566 五月    4  2012 lgp.exe*
-rwxr-xr-x 1 Administrator 197121  214245 五月    4  2012 sds.exe*
-rwxr-xr-x 1 Administrator 197121  244623 五月    4  2012 id32.exe*
-rwxr-xr-x 1 Administrator 197121  234367 五月    4  2012 id16.exe*
-rwxr-xr-x 1 Administrator 197121  233236 五月    4  2012 ibm1130.exe*
-rwxr-xr-x 1 Administrator 197121  293948 五月    4  2012 i7094.exe*
-rwxr-xr-x 1 Administrator 197121  161305 五月    4  2012 gri.exe*
-rwxr-xr-x 1 Administrator 197121  661949 五月    4  2012 altairz80.exe*
-rwxr-xr-x 1 Administrator 197121  161691 五月    4  2012 altair.exe*
-rwxr-xr-x 1 Administrator 197121  182294 五月    4  2012 s3.exe*
-rwxr-xr-x 1 Administrator 197121  193458 五月    4  2012 i1620.exe*
-rwxr-xr-x 1 Administrator 197121  188159 五月    4  2012 i1401.exe*
-rwxr-xr-x 1 Administrator 197121  437997 五月    4  2012 hp2100.exe*
-rwxr-xr-x 1 Administrator 197121  263665 五月    4  2012 eclipse.exe*
-rwxr-xr-x 1 Administrator 197121  199700 五月    4  2012 nova.exe*
-rwxr-xr-x 1 Administrator 197121  563019 五月    4  2012 vax780.exe*
-rwxr-xr-x 1 Administrator 197121  497421 五月    4  2012 vax.exe*
-rwxr-xr-x 1 Administrator 197121  341096 五月    4  2012 pdp10.exe*
-rwxr-xr-x 1 Administrator 197121  584150 五月    4  2012 pdp11.exe*
-rwxr-xr-x 1 Administrator 197121  241230 五月    4  2012 pdp15.exe*
-rwxr-xr-x 1 Administrator 197121  233454 五月    4  2012 pdp9.exe*
-rwxr-xr-x 1 Administrator 197121  262525 五月    4  2012 pdp8.exe*
-rwxr-xr-x 1 Administrator 197121  226422 五月    4  2012 pdp7.exe*
-rwxr-xr-x 1 Administrator 197121  224715 五月    4  2012 pdp4.exe*
-rwxr-xr-x 1 Administrator 197121  199295 五月    4  2012 pdp1.exe*
-rw-r--r-- 1 Administrator 197121  131072 四月    1  2008 ka655x.bin
-rwxr-xr-x 1 Administrator 197121   44544 五月    5  2005 vmb.exe*
对比差异

对比上次的输出,我们会发现新生成三个文件分别是rk0rk1rk2

-rw-r--r-- 1 Administrator 197121       0 四月   19 14:43 rk2
-rw-r--r-- 1 Administrator 197121       0 四月   19 14:42 rk1
-rw-r--r-- 1 Administrator 197121       0 四月   19 14:41 rk0

其实,我们在PDP-11那个窗口输入时,所输出的这行代码RK:creating new file,也可以知道这三个文件是新生成的。

退出加载,配置磁盘

我们接着这里的输出代码:
加载boot,快捷键Ctrl + E退出加载过程,然后窗口会输出这样一段代码Simulation stopped,PC:100012<BR 100012>,表示模拟器已经停止了,我们接着输入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,退出配置过程,最后在光标处输入q,到目前为止,窗口显示的情况如下:

安装磁盘

在上一步我们在光标处输入q,再按下Enter键就可以退出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

到这里为止,PDP-11可执行程序窗口的运行情况如图所示:

修改大小写

为什么要修改大小写呢?因为无论我们在#后面的光标处输入什么,它都输出大写,所以我们这里需要把它改为小写,输入以下代码修改为小写:

# STTY -LCASE
重新构建内核

#后的光标处接着输入以下代码进行重构内核,记得每输完一行按Enter进行确认:

chdir /usr/sys/conf
cc mkconf.c
mv a.out mkconf
配置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
上一篇:第一个程序Hello World


下一篇:python安装aip包