Linux - 在yocto构建中使用i2c-tools

在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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值