星星之火,铸就强芯梦
大家2020年国庆节快乐鸭
有些时候我们新板子刚焊出来,想通过控制台快速测试i2c的功能或者i2c上的某一个器件.
需要使用i2c-tools了,i2c-tools是一个非常好用的命令,他可以通过命令行快速的操作i2c总线上的设备:
从器件地址为reg的设备读取寄存器地址为addr的值;
往器件地址为reg的设备的寄存器地址addr处写入值value;
探测某个i2c总线上有哪些设备;
......
i2c-tools主要有几个命令:
i2cdetect | 用来探测I2C bus和上面所有的裝置 |
i2cdump | 查看i2c器件上所有寄存器的值 |
i2cget | 读取i2c器件上的寄存器值 |
i2cset | 设置i2c器件上寄存器的值 |
i2ctransfer | 这个命令可以发送自定义的包,可以发也可以收,可以替代i2cget/i2cset命令,而且当寄存器地址是16位时必须用i2ctransfer |
我们这次的目的就是使用i2c-tools源码获取这几个命令.
方法1: apt-get假如你的系统是Ubuntu文件系统,例如友善的rk3399支持lubuntu或者friendly-desktop,friendly-core可以apt-get的文件系统.
这种就省事很多了,直接:
sudo apt-get install i2c-tools
然后它自动帮你安装好,你就可以直接使用了.
方法2: 自己编译有些时候自己的文件系统不支持apt-get,那么需要自己交叉编译了:
<1> 拿到i2c-tools源码包:
下载地址:
https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/
假如你无法访问,你也可以从我公众号回复"i2c"获取下载链接.
<2> 放到虚拟机中,解压
tar -xf i2c-tools-4.1.tar.xzcd i2c-tools-4.1/
<3> 编译并安装
#指定CC,AR,STRIP编译器make CC=arm-linux-gcc AR=arm-linux-ar STRIP=arm-linux-strip#DESTDIR是指定安装到哪个路径,你不指定话就安装到/usr/local,然后你就炸了make DESTDIR=myi2c install
如图,安装后的效果:
里边的文件夹(还保留着原始/usr的路径):
<4> 把编译产物打个包,传到板子上
cd myi2c/tar -cf myi2c.tar usr/
放到板子上解压到根目录,因为之前带有路径了,它会根据路径自动合并到/usr/local对应的目录下:
tar -xf myi2c.tar -C /
然后就可以愉快的使用命令了:
后记
有些同学说: 能不能修改Makefile来改编译器?然后直接make就行了,就不用加CC=arm-linux-gcc...参数了.
答案是可以的,来看一个同学的修改方法:
这样做的后果就是编译出来的东东传到板子上用不了.结果用file命令查看到编译出来的命令是X86-64架构的.
为什么呢?这和Makefile的与法有关:
BUF1 = 100BUF2 ?= 100;
这两种的区别在于,BUF1赋值会覆盖掉旧的值,BUF2不会覆盖旧值(假如BUF2事先存在);
?=这种赋值方式的意思是,当变量事先不存在,则新值会被写入其中.
例如:
BUF1 = 100;BUF1 ?= 200;BUF3 ?= 300;
结果是BUF1=100,BUF3=300;
之前为什么像那样修改编译器会出错呢,因为系统默认存在了一个CC变量,值为gcc,所以你懂的.
☆ END ☆关注梅老师
学习嵌入式
梅老师