在Yocto开发环境中利用i2c-tools进行Linux构建指南
在Yocto构建的嵌入式ARM Linux,有需要在rootfs中添加的package,可以直接在相应的bb文件中添加。
比如,要将i2c-tools这套工具加入我们的目标版的Linux系统中,只需在rootfs的bb文件中做如下添加:
core-image.bb
IMAGE_INSTALL_append = " \
kernel-image kernel-devicetree \
network-services \
u-boot-fw-utils system-scripts \
lzo libusbgx libssl \
mtd-utils-ubifs \
ethtool \
dropbear openssh-sftp-server gdbserver \
i2c-tools \
"
在最后添加了i2c-tools,然后使用bitbake来build:
$ bitbake core-image
然后找到build的结果:
$ cd tmp/work/poky-linux-gnueabi/core-image/1.0-r0/rootfs/
$ ls -l usr/sbin/i2c*
lrwxrwxrwx 1 vm vm 29 3月 23 16:40 usr/sbin/i2cdetect -> /usr/sbin/i2cdetect.i2c-tools
-rwxr-xr-x 1 vm vm 13764 3月 23 16:40 usr/sbin/i2cdetect.i2c-tools
lrwxrwxrwx 1 vm vm 27 3月 23 16:40 usr/sbin/i2cdump -> /usr/sbin/i2cdump.i2c-tools
-rwxr-xr-x 1 vm vm 17860 3月 23 16:40 usr/sbin/i2cdump.i2c-tools
lrwxrwxrwx 1 vm vm 26 3月 23 16:40 usr/sbin/i2cget -> /usr/sbin/i2cget.i2c-tools
-rwxr-xr-x 1 vm vm 13764 3月 23 16:40 usr/sbin/i2cget.i2c-tools
lrwxrwxrwx 1 vm vm 26 3月 23 16:40 usr/sbin/i2cset -> /usr/sbin/i2cset.i2c-tools
-rwxr-xr-x 1 vm vm 13764 3月 23 16:40 usr/sbin/i2cset.i2c-tools
lrwxrwxrwx 1 vm vm 31 3月 23 16:40 usr/sbin/i2ctransfer -> /usr/sbin/i2ctransfer.i2c-tools
-rwxr-xr-x 1 vm vm 13768 3月 23 16:40 usr/sbin/i2ctransfer.i2c-tools
这里的i2cdetect就是可以使用的工具,可以直接将此rootfs烧写到目标板上,或者使用scp工具通过ssh拷贝到目标板上即可。
注意,如果拷贝的话,这几个程序还需要一些共享库:
$ /toolchain//sysroots/x86_64-pokygen7sdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-readelf -a ./usr/sbin/i2cdetect.i2c-tools | grep library
0x00000001 (NEEDED) Shared library: [libi2c.so.0]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x00000001 (NEEDED) Shared library: [ld-linux-armhf.so.3]
所以,也要将libi2c.so.0拷贝到目标板上:
$ scp ./usr/lib/libi2c.so.0 root@192.168.7.7:/usr/lib
注意,libi2c.so.0实际是使用了一个软链接:
$ ls -l ./usr/lib/libi2c*
lrwxrwxrwx 1 vm vm 15 3月 23 16:40 ./usr/lib/libi2c.so.0 -> libi2c.so.0.1.1
-rwxr-xr-x 1 vm vm 5312 3月 23 16:40 ./usr/lib/libi2c.so.0.1.1
===== ===== ===== ===== =====
因为笔者使用的是iMX6ULL芯片,烧写芯片使用MfgTool,如果是已经build好的MfgTool,可以在里面找到roofts,然后解压,获取i2c-tools。
$ bitbake mfgtool
$ cd build/tmp/deploy/mfgtool
$ ls
mfgtool-bsp.zip
$ unzip mfgtool-bsp.zip
$ cd mfgtool-bsp/MfgTool2/Profiles/Linux/OS\ Firmware/files/
$ ll
total 24584
drwxr-xr-x 2 vm vm 4096 4月 13 14:14 ./
drwxr-xr-x 4 vm vm 4096 4月 13 14:14 ../
-rw-r--r-- 1 vm vm 3397 4月 13 14:14 core-image.manifest
-rw-rw-r-- 1 vm vm 11033704 4月 13 14:14 core-image.tar.bz2
-rw-r--r-- 1 vm vm 13670272 4月 13 14:14 core-image.ubifs
-rw-rw-r-- 1 vm vm 5080 4月 13 14:14 qspi-nor-spansion-s25fl256s-config
-rw-rw---- 1 vm vm 65536 4月 13 14:14 uboot-env.bin
-rw-r--r-- 1 vm vm 360084 4月 13 14:14 u-boot.imx-regular
......
$ mkdir rootfs
$ tar -xjf ./core-image.tar.bz2 -C rootfs
$ cd rootfs
$ ls usr/sbin/i2c*
usr/sbin/i2cdetect usr/sbin/i2cdump usr/sbin/i2cget usr/sbin/i2cset usr/sbin/i2ctransfer
usr/sbin/i2cdetect.i2c-tools usr/sbin/i2cdump.i2c-tools usr/sbin/i2cget.i2c-tools usr/sbin/i2cset.i2c-tools usr/sbin/i2ctransfer.i2c-tools
用这样的方式,可以同样获得i2cdetect等程序和libi2c.so库。
或者直接在build目录里找到mfgtool的内容:
$ ll build/tmp/work/cortexa7t2hf-neon-poky-linux-gnueabi/mfgtool/1.0-r0/mfgtool-bsp/MfgTool2/Profiles/Linux/OS Firmware/files/
total 24584
drwxr-xr-x 2 vm vm 4096 4月 13 14:14 ./
drwxr-xr-x 4 vm vm 4096 4月 13 14:14 ../
-rw-r--r-- 1 vm vm 3397 4月 13 14:14 core-image.manifest
-rw-rw-r-- 1 vm vm 11033704 4月 13 14:14 core-image.tar.bz2
-rw-r--r-- 1 vm vm 13670272 4月 13 14:14 core-image.ubifs
-rw-rw-r-- 1 vm vm 5080 4月 13 14:14 qspi-nor-spansion-s25fl256s-config
-rw-rw---- 1 vm vm 65536 4月 13 14:14 uboot-env.bin
-rw-r--r-- 1 vm vm 360084 4月 13 14:14 u-boot.imx-regular
......
找core-image.tar.bz2文件以后,后续操作是一样的。
===== ===== ===== ===== =====
关于i2c-tools的使用,比如:
$ i2cdetec -l
$ i2cdetec -y 2
关于这些的介绍,在另外文章里有介绍。
之所以使用yocto来编译,这样能够保证和目标板的整个环境是匹配的。
之前用了一个其他版本的i2cdetect程序,拷贝到目标板上,可以执行,但执行结果错误,一直检测不到i2c设备,还以为是硬件问题。
幸亏在项目当前的Yocto设置中重新编译了一个就好用了,这样来验证硬件上i2c设备是否可用。
或者在开发过程中,条件允许就将i2c-tools或一些需要用的package加入到rootfs中,在release正式版本时再去除。
另外说明:
上面构建i2c-tools的方法是使用了core-image的rootfs和mfgtool这两个构建,而直接使用i2c-tools的构建也是可以的。
$ bitbake i2c-tools
$ cd build/tmp/work/cortexa7t2hf-neon-poky-linux-gnueabi/i2c-tools/4.1-r0/
$ find ./ -name i2cdetect*
./package/usr/share/man/man8/i2cdetect.8
./package/usr/src/debug/i2c-tools/4.1-r0/i2c-tools-4.1/tools/i2cdetect.c
./package/usr/sbin/i2cdetect.i2c-tools
./package/usr/sbin/.debug/i2cdetect.i2c-tools
./packages-split/i2c-tools-dbg/usr/sbin/.debug/i2cdetect.i2c-tools
./packages-split/i2c-tools-src/usr/src/debug/i2c-tools/4.1-r0/i2c-tools-4.1/tools/i2cdetect.c
./packages-split/i2c-tools/usr/sbin/i2cdetect.i2c-tools
./packages-split/i2c-tools-doc/usr/share/man/man8/i2cdetect.8
./image/usr/share/man/man8/i2cdetect.8
./image/usr/sbin/i2cdetect
./i2c-tools-4.1/tools/i2cdetect.o
./i2c-tools-4.1/tools/i2cdetect.8
./i2c-tools-4.1/tools/i2cdetect.c
./i2c-tools-4.1/tools/i2cdetect
$ find ./ -name libi2c.so*
./package/usr/lib/libi2c.so.0.1.1
./package/usr/lib/libi2c.so.0
./package/usr/lib/.debug/libi2c.so.0.1.1
./package/usr/lib/libi2c.so
./packages-split/i2c-tools-dev/usr/lib/libi2c.so
./packages-split/i2c-tools-dbg/usr/lib/.debug/libi2c.so.0.1.1
./packages-split/i2c-tools/usr/lib/libi2c.so.0.1.1
./packages-split/i2c-tools/usr/lib/libi2c.so.0
./sysroot-destdir/usr/lib/libi2c.so.0.1.1
./sysroot-destdir/usr/lib/libi2c.so.0
./sysroot-destdir/usr/lib/libi2c.so
./image/usr/lib/libi2c.so.0.1.1
./image/usr/lib/libi2c.so.0
./image/usr/lib/libi2c.so
./i2c-tools-4.1/lib/libi2c.so.0.1.1
./i2c-tools-4.1/lib/libi2c.so.0
./i2c-tools-4.1/lib/libi2c.so
其他相关内容都是类似的。
上一篇: 美女图片2