0%

周谈(56)- linux 6.6版本内核驱动适配

前言

本周突然在聊天群里被合作方@了,需要我们提供一般适配linux6.6内核版本的驱动,客户是上帝,马上响应~

驱动适配

第一步就是从官网下个6.6版本的内核,然后在机器上编译替换内核,这个比较简单~;

然后就是基于6.6内核的build路径,修改驱动Makefile后编译,后面就是遇水搭桥了,有问题解决问题。

最后,就基于修改后的代码跑一下测试用例。最终打包发布版本。

主要问题

主要解决了4个问题,都是内核接口变更导致的。

Class_create 参数变化

在linux6.4.0之后,Class_create删除了module参数,编译时报错如下:

1
2
3
4
5
6
In file included from ./include/linux/device.h:31,
from ./include/linux/platform_device.h:13,
from /root/hmw/s5000c_ce/driver/src/usr/pce_char.c:3:
./include/linux/device/class.h:230:54: 附注:需要类型‘const char *’,但实参的类型为‘struct module *’
230 | struct class * __must_check class_create(const char *name);
| ~~~~~~~~~~~~^~~~

使用LINUX_VERSION_CODE判断版本大小,作一下适配就好了。

非对称结构struct akcipher_alg成员变更

编译时报错信息如下:

1
2
3
4
5
6
/root/xxx/rsa.c:1234:3: 错误:‘struct akcipher_alg’没有名为‘reqsize’的成员
1365 | .reqsize = sizeof(rsa_context_t) ,
| ^~~~~~~
/root/xxxx/rsa.c:1234:13: 警告:initialization of ‘struct list_head *’ from ‘long unsigned int’ ma kes pointer from integer without a cast [-Wint-conversion]
1365 | .reqsize = sizeof(rsa_context_t) ,
| ^~~~~~

reqsize成员挪动了位置,需要在算法init函数中set_reqsize。

内存映射结构体struct vm_area_struct成员属性变更

编译时报错信息如下:

1
2
3
4
5
 错误:向只读成员‘vm_flags’赋值
171 | vma->vm_flags |= VM_LOCKED | VM_DONTCOPY | VM_DONTEXPAND | VM_DONTDUMP;
| ^~
make[3]: *** [scripts/Makefile.build:24

不允许设置vma->vm_flags了,直接注释掉。

注册算法的时候,直接挂死了

这个主要是在计算结束时,不能直接调用req->base.complete了,complete的参数变更了,需要使用相应的接口替换 如aead_request_complete。

注册xts模式时,额外测试失败了

这个属于与内核软算法不一致的处理,导致extra tests返回失败。参考xts模式处理,当req->cryptlen < 16时返回值与默认的不一致, 改为-EINVAL
解密错误时 返回-EINVAL。

更多

刚开始接到需求的时候,以为跟之前的5.x版本一样,只需要稍微编译一下就可以解决了,没料到6.x一开始编译就有几个问题,以为要花费一周以上来修改了。最终3天就搞定了,进度还是提前了。
加上前面对checkpatch的格式修订一起,这回发布的版本改动还是蛮大的。总之,开发遇到问题解决问题就是了,就怕那些遇到问题就卡住不动了的。

四五月这两个月的业余时间都花在软考系统分析师上面了,平均每天下班都花1~2个小时学习,越是临近考试发现准备的越不充分了,硬着头皮去考了,感觉有点悬啊,坐等6月底或者七月初的成绩,不行就要备战下半年了。6月这段时间就补一下工作用得到的基础吧!

今年软考又改革了,系统分析师和架构师可以一年考两次,说实话,虽然这个学习有点儿纯粹为了应试,但还是可以系统的学到许多知识,包括计算机综合知识、数据库、软件工程、需求工程及新技术等各个方面。

活到老学到老,加油吧,先提升自己,摆脱焦虑!


行动,才不会被动!

欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。

欢迎关注

博客地址: https://fishmwei.github.io

掘金主页: https://juejin.cn/user/2084329776486919