天嵌 ARM开发社区

 找回密码
 注册
查看: 3042|回复: 2

tq6410的LED灯驱动加载以后测试程序不能通过

[复制链接]
shao890813 发表于 2012-4-16 17:40:52 | 显示全部楼层 |阅读模式
本帖最后由 shao890813 于 2012-12-17 09:26 编辑

          各位好,谢谢大家的关注,写的有点多,希望大家可以耐心的看下去,这两天在做TQ6410开发板的led灯驱动(Tq6410_leds.c是led的驱动程序,路径是内核源码的linu-3.0-rc6/drives/char/tq6410_leds.c),驱动用模块加载的方式加载到开发板上以后,测试程序不能通过,下面是我做的整个过程,内核是linu-3.0-rc6版本,交叉编译器是用4.6.0。
一.        在编译内核时,我把led驱动配置选项选成模块编译,在编译并成功将内核烧写到TQ6410开发板以后;

二.        用make modules编译leds的驱动,得到了tq6410_leds.ko文件;


三.        用nfs文件系统将tq6410_leds.ko文件放到开发板的/mn/usr/bin/目录下,用insmod命令加载成功;

[root@EmbedSky /dev]# cd /mnt/usr/bin
[root@EmbedSky bin]# insmod tq6410_leds.ko
TQ6410 LEDs driver successfully probed
[root@EmbedSky bin]# lsmod
Module                  Size  Used by    Not tainted
tq6410_leds             1054  0
rt3070sta             566620  0
libertas_sdio           7630  0
libertas               45510  1 libertas_sdio
rt73usb                19854  0
rt2x00usb               7622  1 rt73usb
rt2x00lib              26956  2 rt73usb,rt2x00usb
zd1211rw               46829  0
mac80211              184675  3 rt2x00usb,rt2x00lib,zd1211rw
cfg80211              137055  4 libertas,rt2x00lib,zd1211rw,mac80211
同时我对比了一下开发板上的/dev/目录下加载前后确实是多了一个tq6410_leds设备,这里我列出来了一些设备(只是一部分)
crw-rw----    1 root     root       10, 126 Aug 18 06:50 s3c-g2d
crw-rw----    1 root     root      116,  33 Aug 18 06:50 timer
crw-rw----    1 root     root       10,  60 Aug 18 06:50 tq6410-adc
crw-rw----    1 root     root       10,  59 Aug 18 06:50 tq6410-angle
crw-rw----    1 root     root       10,  61 Aug 18 06:50 tq6410-backlight
crw-rw----    1 root     root       10,  62 Aug 18 06:50 tq6410-beep
crw-rw----    1 root     root       10,  57 Aug 18 06:50 tq6410-button
crw-rw----    1 root     root       10,  52 Aug 18 06:55 tq6410-leds
crw-rw----    1 root     root       10,  58 Aug 18 06:50 tq6410-shutdown
crw-rw----    1 root     root        5,   0 Aug 18 06:50 tty
crw-rw----    1 root     root        4,   0 Aug 18 06:50 tty0
crw-rw----    1 root     root        4,   1 Aug 18 06:50 tty1

        但这里我发现一个问题加载前后用cat /proc/devices/没有发现tq6410-leds,只有一个主设备号一样是10的misc杂项。这个问题我还是可以退一步理解,可能是因为主设备号为10的有很多,在/proc/devices这个里面看到的只是主设备号不一样的,所以我想在这里顺便问一下,我能用什么方式看到这里面所有的设备呢?(问题1)


[root@EmbedSky /dev]# cat /proc/devices
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
10 misc
13 input
14 sound
21 sg
29 fb
81 video4linux
89 i2c
90 mtd
108 ppp
116 alsa
128 ptm
136 pts
166 ttyACM
180 usb
188 ttyUSB
189 usb_device
204 ttySAC
250 ttySDIO
251 ubi0
252 xz_dec_test
253 bsg

四. 下面是我按照韦东山Linux视频第1期第12课第二节字符设备之LED 驱动编写的一个最简单的测试程序led_test.c,用arm-linux-gcc编译成功了led_test执行文件。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

Int main (int argc, char **argv)
{
        Int fd;
Int val = 1;
Fd = open(“/dev/tq6410_leds”,O_RDWR);
If (fd<0)
                Printf (“can`t open!\n”);
Else
                Printf (“hello!tq6410_leds!\n”);
Write (fd, &val, 4);
Return 0;
}
五.        将led_test用nfs文件系统上传到开发板的/mnt/usr/bin/目录下,然后执行./led_test,下面是终端出来的结果
[root@EmbedSky bin]# ./led_test
can`t open!
这里按道理不应该显示这个结果的,leds既然加载到开发板了,fd应该是个正值才对,这里是我的第二个问题
TQ-lkp 发表于 2012-4-17 09:29:58 | 显示全部楼层
这里有我们提供的源码,你看下http://bbs.embedsky.net/forum.ph ... hlight=%D4%B4%C2%EB
 楼主| shao890813 发表于 2012-4-18 10:00:56 | 显示全部楼层
明白了
/proc/devices/中的设备是通过insmod加载到内核的,它可产生一个major供mknod作为参数。
/dev/*.* 是通过mknod加上去的,格式:mknod device1 c/b major minor 如:mknod dr1 c 254 0,用户通过此设备名来访问你的驱动。
谢谢超级moderator的回复,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-28 14:22 , Processed in 1.031250 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表