TX2在x86(ubuntu64位)下交叉编译
TX2在x86(ubuntu64位)下交叉编译
**
**
用TX2做小车底盘控制(采用usb转can方式),厂家不提供源码,只能提供对应版本的SDK,但是需要我们自己提供交叉编译器
由于之前没有做过交叉编译相关工作,对编译工具不太了解,因此查找相关资料学习下。
参考网站:https://blog.csdn.net/zong596568821xp/article/details/81101772
交叉编译知识
一般来说,针对嵌入式平台的开发有两种编译模式:原生编译和交叉编译。原生编译就是直接在嵌入式平台上编译代码并运行,而交叉编译就是在个人电脑等平台编译代码,然后加载到嵌入式平台运行。
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下:
1、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。
2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。
3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。
TX2内置的编译器是aarch64-linux-gnu-gcc 5.4.0,在linaro官网找到对应的版本,因为主机是x86的64位linux平台,所以选择下载gcc-linaro-5.4.1-2017.01-x86_64_aarch64-linux-gnu.tar,官网如果下载不动,可在CSDN上下载。
官网地址:https://releases.linaro.org/components/toolchain/binaries/5.4-2017.05/aarch64-linux-gnu/
CSDN地址:https://download.csdn.net/download/xiaofengxing1/10445361
4.之后解压:
$ tar -xvf gcc-linaro-5.4.1-2017.01-x86_64_aarch64-linux-gnu.tar.xz
5.,将解压后的gcc-linaro-5.4.1-2017.01-x86_64_aarch64-linux-gnu复制到opt文件夹下:
$ sudo cp -r gcc-linaro-5.4.1-2017.01-x86_64_aarch64-linux-gnu /opt/
效果如下图:
6.在bashrc(我是zshrc)里面添加:
export PATH=$PATH:/opt/gcc-linaro-5.4.1-2017.01-x86_64_aarch64-linux-gnu/bin
export CROSS_COMPILE=aarch64-linux-gnu-
7.之后在商家给的lib里面打开,修改makefile文件:
将商家给的:
dynamiclib:
arm-linux-gnueabihf-gcc -I ./libusb-0.1.12 VCI_CAN.c ./libusb-0.1.12/usb.c ./libusb-0.1.12/linux.c ./libusb-0.1.12/error.c ./libusb-0.1.12/descriptors.c -fPIC -shared -o libcontrolcan.so
变成:
dynamiclib:
aarch64-linux-gnu-gcc -I /libusb-0.1.12 VCI_CAN.c ./libusb-0.1.12/usb.c ./libusb-0.1.12/linux.c ./libusb-0.1.12/error.c ./libusb-0.1.12/descriptors.c -fPIC -shared -o libcontrolcan.so
效果如下图:
之后更新刚刚修改的bash或zsh使得export 生效
8.在终端输入
$ make
就可以看到生成的 .so文件了。之后将 .so文件丢给TX2下相应文件。
由于厂家说:源码不能提供,工程已删除所有核心代码,保留了VCI_OpenDevice函数。交叉编译后生成的.so文件,可以正常调用VCI_OpenDevice函数,并返回成功值1.供测试使用。
所以将程序修改为只有VCI_OpenDevice的程序:
之后在TX2下面最终调用成功:
TX2在x86(ubuntu64位)下交叉编译相关教程
Jetson TX2(2)ubutu1604--安装opencv3.4.0
Jetson TX2(2)ubutu1604--安装opencv3.4.0 1安装OpenCV3.4.0+contrib 1 在终端中敲入以下两句 sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock sudo apt-get update 进入官网 : http://opencv.org/releases.html , 选择 3.4.0 版本的 sou
80x86汇编按二进制输出数字的程序图解和代码解释
80x86汇编按二进制输出数字的程序图解和代码解释 先运行一下; 按二进制输出了十六进制的07h; 十六进制07, 转换为二进制是 111;4 + 2 + 1 = 7; ; print result in binary:mov bl, 09hmov cx, 8print: mov ah, 2 mov dl, '0' test bl, 10000000b; test firs
RTX2080和RTX2080Super的区别
RTX2080和RTX2080Super的区别 RTX2080 Super相比RTX2080性能提升差距约5%-6%左右,提升并不是太明显 选RTX2080还是RTX2080Super这些点很重要!看完你就知道了 https://list.jd.com/list.html? RTX2080 Super在规格上有着进一步的提升,主要在核心、流处理器、
ubuntu1604 qmakecould not exec ‘/usr/lib/x86_64-linux-gnu/q
ubuntu1604: qmake:could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake‘:No such file or directory 命令行使用qmake时,出现错误 qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory 解决方法: 1.cat /
Arm发布全新服务器芯片及路线图进一步叫板X86
Arm发布全新服务器芯片及路线图,进一步叫板X86 来源:内容编译自「anandtech」,谢谢。 Arm对服务器市场拥有巨大的野心是一件众所周知的事实,但这是需要历经数年才得以实现的愿望。过去多年里,虽然Arm阵营经过许多怀疑和错误的尝试,但到2020年的今天,没
浅论Lock 与X86 Cache 一致性
浅论Lock 与X86 Cache 一致性 本文转载自:https://zhuanlan.zhihu.com/p/24146167 感谢James Zhang 师兄多年前对我的鞭策, 只是这篇文章写的晚了些, 十二年已然过去. 重温一下 CAS 操作的伪码 bool compare_and_swap (int *accum, int *dest, int newval){ i
在Ubuntu64位系统下安装mysql数据库
在Ubuntu64位系统下安装mysql数据库 每日一句英语 The secret of success in life is for a man to be ready for his opportunity when it comes. 人生成功的秘诀是当机遇来临时要及时地抓住它。 输入命令尝试打开mysql sudo service mysql start 如果是这样
为什么早期x86处理器寄存器很少
为什么早期x86处理器寄存器很少? 有读者在看我之前的关于16位系统上的调用约定的文章时,有这么一个问题:为什么在早期x86处理器上可用的寄存器为什么那么少? 8086是一款16位的微处理器,比它更早的是8080。它有6个8位寄存器,分别命名为:A, B, C, D, E,