Android系统移植canutils
下载代码并编写Android.bp/Android.mk
这里我已经写好了编译脚本了,打包了canutils和libsocketcan代码,到这里下载 https://download.csdn.net/download/liteblue/54730175
Android.bp内容大概如下,其中name是device.mk使用的编译名。
cc_defaults {
name: "canutils_common_defaults",
cflags: [
"-Wall",
"-Werror",
"-Wno-unused-parameter",
"-Wno-unused-value",
"-Wno-sign-compare",
],
local_include_dirs: ["include"],
}
cc_binary {
name: "candump",
defaults: ["canutils_common_defaults"],
srcs: [
"src/candump.c",
],
static_libs: ["libsocketcan"],
}
cc_binary {
name: "cansend",
defaults: ["canutils_common_defaults"],
srcs: [
"src/cansend.c",
],
static_libs: ["libsocketcan"],
}
cc_binary {
name: "cansequence",
defaults: ["canutils_common_defaults"],
srcs: [
"src/cansequence.c",
],
static_libs: ["libsocketcan"],
}
cc_binary {
name: "canecho",
defaults: ["canutils_common_defaults"],
srcs: [
"src/canecho.c",
],
static_libs: ["libsocketcan"],
}
cc_binary {
name: "canconfig",
defaults: ["canutils_common_defaults"],
srcs: [
"src/canconfig.c",
],
static_libs: ["libsocketcan"],
}
自动编译并集成到系统
device/xxx/common/device.mk
PRODUCT_PACKAGES += libsocketcan candump cansend cansequence canecho canconfig
这里注意下有个坑,在device.mk指定编译软件名时要填写Android.bp里的名字,不要填写代码所在external/canutils/的目录名。
手动编译canutils并拷贝到Android系统执行
手动编译canutils并拷贝到Android系统执行
1. 代码解压到external下
2. 编译前要执行source和lunch(跟你的Android SDK平台有关),然后编译libsocketcan,再编译canutils,编译命令:
mmm external/libsocketcan -j12
mmm external/canutils -j12
4. 编译后的程序文件:find ./out/ -name candump
不同SDK最终目录不同,比如可能在这个目录:out/target/product/XXX/system/bin/candump
一共5个程序:canconfig, cansend, candump, cansequence, canecho
5. 拷贝到Android:
adb push canconfig /data/local/tmp/
... (push 所有5个程序)
adb shell chmod a+x /data/local/tmp/can*
6. 执行工具:
canconfig can0 bitrate 50000 ctrlmode triple-sampling on
canconfig can0 start
7. canutils一些使用参考:Texas Instruments Wiki.pdf
https://downloads.ti.com/infotainment/esd/jacinto6/processor-sdk-linux-automotive/6_00_00_03/exports/wiki/AM335X%20DCAN%20Driver%20Guide%20-%20Texas%20Instruments%20Wiki.pdf