C-使用一个函数修改变量的值并在另一个函数中使用它

时间:2019-07-16 10:42:11

标签: c pointers variables

我一直在尝试编写Linux驱动程序。首先,我编写了一个帮助程序文件,以便可以确定使用procfs加载两个驱动程序中的哪个(仅一个,而不是两个)。但似乎is_asd32始终为0,并且在需要时不会更改为1。这是我为辅助程序尝试的内容(已修剪,以便显示相关代码): *请注意,辅助程序已在fs_initcall处初始化,并且我确保其从用户空间执行脚本。驱动程序在device_initcall处初始化。

我尝试使用指针:

static char proc_data[4];
int *is_asd32 = NULL;

static ssize_t drivers_write(struct file *file, const char *buf,size_t count,loff_t *data )
{
    if(count > 4)
       return -EFAULT;
    if(copy_from_user(proc_data, buf, count))
       return -EFAULT;

    if(!strncmp("1",(char*)proc_data,1))
       *is_asd32 = 1;
    //no else block, just leave is_asd32 = 0
}

int use_asd32()
{
    if (*is_asd32)
        return 1;
    else
        return 0;
}    

也尝试过:

static char proc_data[4];
int *is_asd32 = NULL;
static int one = 1;

static ssize_t drivers_write(struct file *file, const char *buf,size_t count,loff_t *data )
{
    if(count > 4)
       return -EFAULT;
    if(copy_from_user(proc_data, buf, count))
       return -EFAULT;

    if(!strncmp("1",(char*)proc_data,1))
       is_asd32 = &one;
    //no else block, just leave is_asd32 = 0
}

int use_asd32()
{
    if (*is_asd32)
        return 1;
    else
        return 0;
}

两者都使系统崩溃。我猜是段错误。因此,也许我的指针用法有问题。

首次尝试(使用全局变量)

static char proc_data[4];
int is_asd32;

static ssize_t drivers_write(struct file *file, const char *buf,size_t count,loff_t *data )
{
    if(count > 4)
       return -EFAULT;
    if(copy_from_user(proc_data, buf, count))
       return -EFAULT;

    if(!strncmp("1",(char*)proc_data,1))
       is_asd32 = 1;
    //no else block, just leave is_asd32 = 0
}

int use_asd32()
{
    if (is_asd32)
        return 1;
    else
        return 0;
}

第一个驱动程序初始化代码:

extern int use_asd32(void);`
static int __init first_driver(void)
{
    if (use_asd32())
       return -ENODEV; // let the second driver load successfully
   ......................
}

第二个驱动程序初始化代码:

extern int use_asd32(void);
static int __init second_driver(void);
{
    if (!use_asd32())
        return -ENODEV;
............
}

use_asd32()的返回值应随着is_asd32()的改变而改变

0 个答案:

没有答案