写在开年:移植wolfssl4.3.0到w60x_sdk_3.04时的一点问题
今年的春節想必會給大家留下深刻的印象,新冠病毒席卷中華,舉國閉門合院,人人自危。這里祝愿 病者得治,戰疫早勝。
可是工作還是得開始,今天正式開始搬磚了。這里想記錄了下之前做的一個事情,就是移植這個wolfssl的庫到w600的sdk了。如果移植到其它的芯片的sdk的話,其實也沒舍好說的,網上隨便找個教程就、搞定了,但是這個有點麻煩。按照步驟移植好后編譯時,會發現有好多函數是重名的,得有好幾十個函數,是些mp_xxx之類的數學相關的函數。
重名的函數是wolfssl里的有找到定義,但是別處也搜不到。既然搜不到,那應該定義在了sdk里的wifi_lib庫里了。當時想到幾個方案,列舉一下:
1,把wifi_lib里的相關函數都刪除掉,然后重新編譯生成一個直接使用wolfssl包里相關函數的訂制wifi_lib庫;
缺點:后續如果wifi_lib有升級,則需要持續維護這個訂制的庫,比較麻煩;
2,把wolfssl里的相關函數刪掉,讓其使用sdk里的wifi庫里的函數;
缺點:這樣做雖然可以消除錯誤,但是有風險。因為函數名雖相同,但是實現并不完全相同,wifi里的math相關函數版本較老,可以不能完全適配wolfssl里的函數。如果這樣做出了問題,排查起來將非常費力。
3,將wolfssl里的函數定義成static類型的,分散到使用到他們的相關文件里。
缺點:工作點異常大,調用關系復雜也導致需要調整函數的先后定義順序,幾乎不可能完成。另外如果函數被多個.c文件調用,則函數在多個文件里同時定義到此函數被此函數調用到的其它重名函數。
大概想到上面幾種,但是都不好,嚴謹來說是都沒法用。當天晚上下班到睡覺前,一直在想這個問題,這個思考方式往往能給我帶來靈感,找到問題的解決方法。這次也不例外,想到了一辦法:使用static inline這個關鍵字,具體:
a: 把wolfssl里面的integer.c修改成integer_c.h,換一下后綴名,修改成頭文件。所有的重名的大數據相關的函數都在這里。
b:?使用static inline修改里面所有的函數;
c:?根據調用關系調整里面使用static inline修飾的函數的順序。被調用的放到上面,調用到其它函數的放到后面;這部分是最費時間的步,不過還好,仔細點就行了。這一步一口氣完成下來還是會頭昏腦脹的。
d:?把wolfssl中所有調用到 integer.h的地方都修改成integer_c.h;
完成以上4步后,再編譯就沒問題了;這樣相互不影響,保持了很好的獨立性,同時也不破壞各自原有的功能。
?
總結
以上是生活随笔為你收集整理的写在开年:移植wolfssl4.3.0到w60x_sdk_3.04时的一点问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssl服务器测试网站
- 下一篇: 如何编译安装wolfssl