toradex的个人空间 https://blog.eetop.cn/1539194 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

通过Libsoc在嵌入式ARM简化GPIO调用

已有 1283 次阅读| 2018-8-24 12:17 |系统分类:芯片设计

By Toradex胡珊逢

1). 简介

嵌入式设备往往会通过 GPIO 连接外设,从而实现通信、状态监测、控制等功能,用户需要操作特定的 GPIO。在 Linux 系统中,用户应用一般无法直接访问 SoC GPIO 寄存器,而使用特定的引脚编号,然而不同ARM模块平台供应商的管脚定义和对应的GPIO编号有需要一个对应转换关系,使得整个GPIO调用比较复杂,本文就演示通过libsoc来简化这个操作,使用户在程序中可以直接使用ARM模块的管脚号码来调用对应的GPIO

 

本文所演示的平台来自于Toradex Colibri iMX6 ARM嵌入式平台,这是一个基于NXP iMX6 ARM处理器,支持单核/双核Cortex-A9

 

 

2. 准备

a). Colibri iMX6 ARM核心版配合Colibri Evaluation Board,连接默认调试串口UART1到开发主机方便调试。

 

b). 在未使用libsoc之前,例如 要调用Colibri iMX6 模块金手指上的 SODIMM55 引脚作为GPIO,其实际连接 iMX6 SoC GPIO1_IO07,在 Linux 系统中的序号为 gpio7。用户需要对照 Colibri iMX6 datasheet GPIO 编号了解其对应关系,比较复杂,为了便于用户使用 GPIOToradex Linux BSP v2.8b3 起添加了 libsoc 支持,用户可以直接用模块金手指编号操作对应的 GPIO,免去查找对应关系,下面就分别对应于BSP v2.8b3以及之前的BSP对如何使用libsoc进行说明。

 

 

3). V2.8b3 及后续 BSP

a). 自该版本开始,BSP 中已经包含了 libsoc 的库文件。用户只需要添加 libsoc.conf 配置文件以及为 SDK 增加编译应用所需的头文件等即可。SDK 安装方法请参考这里

 

b). SDK增加libsoc支持

./ 下载并编译 libsoc 源码

---------------------------

$ git clone https://github.com/jackmitch/libsoc.git

$ cd libsoc

$ ./home/ben/Toradex/DISK/LinuxSDK/v2.7-gcc6/SDK-GCC6/Colibri_iMX6/environment-setup-armv7at2hf-neon-angstrom-linux-gnueabi

$ autoreconf -i

$./configure ---host=arm-angstrom-linux-gnueabi --prefix=/home/ben/Toradex/DISK/LinuxSDK/v2.8/imx6/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/ --enable-board=colibri-imx6 --with-board-configs

---------------------------

// --prefix 指向 SDK rootfs 目录,根据实际使用的开发板设置 --enable-board

 

---------------------------

$ MACHINE=colibri-imx6 make -j3

$ make install

---------------------------

// MACHINE 也需要设置为对应的计算机模块,这里使用 colibri iMX6

 

c). 下载并编译 libsoc 演示代码

---------------------------

$ git clone https://github.com/bhuvanchandra/libsoc-examples.git

$ cd libsoc-examples

$ cd io-ctrl

$ MACHINE=colibri-imx6 make

---------------------------

//注意:在执行 make 开始编译前,从这里下载 Makefie 文件替换 io-ctrl 目录下的同名文件。

 

// 代码 io.c 中直接使用 SODIMM_55 SODIMM_63 编号,SODIMM_55 设置为 GPIO 连接 LED,控制其亮灭,SODIMM_63 为输入引脚,连接轻触开关,检测按键情况。

---------------------------

gpio_interrupt = libsoc_gpio_request(libsoc_board_gpio_id(config, "SODIMM_63"), LS_GPIO_SHARED);

if (gpio_interrupt == NULL) {

perror("gpio request failed");

         goto exit;

}

 

gpio_led = libsoc_gpio_request(libsoc_board_gpio_id(config, "SODIMM_55"), LS_GPIO_SHARED);

if (gpio_led == NULL) {

         perror("led gpio request failed");

         goto exit;

}

---------------------------

 

c). Colibri iMX6上面部署测试

 

./ Colibri Evaluation Board SODIMM_55 连接 LED4SODIMM_63 连接 SW6

 

./ 复制配置文件到 Colibri iMX6

libsoc 下载目录中 contrib/board_files 文件夹内对应的配置文件复制到目标板的 /etc 目录,并重命名为 libsoc.conf

 

./ 复制 libsoc 应用

io-ctrl 目录中编译成功文件 io 复制到目标板上。

 

./ 运行应用

按下 SW6LED4 随着按键点亮或者熄灭。

---------------------------

root@colibri-imx6:~# ./io

Waiting for interrupt. Press 'q' and 'Enter' at any time to exit

Interrupt occurred 1 times

Interrupt occurred 2 times

---------------------------

 

 

4). V2.8b3 之前 BSP

a). 该版本之前的 BSP 并不包含 libsoc,用户需要下载源码交叉编译。

---------------------------

$ git clone https://github.com/jackmitch/libsoc.git

$ cd libsoc

$ ./home/ben/Toradex/DISK/LinuxSDK/v2.7-gcc6/SDK-GCC6/Colibri_iMX6/environment-setup-armv7at2hf-neon-angstrom-linux-gnueabi

$ autoreconf -i

$ ./configure --host=arm-angstrom-linux-gnueabi --prefix=/home/ben/Toradex/DISK/LinuxSDK/v2.7-gcc6/SDK-GCC6/Colibri_iMX6/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/ --enable-board=colibri-imx6 --with-board-configs

---------------------------

// --prefix 指向 SDK rootfs 目录,根据实际使用的开发板设置 --enable-board

 

---------------------------

$ MACHINE=colibri-imx6 make -j3

$ make install

---------------------------

 

 

b). 复制 libsoc 库文件到目标板

SDK 安装目录中 sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/lib/libsoc.so.2.4.2 文件复制到 Colibri iMX6 /lib,并创建下面链接

---------------------------

root@colibri-imx6:~# cd /lib

root@colibri-imx6:~# ln -s libsoc.so.2.4.2 libsoc.so.2

root@colibri-imx6:~# ln -s libsoc.so.2.4.2 libsoc.so

---------------------------

 

c). 剩下的部分和上面部署测试一致,这里就不赘述了。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 3

    粉丝
  • 0

    好友
  • 1

    获赞
  • 2

    评论
  • 13923

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-9 01:58 , Processed in 0.017714 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部