kylin3.0代码适配

问题:原本代码在kernel > 2.6.32的版本上编译通过,移植到当前的环境,kylin3.0,kernel = 2.6.18-SKL1.9.4.ky3.173.4.1 上,编译出现如下错误:

错误:‘CSUM_MANGLED_0’ 未声明 (在此函数内第一次使用)
错误:(即使在一个函数内多次出现,每个未声明的标识符在其
错误:所在的函数内只报告一次。)

解决步骤如下:
1.因为高版本的是可用的,所以我们先看看高版本上这个是什么

# grep "CSUM_MANGLED_0" /usr/src/kernels/3.10.0-862.el7.x86_64/ -rin
/usr/src/kernels/3.10.0-862.el7.x86_64/include/net/checksum.h:108:#define CSUM_MANGLED_0 ((__force __sum16)0xffff)

搜索当前版本,并没有这个变量

2.可以看出,CSUM_MANGLED_0这个宏是由__force 和__sum16这两个私有宏代替的,先看一下__sum16,找到他在include/types.h中定义

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200704101244689.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Jvb3RsZWFkZXI=,size_16,color_FFFFFF,t_70)

通过上图可以看到,左边是高版本的,右边是当前版本,在当前版本中没有__sum16,这是由__u16 __bitwise的别名,两边都有一个相同类型的__le16,我觉得这个比那辆有搞头。

3.再看__force,通过查询,发现在linux/compiler.h中定义,再对比新旧版本,发现都有这个文件相同定义,我觉得可以用
4.找到了两个代替的变量,进行替换,编译通过,解决

519     if ( th->check == 0 ){
 520         //th->check = CSUM_MANGLED_0;
 521         th->check = ((__force __le16)0xffff);
 522     }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章