嵌入式开发者社区

标题: DM8148 开发板使用 GPIO 的问题 [打印本页]

作者: Freed    时间: 2016-4-13 09:09
标题: DM8148 开发板使用 GPIO 的问题
我使用的是创龙电子 DM8148 开发板,运行的是自带的系统(没有做过修改),内核版本是 Linux 2.6.37。现在我在用户空间通过 sysfs 来操作 GPIO 时遇到了一些问题:
1. 我在开发板的终端上进入 /sys/class/gpio/gpioN/ 目录,在这个目录下修改 ./direction 和 ./value 来修改相应 GPION 的输入输出方向与电平值,但用万用表测试发现 GPION 一直输出高电平;

2. 我再用 C 语言写了一个测试 GPIO 输入输出的应用程序,编译后在开发板上运行。在输入测试中 GPION 可以准确读出输入的高低电平,但在输出测试中 GPION 依旧只输出高电平;

3. 我将 GPIO 输入输出测试程序中的 GPIO 编号改为 LED1 对应的 GPIO 的编号,然后在开发板上用 insmod 先安装 LED 模块之后再用 rmmod 卸载 LED 模块,然后运行输出测试程序,结果这次可以测出 GPIO 的电平变化。

假如是没有加载 GPIO 模块的话,那么在 /sys/class/ 目录下就不会出现 ./gpio/ 目录;假如是我写的程序有误的话,那么按理在 LED 对应的 GPIO 上会出现跟 2 一样的现象。

不知有没有朋友也遇到过这样的问题?肯请解答。

作者: teddy    时间: 2016-4-13 10:28
使用gpio还需要确认对应的pin有没有配置成个gpio功能:
arch/arm/mach-omap2/board-ti8148evm.c:
static struct omap_board_mux board_mux[] __initdata = {
        /* som leds pin*/
        TI814X_MUX(MLBP_SIG_P, (OMAP_MUX_MODE7 | TI814X_PIN_INPUT_PULL_UP)),                /* gpio1_07_mux1 */
        TI814X_MUX(MLBP_SIG_N, (OMAP_MUX_MODE7 | TI814X_PIN_INPUT_PULL_UP)),                /* gpio1_08_mux1 */

        /* lcd backlight pin*/
        TI814X_MUX(MCASP4_AXR1, (OMAP_MUX_MODE6 | TI814X_PIN_INPUT_PULL_UP)),                /* timer6_mux0 */
        TI814X_MUX(UART0_DSRN, (OMAP_MUX_MODE4 | TI814X_PIN_INPUT_PULL_UP)),                /* spi0_cs2 */
        /* pwm fan pin*/
        TI814X_MUX(MCASP5_AXR1, (OMAP_MUX_MODE6 | TI814X_PIN_INPUT_PULL_UP)),                /* timer7_mux0 */
        { .reg_offset = OMAP_MUX_TERMINATOR },
};

pinmux的定义在:
arch/arm/mach-omap2/mux814x.c
作者: Freed    时间: 2016-4-13 16:50
多谢了,之前主要是不知道 DM8148 的配置文件放在哪里,还以为放在 /arch/arm/mach-davinci/ 这个目录下,原来是放在 /arch/arm/mach-omap2/ 这个目录下。

下面这篇文章根据 Linux 源码分析 MUX 配置,写得也挺好的:http://blog.chinaunix.net/uid-12077574-id-3527526.html
作者: Freed    时间: 2016-4-13 17:06
teddy 发表于 2016-4-13 10:28
使用gpio还需要确认对应的pin有没有配置成个gpio功能:
arch/arm/mach-omap2/board-ti8148evm.c:
static s ...

我修改了 arch/arm/mach-omap2/board-ti8148evm.c 这个文件,编译内核成功并重新生成 uImage 文件。

然后我把 uImage 拷贝到 SD 卡的 ROOT 分区并覆盖原来的 uImage 文件,启动的时候却显示 /lib/modules/2.6.37/kernel/drivers/dsp/ 目录下的 syslink.ko 模块格式无效,因此启动出错。

然后我把 /ROOTFS/etc/rc5.d/ 目录下的 S01load-hd-firmware.sh 文件删除,这样系统就能顺利启动了。

但系统启动后出现新的问题是:原来在 /sys/class/ 目录下存在的 gpio/ 目录找不到了,可能是没有装载 GPIO 驱动模块的原因。
作者: Freed    时间: 2016-4-13 17:33
Freed 发表于 2016-4-13 17:06
我修改了 arch/arm/mach-omap2/board-ti8148evm.c 这个文件,编译内核成功并重新生成 uImage 文件。

然 ...

果然是没有把 GPIO 的 sysfs 加载到内核。重新编译内核的时候在 menuconfig 中把 GPIO 的 sysfs 添加进内核就可以了。
作者: teddy    时间: 2016-4-13 17:45
好的,恭喜你问题解决了。
作者: Freed    时间: 2016-4-14 20:21
teddy 发表于 2016-4-13 17:45
好的,恭喜你问题解决了。

非常感谢
作者: 放学后不许跑    时间: 2017-6-6 10:47
加收藏~




欢迎光临 嵌入式开发者社区 (https://51ele.net/) Powered by Discuz! X3.4