主题 : on the way……驱动程序和应用测试程序示例代码疑问? 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 12616
精华: 0
发帖: 56
金钱: 285 两
威望: 57 点
综合积分: 112 分
注册时间: 2010-01-10
最后登录: 2013-12-31
楼主  发表于: 2010-01-21 21:05

 on the way……驱动程序和应用测试程序示例代码疑问?

友善之臂LED驱动程序:


#include <linux/miscdevice.h>            1.这些头文件这么多都需要包括吗?
#include <linux/delay.h>
#include <asm/irq.h>
#include <mach/regs-gpio.h>
#include <mach/hardware.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/moduleparam.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/ioctl.h>
#include <linux/cdev.h>
#include <linux/string.h>
#include <linux/list.h>
#include <linux/pci.h>
#include <asm/uaccess.h>
#include <asm/atomic.h>
#include <asm/unistd.h>


#define DEVICE_NAME "leds"

static unsigned long led_table [] = {
    S3C2410_GPB5,
    S3C2410_GPB6,
    S3C2410_GPB7,
    S3C2410_GPB8,
};

static unsigned int led_cfg_table [] = {
    S3C2410_GPB5_OUTP,
    S3C2410_GPB6_OUTP,
    S3C2410_GPB7_OUTP,
    S3C2410_GPB8_OUTP,
};

static int sbc2440_leds_ioctl(
    struct inode *inode,
    struct file *file,
    unsigned int cmd,
    unsigned long arg)
{
    switch(cmd) {                                                             2.case语句后面怎么没有break语句啊?那这样选择语句还起什么作用啊?    case 0:
    case 1:
        if (arg > 4) {
            return -EINVAL;
        }
        s3c2410_gpio_setpin(led_table[arg], !cmd);
        return 0;
    default:
        return -EINVAL;
    }
}

static struct file_operations dev_fops = {
    .owner    =    THIS_MODULE,        ———————————3.这里的".owner和.ioctl"怎么理解啊?                         
    .ioctl    =    sbc2440_leds_ioctl,
};

static struct miscdevice misc = {
    .minor = MISC_DYNAMIC_MINOR,
    .name = DEVICE_NAME,
    .fops = &dev_fops,
};

static int __init dev_init(void)
{
    int ret;

    int i;
    
    for (i = 0; i < 4; i++) {
        s3c2410_gpio_cfgpin(led_table, led_cfg_table[i]);--------------------------4.这里的s3c2410_gpio_cfgpin();函数在哪里定义了啊?怎么用?        s3c2410_gpio_setpin(led_table, 0);
    }

    ret = misc_register(&misc);——————————————————————5这一句什么意思?
    printk (DEVICE_NAME"\tinitialized\n");

    return ret;
}

static void __exit dev_exit(void)
{
    misc_deregister(&misc);
}

module_init(dev_init);-------------------------------------------这几句是干什么的?
module_exit(dev_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("FriendlyARM Inc.");




附带测试程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>

int main(int argc, char **argv)
{
    int on;
    int led_no;
    int fd;
    if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||
        on < 0 || on > 1 || led_no < 0 || led_no > 3) {
        fprintf(stderr, "Usage: leds led_no 0|1\n");
        exit(1);
    }
    fd = open("/dev/leds0", 0);
    if (fd < 0) {
        fd = open("/dev/leds", 0);
    }
    if (fd < 0) {
        perror("open device leds");
        exit(1);                                         ----------------------------6.上面屡次出现的exit(1); 什么意思?
    }
    ioctl(fd, on, led_no);
    close(fd);                                    
    return 0;
} ------------------------------------------------------------------------------------------------7在没有操作系统的时候怎么让驱动程序和应用程序一起生成.bin文件然后下到NANDFLASH里面?                                                                      

代码后面的话是我的问题,请帮助新手……谢谢!    尤其是K老大一定要回答哦!
不抱怨,不放弃!
级别: 侠客
UID: 6846
精华: 0
发帖: 55
金钱: 425 两
威望: 215 点
综合积分: 110 分
注册时间: 2009-06-19
最后登录: 2012-03-21
1楼  发表于: 2010-01-22 09:07
  KASIM老大忙,我先跟你讲讲我知道的吧:

1、那些头文件,大多数都是必要的,有些有可能是不需要包含的,但是,你在不知道哪个不需要的情况下,别去动它们……
2、这个问题,你要把C语言加强一下了,不是每个CASE都必须要和BREAK一起用的,看想实现的功能是咋样……
3、这个是什么,具体我也不大懂,下面那个IOCTL应该是与应用程序里的IOCTL函数相对应的一个接口性质的东东……
4、手册里说了,s3c2410_gpio_cfgpin();如何实现的,你可以不用去管它,你没有仔细看手册啊…… 在LED 驱动那一页讲的
5、MISC类型的设备驱动注册
那几句是安装模块和卸载模块的接口
6、这个…… 退出程序的意思,一般用于出错情况下


附:我猜K老大根本都不想理你,因为你即没有看手册,又没有百度GOOGLE,就直接跑这来问这种问题……
级别: 新手上路
UID: 12830
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
综合积分: 44 分
注册时间: 2010-01-14
最后登录: 2012-09-23
2楼  发表于: 2010-01-22 14:08
happycxz说的对,你这些问题应该找一本驱动的书来看看,宋宝华的那本还可以。