官方QQ群收藏本站

百问linux嵌入式论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 78|回复: 3

chmod 777 ./led_test 没反应

[复制链接]

2

主题

12

帖子

40

积分

新手上路

Rank: 1

积分
40
发表于 2019-9-12 19:00:03 | 显示全部楼层 |阅读模式
我尝试过在drv的probe中实现点灯 可以实现 但是chmod 777 ./test程序却连open都打不开 完全没有反应 进程里也没有test
/dev中有led0文件  字符设备也创建成功了 以下是我的代码(编译都通过了 头文件省略)
my_drv.c:

struct mydrv_desc{
char *name;
int dev_major;
int num;
struct class *cls;
struct device *dev;
struct resource *res;
void *base;
};
struct mydrv_desc *des;
ssize_t led_drv_write (struct file *filp, char __user *buf, size_t count, loff_t *fpos)
{
printk("---------%s--------\n", "led_drv_write");
int val;
int ret;
ret = copy_from_user(&val, buf, count);
if (ret < 0)
{
  printk("copy_from_user error!\n");
  return -1;
}
if (val)//liang
{
  writel(readl(des->base + 4) & ~(0x1<<5), des->base + 4);
}else{
  writel(readl(des->base + 4) |(0x1<<5), des->base + 4);
}

return 0;
}
int led_drv_open (struct inode *fp, struct file *filp)
{
printk("---------%s--------\n", "led_drv_open");
return 0;
}
int led_drv_close (struct inode *fp, struct file *filp)
{
printk("---------%s--------\n", "led_drv_close");
return 0;
}
const struct file_operations  fops = {
.write = led_drv_write,
.open = led_drv_open,
.release = led_drv_close,
};
int mydrv_pro (struct platform_device *pdev)
{
printk("---------%s--------\n", "mydrv_pro");
des = kzalloc(sizeof(struct mydrv_desc), GFP_KERNEL);
if (des == NULL)
{
  printk("kzalloc is error!\n");
  return -1;
}
des->dev_major = register_chrdev(0, "2440_led",  &fops);
if (des->dev_major < 0)
{
  printk("register chrdev is error!\n");
  return -1;
}
des->cls= class_create(THIS_MODULE, "2440_led_drv");
des->dev = device_create(des->cls, NULL, MKDEV(des->dev_major, 0), NULL, "led0");
des->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
des->base = ioremap(pdev->resource->start, 8);
writel(readl(des->base) & ~(0x3<<10) | (0x1<<10), des->base);
return 0;
}
int mydrv_re (struct platform_device *dev)
{
printk("---------%s--------\n", "mydrv_re");
iounmap(des->base);
device_destroy(des->cls, MKDEV(des->dev_major, 0));
class_destroy(des->cls);
unregister_chrdev(des->dev_major, "2440_led");
kfree(des);

return 0;
}
const struct platform_device_id led_id_table[] = {
{"2440_led", 0x4444},
};
struct platform_driver my_drv={
.driver = {
  .name = "my_dev_drv",
},
.probe = mydrv_pro,
.remove = mydrv_re,
.id_table = led_id_table,
};
static int __init drv_init(void)
{

printk("---------%s--------\n", "drv_init");
int ret = platform_driver_register(&my_drv);
if (ret < 0)
{
  printk("bus register is error!\n");
  return ret;
}
return 0;
}
static void __exit drv_exit(void)
{
printk("----------------%s--------------\n", "drv_exit");
platform_driver_unregister(&my_drv);

}
module_init(drv_init);
module_exit(drv_exit);
MODULE_LICENSE("GPL");

my_dev.c:

#define GPFCON 0x56000050

struct resource  led_res[] = {
[0] = {
  .start = GPFCON,
  .end = GPFCON + 8 -1,
  .flags = IORESOURCE_MEM,
  }
};

struct  platform_device my_dev = {
.name = "2440_led",
.id = -1,
.num_resources = ARRAY_SIZE(led_res),
.resource = led_res,
};
static int __init dev_init(void)
{

printk("---------%s--------\n", "dev_init");
int ret = platform_device_register(&my_dev);
if (ret < 0)
{
  printk("dev register is error!\n");
  return ret;
}
else
{
  printk("dev register is success!\n");
}


return 0;
}
static void __exit dev_exit(void)
{
printk("----------------%s--------------\n", "dev_exit");
platform_device_unregister(&my_dev);

}
module_init(dev_init);
module_exit(dev_exit);
MODULE_LICENSE("GPL");

led_test.c:

int main()
{
int on;
printf("main success!\n");
int fd;
fd = open("/dev/led0", O_RDWR);
printf("open success!\n");
if(fd<0)
{
  perror("open");
  exit(-1);
}
while(1)
{
  on = 1;
  write(fd, &on, 4);
  printf("write success!\n");
  sleep(2);
  on = 0;
  write(fd, &on, 4);
  printf("write success!\n");
  sleep(2);
}
return 0;
}




回复

使用道具 举报

0

主题

1272

帖子

3864

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3864
发表于 2019-9-12 21:52:18 | 显示全部楼层
chmod 777 ./led_test 没反应?是什么意思 这个是加执行权限而已
我是百问网www.100ask.org答疑助手,有关站务问题请与我联系。
韦东山视频开发板购买店铺https://100ask.taobao.com/
微信公众平台:baiwenkeji
回复 支持 反对

使用道具 举报

2

主题

12

帖子

40

积分

新手上路

Rank: 1

积分
40
 楼主| 发表于 2019-9-13 08:52:52 来自手机 | 显示全部楼层
百问网-杨老师 发表于 2019-9-12 21:52
chmod 777 ./led_test 没反应?是什么意思 这个是加执行权限而已

是的  但是led_test里面的程序也跑不起来  不知道是哪里的原因
回复 支持 反对

使用道具 举报

8

主题

1571

帖子

4848

积分

版主

Rank: 7Rank: 7Rank: 7

积分
4848
发表于 2019-10-9 21:30:58 | 显示全部楼层
芊芊学子 发表于 2019-9-13 08:52
是的  但是led_test里面的程序也跑不起来  不知道是哪里的原因

跑步起来是啥意思?丝毫没有反应?加打印呀
我是百问网www.100ask.org答疑助手,有关技术问题请与我联系。
韦东山视频开发板购买店铺:https://100ask.taobao.com/
微信公众平台:baiwenkeji
回复 支持 反对

使用道具 举报

技术支持
在线咨询
咨询热线
0755-86200561
微信扫一扫
获取更多资讯!

Archiver|小黑屋|百问linux嵌入式论坛     

GMT+8, 2019-11-17 19:00 , Processed in 0.095725 second(s), 9 queries , File On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表