
話說目前都在研究CAN BUS
然後,就想到一個 [如何讓產線方便測試CAN BUS ] 的想法
CuteParrot 發表在 痞客邦 留言(0) 人氣(9,772)
compile libsocketcan and canutils for Android 9 以下紀錄如何在 linux x86 64 unbutu 16.04下compile compile libsocketcan and canutils for Android 9\ ==前置作業==.下載及安裝 android-ndk-r20至網站 https://developer.android.com/ndk/downloads ,下載因作業系統是 ubuntu 16.04屬於 linux,所以下載 android-ndk-r20-linux-x86_64.zip解壓縮檔案,目錄為o:\tools\android-ndk-r20\ 根據我的電腦環境,環境cross compile的環境變數#=== Android P NDK env setup ==export NDK=/home/bgbg2/tools/android-ndk-r20/toolchains/llvmexport TOOLCHAIN=$NDK/prebuilt/linux-x86_64export AR=$TOOLCHAIN/bin/aarch64-linux-android-arexport AS=$TOOLCHAIN/bin/aarch64-linux-android-asexport CC=$TOOLCHAIN/bin/aarch64-linux-android21-clangexport CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++export LD=$TOOLCHAIN/bin/aarch64-linux-android-ldexport RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlibexport STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip ==libsocketcan-0.0.11==.從網站 https://public.pengutronix.de/software/libsocketcan/ 下載 libsocketcan-0.0.11務必下載 libsocketcan-0.0.11 ,因為此版才有支援 aarch64-linux-android解壓縮到目錄 o:\tools\test1\libsocketcan-0.0.11\切換到此o:\tools\test1\libsocketcan-0.0.11\目錄內,mkdir out 建立 out folder,但不要切換進去,維持在o:\tools\test1\libsocketcan-0.0.11\執行環境設定export NDK=/home/bgbg2/tools/android-ndk-r20/toolchains/llvmexport TOOLCHAIN=$NDK/prebuilt/linux-x86_64export AR=$TOOLCHAIN/bin/aarch64-linux-android-arexport AS=$TOOLCHAIN/bin/aarch64-linux-android-asexport CC=$TOOLCHAIN/bin/aarch64-linux-android21-clangexport CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++export LD=$TOOLCHAIN/bin/aarch64-linux-android-ldexport RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlibexport STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip 執行 configure#./configure --host=aarch64-linux-android --prefix=/home/bgbg2/tools/test1/libsocketcan-0.0.11/out #make#make install 檔案產生在 o:\tools\test1\libsocketcan-0.0.11\out\lib\libsocketcan.a libsocketcan.la libsocketcan.so pkgconfig使用 file libsocketcan.so 檢查檔案elf格式--file libsocketcan.solibsocketcan.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, not stripped--確定檔案的確為 ARM 64 for Android. ==canutils-4.0.6==至網站 https://public.pengutronix.de/software/socket-can/canutils/v4.0/ 下載canutils-4.0.6.tar.bz2 解壓縮 tar -xvf canutils-4.0.6.tar.bz2 到路徑 /tools/test1/canutils-4.0.6 如果直接執行 configure./configure --host=aarch64-linux-android --prefix=/home/bgbg2/tools/test1/canutils-4.0.6/out libsocketcan_LIBS=-lsocketcan LDFLAGS=-L/home/bgbg2/tools/test1/libsocketcan-0.0.11/out/lib libsocketcan_CFLAGS=-I/home/bgbg2/tools/test1/libsocketcan-0.0.11/out/include CFLAGS=-I/home/bgbg2/tools/test1/libsocketcan-0.0.11/out/include 會出現configure: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used.checking build system type... x86_64-unknown-linux-gnuchecking host system type... Invalid configuration `aarch64-linux-android': machine `aarch64-linux' not recognizedconfigure: error: /bin/sh config/autoconf/config.sub aarch64-linux-android failed錯誤訊息 為了讓 canutils-4.0.6 也支援 arm android 9,必須複製 "O:\tools\test1\libsocketcan-0.0.11\config\autoconf\config.sub" 到 "O:\tools\test1\canutils-4.0.6\config\autoconf\config.sub" 在 /tools/test1/canutils-4.0.6 目錄下執行 ./autogen.sh 修改"O:\tools\test1\canutils-4.0.6\configure"去掉 line 4602--PKG_CHECK_MODULES(libsocketcan, libsocketcan >= 0.0.8, , AC_MSG_ERROR([*** libsocketcan version above 0.0.8 not found on your system]))--- 執行環境設定export NDK=/home/bgbg2/tools/android-ndk-r20/toolchains/llvmexport TOOLCHAIN=$NDK/prebuilt/linux-x86_64export AR=$TOOLCHAIN/bin/aarch64-linux-android-arexport AS=$TOOLCHAIN/bin/aarch64-linux-android-asexport CC=$TOOLCHAIN/bin/aarch64-linux-android21-clangexport CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++export LD=$TOOLCHAIN/bin/aarch64-linux-android-ldexport RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlibexport STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip 執行 configure./configure --host=aarch64-linux-android --prefix=/home/bgbg2/tools/test1/canutils-4.0.6/out libsocketcan_LIBS=-lsocketcan LDFLAGS=-L/home/bgbg2/tools/test1/libsocketcan-0.0.11/out/lib libsocketcan_CFLAGS=-I/home/bgbg2/tools/test1/libsocketcan-0.0.11/out/include CFLAGS=-I/home/bgbg2/tools/test1/libsocketcan-0.0.11/out/include #make#make install 檔案產生在/tools/test1/canutils-4.0.6/out/bin/candump canecho cansend cansequence file candumpcandump: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /system/, not stripped確定檔案的確為 ARM 64 for Android. ---在Android 9上測試--
adb root
adb disable-verity
adb reboot
adb push canconfig /vendor/bin
adb push libsocketcan.so/vendor/bin
export LD_LIBRARY_PATH=/vendor/bin
adb chmod 777 /vendor/bin/canconfig
adb chmod 777 /vendor/bin/libsocketcan.so
canconfig
show
---
usage:
canconfig <dev> bitrate { BR } [sample-point { SP }]
BR := <bitrate in Hz>
SP := <sample-point {0...0.999}> (optional)
canconfig <dev> bittiming [ VALs ]
VALs := <tq | prop-seg | phase-seg1 | phase-seg2 | sjw>
tq <time quantum in ns>
prop-seg <no. in tq>
phase-seg1 <no. in tq>
phase-seg2 <no. in tq
sjw <no. in tq> (optional)
canconfig <dev> restart-ms { RESTART-MS }
RESTART-MS := <autorestart interval in ms>
canconfig <dev> ctrlmode { CTRLMODE }
CTRLMODE := <[loopback | listen-only | triple-sampling | berr-reporting] [on|off]>
canconfig <dev> {ACTION}
ACTION := <[start|stop|restart]>
canconfig <dev> clockfreq
canconfig <dev> bittiming-constants
canconfig <dev> berr-counter
---
應該就可以順利在 android 9上面執行了
CuteParrot 發表在 痞客邦 留言(0) 人氣(396)

========compile SocketCAN userspace utilities and tools for Android ============================
---install cmake 3.6 ---
(reference from http://www.kbase101.com/question/8509.html)
.first check cmake version via "cmake --version" , it should 3.6.
.if vesion is not 3.6, rmove it via "sudo apt remove cmake"
CuteParrot 發表在 痞客邦 留言(0) 人氣(316)