加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.52wenzhou.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux内核编码技巧之兄弟团圆

发布时间:2022-10-25 14:36:21 所属栏目:Linux 来源:网络
导读: 要掌握读懂linux内核不是一件容易的事情linux编码,除了要掌握操作系统原理和熟悉一些硬件、编译原理和各种框架、概念以外,还要懂得linux kernel源码在编码方式上使用的一些技巧。
我们刚

要掌握读懂linux内核不是一件容易的事情linux编码,除了要掌握操作系统原理和熟悉一些硬件、编译原理和各种框架、概念以外,还要懂得linux kernel源码在编码方式上使用的一些技巧。

我们刚开始为什么读不懂内核源码呢,一部分原因就是它的编码认知高度在我们普通人之上,至少在我之上。我总结了部分linux内核代码使用的一些技巧,并取了名字,其它没想到名字的就没列出来。

修改linux服务器编码_linux设置字符集编码_linux编码

我发现第7条,"兄弟两地发展,过年老家团圆“,这样的技巧很多人不太熟悉,也可能一时想不起来,我重点说这一条吧。

比如我最近看framebuffer方面的源码,看到一个DC设备probe函数要调用到register_framebuffer,这个函数里面突然调用device_create()这样的函数,前面没看到有注册fops,直觉告诉我,这是一个字符设备,而且它没有fops就玩不转。而且我们这边是framebuffer的设备,已经实现了fb_ops。

修改linux服务器编码_linux编码_linux设置字符集编码

这系列函数肯定要在这个字符设备的节点上通过read,write,ioctl等等这样的函数调用到,因为内核就是这样玩的。然后我用FB_MAJOR去搜索

linux编码_linux设置字符集编码_修改linux服务器编码

看到了吧,原来framebuffer框架在公用代码里面早早就调用了register_chrdev. 我们查看一下fb_fops.

linux编码_修改linux服务器编码_linux设置字符集编码

重点看fb_open这个函数,因为字符设备一般会在打开的时候做一些神操作,比如会建立纽带。

修改linux服务器编码_linux编码_linux设置字符集编码

可以看到iminor()利用inode上面的i_rdev设备号成员找到fb_index,继而找到framebuffer设备。

修改linux服务器编码_linux编码_linux设置字符集编码

修改linux服务器编码_linux设置字符集编码_linux编码

这样一来framebuffer的公共代码就跟自己实现的fb_ops完美结合在一起了。

这样是一个非常好的编码方式,其实内核到处都是这样玩的,内核只管实现自己的通用代码,然后我们程序员实现自己的fb_ops,在设备open的时候结合,终于回家大团圆。

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!