ARM Linux SocketCAN驅動編譯記錄

2021-08-21 03:45:08 字數 2823 閱讀 2629

交叉編譯工具鏈根據每個開發板所提供的型別進行設定,我的工具鏈名稱為

arm-fsl-linux-gnueabi-gcc
後面實際配置時請注意

第一步:配置交叉編譯工具鏈

配置好交叉編譯工具鏈為全域性環境,也就是將其新增到環境變數中,具體因人而異。在這不具體說明,請自行查詢資料

export arch=arm

export cross_compile=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl

-linaro-toolchain/bin/arm-none-linux-gnueabi-

export path=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolch

ain/bin:$path

第二步 交叉編譯libsocketcan
cd libsocketcan-0.0.10  //進入目錄

mkdir out //建立資料夾,放置生成檔案

./configure --prefix=/資料夾路徑/libsocketcan-0.0.10/out --host=arm-fsl-linux-gnueabi

make

make

install

此時生成檔案會出現在out/lib資料夾下,將這些生成的庫複製到開發板的檔案系統內,可以放在lib目錄下,也可以放在usr/lib裡面

(每篇部落格的設定都不同,該步的生成檔案我沒有拷貝到開發板。以防後面配置出現問題,可以設定上)

第三步 編譯安裝canutils-4.0.6.tar.bz2

先將 libsocketcan 裡面的標頭檔案libsocketcan.hcan_netlink.h複製到 canutils 的include裡面。這些檔案在out/include目錄下

cd canutils-4.0.6/

mkdir out

//進行實際配置,可直接複製下面**,務必仔細修改資料夾路徑和交叉編譯工具鏈

./configure --host=arm-fsl-linux-gnueabi \

--prefix=/資料夾路徑/canutils-4.0.6/out li \

bsocketcan_libs=-lsocketcan ldflags=

"-l/ \

資料夾路徑/libsocketcan-0.0.10/out/lib/" l \

ibsocketcan_cflags=

"-i/資料夾路徑/libsocke \

tcan-0.0.10/out/include"

make

make

install

最後在out/sbin下能見到canconfig命令,在out/bin下面candump/canecho/cansend/cansequence

將這些檔案拷貝到開發板/usr目錄下即可。

具體請看參考部落格

實際使用時,將接收到的can資料傳送到遠端,同時遠端伺服器會再傳送資料過來,所以需要多執行緒的需求。寫好編譯時,會出現這樣的報錯

undefined reference to `pthread_create'
很明顯是由於設定多程序導致的,新增相應庫後無效。經搜尋發現需要在編譯時進行相應設定,問題如下:

問題:pthread庫不是 linux 系統預設的庫,連線時需要使用靜態庫libpthread.a,所以在使用pthread_create()建立執行緒,以及呼叫pthread_atfork()函式建立fork處理程式時,需要鏈結該庫。

**解決:**在編譯中要加-lpthread引數(最好加在最後面,我到貌似就是這樣才行)

gcc thread.c -o thread -lpthread
thread.c為你些的原始檔,不要忘了加上標頭檔案#include

但由於can-utils是通過makefile管理,因此需要找到相關的編譯設定。摸索一小時終於找到~

在工具鏈\src\gnumakefile中,第96行新增-lpthread,效果如下

cflags = -wall -g -lpthread -o2
同時在第365行新增-lpthread,效果如下:

.c.o:

$(compile)

-mt $@ -md -mp -mf $(depdir)

/$*.tpo -lpthread -c -o $@ $<

$(am__mv)

$(depdir)

/$*.tpo $(depdir)

/$*.po

之後執行make,make install編譯即可。

opencv交叉編譯記

這兩天一直在編譯opencv。確實很頭疼。1.用cmake 來交叉編譯opencv樣例時,其實在交叉編opencv 時,可以通過設定,將原始碼裡的sample都編譯的 當時不知道 將原始碼裡的sample c 考到opencv的交叉編譯的build目錄裡,要修改下example cmake 裡的cm...

Qt編譯Oracle OCI驅動

工作中經常用到oracle,而預設情況下qt只有sqlite和odbc驅動,網上有相應的驅動安裝介紹,自己實驗可行 qt環境 qt 5.0.2 mingw4.7.2 win7 32bit 開啟qt command prompt,分別執行以下命令,以編譯oracle驅動 set include inc...

編譯mongodb C 驅動 windows

這個mongodb 的c 驅動著實費了我一番功夫,不過終於成功跑通了。注意這裡的 boost 版本我們選擇 1.49.0,方便起見,我是全部安裝的,安裝完成之後 除了boost stage doc 這三個目錄其餘全部刪除,這個時候大小約1.6g,遠沒有5g那麼大,好多obj檔案都是編譯的中間檔案 之...