《学活Linux》第一讲——系统调用和VFS

44c02eb1b8680f1e02d8b20485a53eb0.png

《学活LINUX》 第一讲

系统调用和VFS

自确定《学活LINUX》课程详情以来,已有两周时间。相信很多格友们已经准备好GDK8,等待课程的开始。2023年7月22日,上周六晚,张老师刚刚参加完在京举办的K+大会,在八点准时开始了《学活Linux》第1讲,把“活”的Linux系统(GDK8)作为目标,使用内核调试器(挥码枪)将其中断到调试器,在调试器的帮助下,观察调用过程、执行现场。

b63bbeb24c90ff6d1066ced2bd99b328.png

建立对话

f7d23b77ba9f0364a36d129ef00f583c.png

首先,张老师带大家将活的Linux系统——GDK8及调试器挥码枪与主机进行连接,后在主机端启动Nanocode。

ccb8c95782c489c6e0c2d223ce70bcc5.png

由于挥码枪(内核调试器)通过USB接到了主机端,Nanocode便可以通过USB与挥码枪进行对话,因此在这里我们可以看到挥码枪的“自我介绍(PS:序列号在100以内的则是极其珍贵的挥码枪的第一批用户)”。

c4940a79e2aed528b43d22fe67892c60.png

除此之外,我们还可以看到挥码枪与目标系统之间——GDK8——的对话。开始调试之后,挥码枪会通过ADI来和SOC建立对话,这种基于硬件的调试对话代表着今天我们和芯片对话的一种高级技术。芯片的实体只是黑乎乎的一块,若不借助特殊工具,我们无法与之建立对话。所以我们选择这种内核调试的方式,去获取芯片中的信息。

6e9b51b3fc14358ab96542b32472ccef.png

别跑了,停下来

127f750b849fdb78af2bcdf4e2a2bc1e.png

至此,一切顺利。虽然挥码枪已与目标系统建立对话,但目标系统还在跑。接下来便通过挥码枪给目标系统Soc一个信号,告诉它:“ 别跑了,停下来。

加载符号之前

5ec21e244176a591b05ef7e6186c8f86.png

用内核调试器截停目标CPU之后,张老师详细解释了Linux内核断下来后弹出的一系列信息,并演示了加载符号之前,在没有符号的情况下可以做的调试任务:用r命令观察用户程序寄存器、u命令作反汇编、rdmsr命令访问系统寄存器、dd命令观察内存原始数据等。

3dd68c6977272eb8749e2465b786f52e.png

期间,张老师特别提到了一条著名的wfi(Wait for Interrupt)指令,并以疫情阶段在休息期间不敢脱下防护服、随时待命的大白们作喻,让大家可以瞬间理解wfi的含义及功能。

b64df2d7c5597418eb53803b572114f3.png

符号化调试

1d7e0d8e53c5fc2c94d935ba6379fa06.png

二进制的调试任务对一些程序员来说可能有几分不好理解,这时候就需要加载符号,使得广大从业者能够通过看源代码来实现高效调试。课程中张老师就逐步地演示了如何使用GDK8进行调试:准备符号文件→设置符号路径→执行.reload命令,(重新)加载符号文件(扫描文末二维码观看课程全部内容)。

K命令,你会吗?

9541de360dfc80c50268200107d61ca1.png

加载符号文件之后,就可以看到模块列表;可以使用k命令看调用栈,观察软件的执行经过,看到它是从哪儿来;可以设置源文件搜索路径,根据执行经过,用.frame命令实现时光回溯,切换至真正的执行经历,即“活”代码……

张老师针对上述各功能进行了详细的演示及讲解,带大家一起上手操作GDK8的,一起读“活”代码,读CPU真正执行过的代码。

设置断点

686f8094225ab7df12a4406e18a13a9b.png

从调试原理讲,软件断点有两种方式:软件断点和硬件断点。相较与安全大趋势冲突的软件断点,后者不需要修改代码空间,其原理为告诉目标Soc“我对这个地址感兴趣,等一下如果访问这个地址要停下来”。张老师也演示了用硬件断点命令设置断点的具体操作。

3793bd3b4d9dc859a90c1859853e5936.png

系统调用是内核空间对上提供服务的一种方法。它存在的意义是给应用程序提供服务以管理系统。那应用程序怎么调服务呢?便是执行特殊的svc指令。张老师在课程后半部分详细讲解了系统调用、系统服务表,演示了从用户空间到内核空间入口分发的过程。进入内核空间后,由于调用的是读文件,便转到了文件系统,即Linux下的VFS,对此,课堂中也进行了详尽的介绍(扫描文末二维码观看课程全部内容)。

a2198004cb5f1dbffd5c1fac7c2f71e0.png

质疑问难

1860d1745152f7a5bb2a88232a14df01.png

通过张老师细致的讲解,加之对多个命令的实操演示,相信大家在听完这一讲内容之后,已经知道了“为什么要使用内核调试器?手中的GDK8套件是什么?能实现什么功能?怎么实现?”这些问题的答案。我们的课程助理也一直在线答复格友们的疑问,尽力让大家都跟得上张老师的调试进度,在听完课程之后真的有所学,有所成。

0de1911d43e895ed69190e82f7fa2a3b.png

cf23ea982d97704f3c9370f6e46597d6.jpeg

ba07d5f911abc5e7537e0b6c0167d04a.jpeg

最后,非常感谢直播间和课程交流群的格友们对本次课程的喜欢和支持!

未加入课程交流群的朋友可以扫描下方二维码进群交流,获得更及时、更详尽的课程信息。没参与直播的朋友也可以扫描下方二维码观看回放,遇到问题进入微信群询问。下周六晚,哔哩哔哩“盛格塾”直播间继续《学活Linux》第二讲,张老师带你探索内核模块和驱动模型。

776e6a791acb2d8177180291cdff4220.png

0a621c603dfe3b979f920d05d9e395a6.png

94294df351df1e7c770067d9ae9ac709.png

// 微信群二维码 //

该二维码8月3日前有效

直播间链接:http://live.bilibili.com/24576892

直播时间:2023年7月22日至9月2日

每周六 20:00 - 21:30

【盛格塾】

正心诚意,格物致知

人文情怀审视软件,以软件技术改变人生

870fd74056dde95439e7134c20422085.png

格友公众号

007cb879d663613629b1b8bc94c982d7.png

盛格塾小程序

扫描上方二维码或在微信中搜索“盛格塾”小程序

可以阅读更多文章和有声读物

往期推荐

【小白学编程5】我的房子在哪儿?理解类型和变量

软件工程师的“硬功夫”

LINUX平台高级调试和优化(上海站)

有一个驱动叫刘姥姥

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值