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