分享

有一个驱动叫刘姥姥

 新用户62659642 2023-07-28 发布于湖南

llaolao

  有一个驱动叫刘姥姥

图片

There is a driver named 'llaolao'.

  有一个驱动叫刘姥姥  

刘姥姥是曹雪芹在《红楼梦》中塑造的一个著名角色。在《红楼梦》的众多角色中,刘姥姥是个配角,是一个乡下老太太。虽不是主要人物,曹公却不吝笔墨,大书特书,多次出场,尤其是两进荣国府,写得栩栩如生。而其中最精彩和妇孺皆知的,莫过于刘姥姥进大观园。在端庄文雅的小姐和贵夫人当中,她讲话粗俗,但却幽默实在,成为大家的“开心果”。

因为来自劳苦大众,言谈举止都“很接地气”,所以即使那些没认真读过《红楼梦》的人也都知道刘姥姥这个角色。

缘起

2016年夏季,在准备LINUX内核课程的时候,我想设计个小例子,让学习者可以很快上手开发一个内核模块,再通过内核模块来认识LINUX内核世界。顺着这个思路,当时的课程大纲中,第一讲是《从Linus说起》,第二讲便是《初始内核模块》。

图片
图片

在设计第二讲《初始内核模块》的讲义时,我构思写一个小的内核模块,在给这个内核模块取名字时,刚开始想把这个驱动叫helloworld,后来又想到hikernel,但都还不够生动。苦想之际,刘姥姥三个字跃入脑海,让我感觉眼前一亮。于是便有了刘姥姥驱动(llaolao)的第一个版本。

图片

从此,这个驱动便走入了我的软件世界。每次讲Linux时,一般都会讲到这个驱动,提到刘姥姥,每次准备新的实验环境时,都会记得把这个驱动复制过去。

另外,在我学习和探索Linux内核的某个功能时,我喜欢写点代码试试,于是便在刘姥姥中增加功能。

命令机制

刘姥姥驱动有个命令机制,用户可以通过/proc/llaolao这个虚文件接受用户输入的命令。比如输入hot 命令,就可以显示系统的温度。

图片

上图中的34000和33000分别代表34和33摄氏度。

日积月累,今天,刘姥姥驱动已经支持很多个命令,下面是格蠹小伙伴总结的列表:

echo div0 | sudo tee -a /proc/llaolao

表示进行除0操作。输入dmesg可以看到进行了div0操作。

图片
echo nullp | sudo tee -a /proc/llaolao

表示进行测试空地址操作。输入dmesg可以看到进行了nullp操作。这里会出现core dumped错误,这正是我们想看到的。结果如下图所示。

图片
echo timer0 | sudo tee -a /proc/llaolao

表示进行了时间操作。输入dmesg可以看到进行了timer0的结果,结果如下图所示。

图片
echo percpu | sudo tee -a /proc/llaolao

表示进行了查看每一个cpu信息的操作。输入dmesg可以看到进行percpu操作后的结果,结果如下图所示。

图片
echo sysreg | sudo tee -a /proc/llaolao

表示进行了查看系统寄存器信息操作。输入dmesg可以看到进行sysreg操作后的结果,结果如下图所示。

图片
echo ulan | sudo tee -a /proc/llaolao

表示进行控制幽兰设备的JTAG开关操作。输入dmesg可以看到进行了ulan操作,结果如下图所示。

图片
echo iram | sudo tee -a /proc/llaolao

表示进行iram读写测试操作。输入dmesg可以看到进行了iram操作,结果如下图所示。

图片

与时俱进

2021年,格蠹科技推出了基于ARMv8 SOC的开发套件GDK8。于是,刘姥姥便被移植到了GDK8,移植时,增加了一些针对GDK8硬件的功能,比如观察系统寄存器,读芯片温度等。今年,格蠹科技研发了基于RK3588的代码本,于是,刘姥姥驱动又被移植到了幽兰代码本。移植时,再次进行改进,增加了对RK3588芯片的支持。

今年夏季,多名大学生到格蠹实习,其中一位对刘姥姥驱动进行改进。让它可以动态识别硬件,以自适应的方式处理硬件差异。代码完成后,写了一篇很不错的文章《升级刘姥姥驱动有感》。

图片

大有裨益

可能是因为刘姥姥这个名字接地气,每个人看了这个驱动的名字后,都记住了它。所以,有新任务时,很自然的就想到了它。似乎,刘姥姥驱动已经走进了大家的思维空间。

在格蠹,我和小伙伴们都喜欢拿刘姥姥驱动做PoC(概念验证)。比如今早,我在规划新的串口功能时,又是把刘姥姥驱动放在开发计划里。

图片

因为大家都熟悉这个驱动,所以,我和小伙伴交流这个做法时,大家一看就懂,脑海里立刻就有了一幅“图”。

格蠹的实习生们大多也认识刘姥姥驱动。而且很快就能使用这个驱动做新的事情,“为我所用”。

图片

GDK8和幽兰的用户们,也有很多人喜欢刘姥姥驱动,拿它学习,探索内核。

图片

为了让更多人受益于这个驱动,前几天,我又安排小伙伴在幽兰的wiki中写了一篇文章,介绍刘姥姥驱动的基本用法,包括编译,加载和使用。

图片

事上磨练

我喜欢朱熹,爱他的格物之法,但偶尔也读一点王阳明,理解一下“阳明心学”的奥秘。虽然不直接说格物,但是阳明心学的一个重要原则便是“事上磨练”。简单来说,事上磨练就是要到真实的世界里,经历真实的事情。

很多人学了很多年的Linux,但是没写过一行内核代码,这导致很多理解始终停留在概念层面,没有接到地气。

刘姥姥驱动则不然,通过它,用户可以亲手写代码,把自己的代码放入到内核世界,像刘姥姥进大观园那样真正走进LINUX内核世界。实际走进去看和在外面观这两种境界是迥然不同的。

【盛格塾】

正心诚意,格物致知

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

格友公众号

盛格塾小程序

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多