|  | 
 
| 本帖最后由 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应该是个正值才对,这里是我的第二个问题
 
 | 
 |