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     }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章