ESD-CAN安裝調試筆記


方法一 編譯帶ESD-CAN的Apollo-RT-Kernel

該方法是將原生的Linux內核(linux-4.4.32)打上esdcan的補丁(esdcan_patch),然后使用apollo提供的build.sh 腳本編譯成實時內核。下面具體介紹操作步驟。

下載apollo-kernel,命令如下:

git clone https://github.com/ApolloAuto/apollo-kernel.git

內核文件准備工作

  • 下載Linux內核
    點擊該鏈接即可下載:
    Linux Kernel 4.4.32

    tar zxvf linux-4.4.32.tar.gz
    

    將解壓后目錄下的所有文件copy到 apollo-kernel/linux路徑下。你會發現在linux/drivers/路徑中沒有esdcan的目錄。所有的內核驅動都是在其根目錄drivers下的,esdcan驅動不是linux支持的,因此沒有其源代碼。

  • 打esdcan的補丁
    在 ~/apollo-kernel/linux/patches路徑下,將文件esdcan.patch復制到linux目錄中。

    在linux目錄下,執行如下命令進行打補丁操作:

    patch -p1 < esdcan.patch
    

    此時查看./drivers/路徑 ,發現esdcan目錄已經存在。

  • 根據你選用的ESD-CAN卡型號,在附贈光盤中選取對應的驅動,解壓,將 src/路徑下除Makefile之外的所有文件copy到 ~/apollo-kernel/linux/drivers/esdcan/ 路徑下。命令為:

    cd ~/apollo-kernel/linux/drivers/esdcan/
    cp -ri ./src/* .  #請將源路徑替換成自己驅動src目錄所在的路徑
    
  • 執行如下命令

    cd drivers/esdcan/;ln -s Makefile.esd Makefile;ln -s Kconfig.esd Kconfig;cd ../..  #如果鏈接不成功,刪掉 Makefile或 Kconfig重新進行進行即可
    

編譯

成功執行完上述操作,你當前的路徑應該是
~/apollo-kernel/linux/$
在該路徑下執行apollo官方提供的腳本進行編譯:

./build.sh rt #rt參數表示只編譯實時(RT)內核,其他參數參數請用"./build help"查看,或者直接打開該腳本一飽眼福,哈哈

編譯整個內核啊,這是一個漫長的過程,在我新嘎嘎的 Nuvo-6108GGC E3-1275-V5 八核處理器上,編譯了半個多小時呢。編譯剛開始時,你可以看看前面輸出的信息,說是編譯的RT內核,ESD-CAN支持 ,blablabla...... 驀然回首,一個編譯好的鮮活生動的內核已經出爐!你可以在
~/apollo-kernel/linux/install/rt/ 路徑下看到install.tgz文件,這就是內核安裝包。解壓,執行install路徑下的腳本進行安裝。如果你多看一眼,你會發現還有一個裝N卡驅動的腳本,在本人的機器上,親測可用。

內核默認啟動選項修改

至此,帶有ESD-CAN支持的apollo-rt-kernel的編譯安裝工作已經結束。但是你reboot會發現,啟動的還是之前的內核。此時,你需要在grub.cfg中修改默認啟動內核選項啦,具體做法,不會的請自行
百度一下。

方法二 Build & Install Out-of-Tree ESD Kernel Driver

這個比較快,操作也簡單,請參考apollo官方文檔
方法一
操作那么復雜,存在意義是什么呢,我簡單嘮叨兩句:

  • 編譯好的內核,你可以保存下來,以后直接安裝就行(ESD-CAN的型號一致的話)。
  • 藝多不壓身啊,有些時候你不得不編譯內核

ESD-CAN調試

折騰這么久,你肯定想看看這個CAN能不能正常工作嘍。然而當你按照APOLLO官方文檔進行測試時,並不能順利進行。下面我總結一下正確的測試過程,希望對大家有幫助。額,測試之前,首先看看你啟動的內核是不是那個帶着ESD-CAN的。

用bazel編譯esdcan_test_app

在目錄
apollo/modules/monitor/hardware/can/esdcan_tools/
下,有一個ESD-CAN卡的測試文件:
esdcan_test_app.cpp
你需要在docker中用bazel編譯。步驟如下:

  • 開一個新的終端(不要進入docker),在路徑
    apollo/third_party/can_card_library/esd_can
    下,新建兩個目錄:lib 和 include
  • 按照apollo官方文檔中步驟2操作,即:
    #Copy ntcan.h to include/

    #Copy 64-bit libntcan.so.4.0.1 to lib/

    #Do the following to add the necessary symbolic links:
    cd ./lib/;
    ln -s libntcan.so.4.0.1 libntcan.so.4;
    ln -s libntcan.so.4.0.1 libntcan.so.4.0
  • 用下面的命令進行編譯
    cd modules/monitor/hardware/can/esdcan_tools/#注意:在docker內
    bazel build //modules/monitor/hardware/can/esdcan/esdcan_tools:esdcan_test_app  # 這是一個完整的命令,雙斜杠不是注釋!
    
  • 編譯成功,在目錄
    apollo/bazel-bin/modules/monitor/hardware/can/esdcan_tools/
    下有可執行文件:
    esdcan_test_app
    在該路徑下輸入以下命令對ESD-CAN進行測試:
    ./esdcan_test_app --details=true
    

ATTENTION: 入行不深,疏漏難免,歡迎批評&&指正,不勝感激!

References:[1] https://github.com/ApolloAuto/apollo-kernel/blob/master/linux/ESDCAN-README.md

[2]https://github.com/ApolloAuto/apollo-kernel

[3]https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_troubleshoot_esdcan.md

[4]https://github.com/ApolloAuto/apollo/tree/master/third_party/can_card_library/esd_can


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM