当前课程知识点:互联网体系结构 > 第三周:TCP协议与Linux内核 > Linux系统的编译、构建和调试 > Video
接下来
让我们需要看构建一个linux系统
因为我们需要构建一个linux系统
我们才能对这个linux系统里面的代码进行跟踪分析
对吧
跟踪分析
这样那我们只是读代码的话
就是纸上得来终觉浅对吧
我们可以代码读代码
可以一边的跟踪代码的执行过程
我觉得这样了
我们相互映照
这样对代码的理解更加深入
对吧也可以带着问题去阅读代码去追踪代码
这样学习效率会更高一些
所以那我们会建立起来
一个就是会自己构建一个
linux系统
然后呢
便于我们对就是linux内核的代码进行跟踪分析
那么构建linux系统的过程的大概是这样子的
我们首先你需要下载一个内核源代码的吧
我们就可能之前就是我们下载内核源代码
某一个版本的内核源代码
这样呢
我们根据这个源代码也是构建的内核
那么我们在读内核源代码的时候
这两者要匹配起来
对吧匹配起来
否则的话你跟踪的时候呢
他具体的代码行号可能版本号有细微的差异
他那个代码有变化
所以那你的代码的具体位置呢
你就是阅读的和跟踪的客户有差异就不太好了
所以呢
大家就是下载的时候呢
可以下载一个就是某一个版本
那么你在构建的时候阅读的时候也要就是使用相同的版本
只要两版本一致就好
我这样的事以5.0.1比较新的一个为例
这样
我们下载了我们使用这两个指令
把它解压哦
在linux里面可以解压
解压完之后呢
我们就是编译内核呢
他需要一些工具对吧
但是他需要的就是编译内核的工具
这里面那就是必要的
就是基础的
在linux基础的C开发环境
都有了就是打包安装那就可以了
但是linux内核还需要一些其他的一些
比如说
SSL对吧还有
还有这个,用到的这个图形图形界面的啊
对不对,是吧
你说
我们就是在18.04的ubuntu版本下
你只要一个指令安装一下
就可以把编译内核所需的所有的工具都可以安装好
我们再来看看这个配置内核
配置内核配置的命令挺多的
我们根据不同的用途哈
比如说
他是按照默认生成的
默认的就是你当前的linux系统编译产生系统是什么版本,是x86 64位还是32位
他的配置文件是不一样
但是我们可以指明哈
如果我们指明我们希望编译
32位的就是
如果是希望编译64位的
但是那我们也可以用命令行方式
自行的配置对吧也可以allyes就把所有的编译大内核把所有的allyes所有的选项都变成yes
也可以编一个很全小很小的内核
就是,把所有的选项都为否
对吧
然后呢
我们还可以
就是只用通过图形化界面的方式
就是编译
编译的时候
那我们可以直接在就是内核根目录前
恩也可以
make -j加个数字对吧这个呢
你若是多核CPU的话
比如说卖四核CPU的话
make -j4
你不是说那他就有就是多个CPU核心一起执行
这样编译的速度会快一些
恩我们也可以
就是有兴趣的小伙伴
也可以对你的内核进行升级
我可以体验一下最新版的内核
当然新的东西呢
有它的好处也有它的坏处
对吧
好处就是他的有很多新的特性
坏处呢就是他还可能还不稳定
对吧还还可能有有问题有问题所以呢
我们如果有兴趣升级内核的话
我们编译好之后
我想升级我把当前操作系统的内核给他升级一下升级他那你最好做一下这个备份
做下去恢复系统恢复的工作系统备份的工作
那我如果我们是使用虚拟机的话
比如说虚拟机的话
你可以通过系统快照备份一下哦
不要以防一升级
整个系统坏了
对吧
虽然我们升级的时候也很简单
就是
你要升级的话
你要访问一些特权的目录
所以那叫make
新装模块
然后再装make install加载内核
修改这个
这个我们都是在18.04下测试过的
然后再重新写系统重启系统之后
就可以看一下当前系统偶变成了5.0.1
对吧
所以这个升级系统有兴趣的可以尝试一下哦
然后呢
我们是编译内核
那跟踪内核呢
还是要通过就是
虚拟机的方式会更方便一些
然后拿我们通过虚拟机加载内核
就是你你编译的内核是I386的还是64位的对吧
32位的还是64位的
如果这次正常的我们是用64位的对吧
因为当前系统是64位的我们64位的
用这个可执行程序加一个选项
然后指名我编译好的那个
我就可以把它加载了
加载起来呢
这只是内核被初始化了一遍
但是呢
他没法
这个
但这只是内核被初始化了一遍
但是他没有办法
就是没有跟文件系统
没有我们的就是用程序对吧
所以那他就是会有
我们到这儿
我们被用这个命令就是把kernel加载起来
但是加载起来
他初始化
最后加载这个文件系统的时候
发现
对吧
他没法挂载一个文件系统没法挂在一个文件系统
这是一个很常见的错误啊
感觉很常见的
但是这次这说明了我们把内核给跑起来了
对吧
如果你只是跟踪这个内核初始化的部分
那么就是在这个这样就可以跟踪了对吧
如果你要跟踪哦
比如说socket网络编程
比如说其他的一些功能需要系统调用来触发的功能
那么你还需要再创建一个根文件系统
我们在这让他创建根文件系统的方法
我们在这儿就是提供了一些指令
可以创建根文件系统
比如说这个dd对吧
这是输入的
这就是我们创建一个这个四兆大小的BS4096
哎就是创建了这么一个镜像
然后那我们对这个镜像进行格式化
把它格式化成文件系统
然后呢
我们再创建一个目录
给它挂载到这个目录
下面挂载这个目录下面之后呢
我们就可以
我们就可以给他增加一些文件
对吧就是增加一些
就是我跟文件系统我们那我们这个实验里面呢
我们在就是这个实验里面
我们lab3里边的提供了一些代码
我可以把它放进去放进去
这个就是一个menu的程序
然后呢
我们把这个文件系统给卸载掉
我们就可以把它挂载起来
就是把他执行起来
我们可以试一下啊
OK那我们可以看到
这时侯那我们就呃
不只是把内核加载起来了
而且他还把我们创建了一个根文件系统
给加载起来了更新系统
里面有一个我们的程序
就是一号进程
那menu程序呢
里边他提供了几个命令
对吧提供了几个命令
哎
这几个命令
那就是我们可以看到他有一个TCP的服务
我们给大家内建的TCP的服务
我们可以在这儿可以跟踪TCP的服务
他服务是什么呢
这是一个server
那么客户端的是
实际上是哈喽客户端的程序呢
给服务端发送这个嗨,服务端回送回来一个哈喽对吧
这回终于好了
那就用这个服务端的他是我们创建的一个后台进程
所以我可以多次给他发送
-课程内容简介
--Video
-网络协议基础
--Video
--Video
--Video
--Video
-上网浏览网页背后的网络通信过程
--Video
--Video
-实验环境安装配置
--Video
-网络相关命令
--Video
--Video
-本周作业
--外部链接
-编译、构建和调试
--Video
--Video
--Video
-Socket接口
--Video
--Video
-UDP范例代码
--Video
-TCP范例代码
--Video
-本周作业
--外部链接
-TCP协议概述
--Video
--Video
-Linux网络协议栈源代码简介
--Video
-Linux系统的编译、构建和调试
--Video
--Video
-TCP协议源代码分析
--Video
-本周作业
--外部链接
-IP协议基础
--Video
-路由表
--Video
-路由转发举例
--Video
-IP协议栈源代码解析
--Video
-路由协议简介
--Video
-网络层数据传输路径解析
--Video
-本周作业
--外部链接
-ARP协议基础
--Video
-ARP解析的过程
--Video
-ARP解析在网络传输过程中的作用
--Video
-ARP协议栈源代码解析
--Video
-本周作业
--外部链接
-以太网基础
--Video
--Video
-交换机的学习、转发和过滤数据库
--Video
-常见二层协议
--Video
-数据链路层在Linux网络协议栈中的一些关键代码分析
--Video
-本周作业
--外部链接
-DNS协议基础
--Video
-DNS域名的存储
--Video
-DNS域名解析过程分析
--Video
-本周作业
--外部链接
-互联网架构设计的最初动机与核心目标
--Video
-互联网架构设计的具体目标及背后重要权衡
--Video
--Video
--Video
-课程考核
--外部链接







