本帖最后由 yanghelovehuang 于 2018-7-31 15:54 编辑
各位大佬,在写一个驱动, 可是遇到个头痛的问题。相关的三个函数如下:
static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev, char ch)
{
//对设备树资源的一些操作,提取gpio信息进而点亮灯也在这个函数里。
}
static long led_ioctl(struct file * filep, unsigned int cmd, unsigned long arg)
{
struct platform_device pdev;
//对应用层传入的命令的判定,根据R(红) G(绿) B(蓝)命令点亮相应颜色的灯。
switch(cmd)
{
case LED_R:
gpio_leds_create(&pdev,'R');
break;
.
.
.
}
static int led_probe(struct platform_device *pdev)
{
//一些初始化,之后调用gpio_leds_create(pdev,'R')函数,就能够点亮相应的灯。
}
现在的问题是:probe函数里调用gpio_leds_create函数能够点亮相应的灯,但是ioctl函数里调用的gpio_leds_create函数却不能点亮,而且设备树的提取也错误了。我经过多次实验觉得应该是struct platform_device *pdev这个参数的传递问题,probe对他进行了一些操作再传给gpio_leds_create函数。而ioctl函数规定也不能增加struct platform_device *pdev参数的传递,所以传递的pdev内容不对。我想知道能不能在ioctl中调用gpio_leds_create(pdev,'R'函数时用probe函数操作后的pdev参数传递?
|