《学活Linux》第二讲——内核模块和驱动模型

本文讲述了在《学活Linux》第二讲中,学习者掌握了内核模块和驱动模型的基本概念,通过实例“刘姥姥”驱动,了解了内核空间与用户空间的关系,以及如何构建和调试驱动。课程还介绍了Linux下的proc文件系统和LED控制的内核驱动应用。

f04fb683f102f12d67f7a8ad72b3b45c.png

《学活LINUX》 第二讲

内核模块和驱动模型

“各位观众晚上好。今天是7月29日,星期六,农历六月十二。欢迎收看《新闻联播》节目……台风‘杜苏芮’强度减弱,受其寒流继续北上影响,多地出现降雨天气……”

上周六是被风雨困在家中的一天,而盛格塾直播间中的格友们则在《学活Linux》的第二讲课程里度过了这个风雨交加的夜晚,掌握了Linux下内核模块和驱动模型的相关知识。

与第一讲相同,第二讲的试验设备仍是GDK8或幽兰代码本。

be04d97b3ac5b64960f5d2a670947dec.png

LKM

b025b0bdfc519c62e3d140d5a7b03a05.png

从操作系统层面来看,软件世界中最主要的便是内核空间和用户空间。用户空间是低特权、可见的;内核空间是高特权、不可见的。这跟传统道家哲学中的“阴”和“阳”很相似。

ae537ff948ac61df4112c8750a7e2165.png

张老师在软件在《软件调试》(卷2)中写到:“用户空间是可见的,很多程序在上面生生不息,属阳。内核空间不可见,但是承载着上面的应用,为应用提供服务,厚德载物,本身不发光,但是却能反射应用的光辉,像月亮,属阴。”事物总是充满悖论的,软件世界中也是如此。具有高特权的、神秘的内核空间是管理者、操纵者,主宰着整个系统的行为。本讲内容,我们就要写一个小程序,并安插这个模块到内核空间,这样的程序在Linux下一般就叫做LKM,即可加载内核模块。

“刘姥姥”驱动

beb6b544701e2aecaa442a77cb3be094.png

GDK 8和幽兰代码本已经准备好了这个LKM——“刘姥姥”。“刘姥姥”是GDK8和幽兰代码本的一大特色,它已经为大家准备好了构建驱动的环境,大家拿到机器之后就能构建驱动,可以节约更多时间成本。

343f35b0fef09a461705dbd8975c0da3.png

C语言的发明者丹尼斯·里奇说过:“学C语言最好的方法是用C语言写程序。”

同理,学Linux内核最好的方法便是读“活”代码,学“活”代码。如何学“活”呢?方法之一是写一部分代码,把它加载起来,再把调试器挂上去看;方法之二便是后面将会讲到的以命令方式进行交互。

紧接着,张老师便给大家演示了如何构建驱动,并跟驱动进行深层次的交互,用内核调试器把它断下来(具体操作可通过文末视频链接观看课程全部内容)。

proc文件

a2d7ba01117e11188b7c9153952d0c00.png

proc是Linux操作系统的一大特色,是Linux下管理进程的一个假文件系统。一个可加载内核模块可以通过假文件系统和用户空间进行交互。“刘姥姥”驱动里也注册了一个假的proc文件,并注册了其read和reread回调。它开创了一种新的模式,把write函数做解释,通过指示不同的命令与用户空间进行交互。张老师演示了如何读“刘姥姥”等操作。

1d39d07377206a9705160cb7880959c6.png

LED

7bc3b62c581a5e843125764557d0e1c1.png

GDK8的前面板是有LED的,且GDK8套件内含遥控器,大家可以操作遥控器通过数码管显示一些基本信息,如IP地址等。其工作原理也是基于内核驱动的,即其中的HT1628_driver。

bd160a5effdf919de607bd536d761610.png

7555e803f718b8a335b9c6023c528066.png

直播间的朋友也一直很认真地听课及讨论,张老师对于所提出的问题也给予了详细的解答。

71cdb3c13d8b6d3690e77a5adc4a21fa.png

最后,自本讲内容起,《学活Linux》课程直播活动改变了赠书形式,不再通过有奖竞答形式,而是在直播间中进行两次抽奖活动,两位幸运观众将直接获得由异步社区赞助的《奔跑吧Linux内核》的纸质书。

f79dae0ae25135b21c1843b399604396.png

未加入课程交流群的朋友可以扫描下方二维码进群交流,获得更及时、更详尽的课程信息。没参与直播的朋友也可以通过下方的视频链接观看回放,遇到问题进入微信群询问。本周六晚,哔哩哔哩“盛格塾”直播间继续《学活Linux》第三讲,张老师带你探索段错误和页机制。

395bec966b028411dd8cb4d786495f33.png

f3717ef41410dcff5783905c3ca2e928.png

ca2ec808644ab474112a46ae2074d4bb.png

// 微信群二维码 //

该二维码8月8日前有效

录播回放合集:https://space.bilibili.com/2080622547/channel/collectiondetail?sid=1559415

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

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

每周六 20:00 - 21:30

【盛格塾】

正心诚意,格物致知

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

5b7ddaeb4bd2f8dae599023fd993ff76.png

格友公众号

31a6b17d263f425f83d84492bbe05077.png

盛格塾小程序

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

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

往期推荐

光速角逐——纳秒级优化训练营

大代码时代里的一个大陷阱

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值