官方QQ群收藏本站

百问linux嵌入式论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 82|回复: 2

参照老师的源代码first_drv.c写的代码,make编译不通过

[复制链接]

3

主题

6

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2019-5-23 21:40:31 | 显示全部楼层 |阅读模式
如题:正在学习第一期第二期衔接视频中的led驱动章节。百度了半天,也没找到解决办法,求老师以及各位大牛们帮忙解答,感谢感谢!!


参照老师的first_drv.c和make写了代码,执行make的时候报错,详细情况如下:(使用beyond compare对比了下代码,代码没问题,猜想会不会是我的内核的问题,但是内核已经编译通过了)


(1)makefile内容如下:makefile直接拷贝的老师的原来的Makefile,仅仅修改了第一行kern_dir的路径:
  1. KERN_DIR = /home/lsy/linux_kernel/linux-master

  2. all:
  3.         make -C $(KERN_DIR) M=`pwd` modules

  4. clean:
  5.         make -C $(KERN_DIR) M=`pwd` modules clean
  6.         rm -rf modules.order

  7. obj-m        += first_drv.o
复制代码

(2)代码如下first_drv.c,代码仅仅写了一个printk,简单地驱动框架,照着视频敲得,也跟源代码比较了,没问题
  1. #include <linux/module.h>
  2. #include <linux/kernel.h>
  3. #include <linux/fs.h>
  4. #include <linux/init.h>
  5. #include <linux/delay.h>
  6. #include <asm/uaccess.h>
  7. #include <asm/irq.h>
  8. #include <asm/io.h>

  9. static int first_drv_open(struct inode *inode, struct file *file)
  10. {
  11.     printk("first_drive_open\n");
  12.     return 0;
  13. }

  14. static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
  15. {
  16.     printk("first_drive_write\n");
  17.     return 0;
  18. }

  19. static struct file_operations first_drv_fops = {
  20.     .owner = THIS_MODULE,
  21.     .open  = first_drv_open,
  22.     .write = first_drv_write,
  23. }

  24. //驱动入口函数
  25. static int first_drv_init(void)
  26. {
  27.     register_chrdev(111, "first_drv", &first_drv_fops); //注册驱动程序,告诉内核

  28.     return 0;
  29. }

  30. //驱动出口函数
  31. static void first_drv_exit(void)
  32. {
  33.     unregister_chrdev(111, "first_drv"); //卸载驱动程序,告诉内核
  34. }

  35. module_init(first_drv_init);
  36. module_exit(first_drv_exit);

  37. MODULE_LICENSE("Dual BSD/GPL");

复制代码


(3)执行make命令,编译报错如下
:(也可以看附图截图)
lsy@lsy-computer:~/drive_test/led_drv/led_drv$ make
make -C /home/lsy/linux_kernel/linux-master M=`pwd` modules
make[1]: Entering directory `/home/lsy/linux_kernel/linux-master'
  CC [M]  /home/lsy/drive_test/led_drv/led_drv/first_drv.o
/home/lsy/drive_test/led_drv/led_drv/first_drv.c:29:1: error: expected ‘,’ or ‘;’ before ‘static’
static int first_drv_init(void)
^
In file included from include/linux/printk.h:5:0,
                 from include/linux/kernel.h:13,
                 from include/linux/list.h:8,
                 from include/linux/module.h:9,
                 from /home/lsy/drive_test/led_drv/led_drv/first_drv.c:1:
/home/lsy/drive_test/led_drv/led_drv/first_drv.c: In function ‘__inittest’:
/home/lsy/drive_test/led_drv/led_drv/first_drv.c:42:13: error: ‘first_drv_init’ undeclared (first use in this function)
module_init(first_drv_init);
             ^
include/linux/init.h:349:11: note: in definition of macro ‘module_init’
  { return initfn; }     \
           ^
/home/lsy/drive_test/led_drv/led_drv/first_drv.c:42:13: note: each undeclared identifier is reported only once for each function it appears in
module_init(first_drv_init);
             ^
include/linux/init.h:349:11: note: in definition of macro ‘module_init’
  { return initfn; }     \
           ^
/home/lsy/drive_test/led_drv/led_drv/first_drv.c: At top level:
/home/lsy/drive_test/led_drv/led_drv/first_drv.c:22:31: warning: ‘first_drv_fops’ defined but not used [-Wunused-variable]
static struct file_operations first_drv_fops = {
                               ^
In file included from include/linux/printk.h:5:0,
                 from include/linux/kernel.h:13,
                 from include/linux/list.h:8,
                 from include/linux/module.h:9,
                 from /home/lsy/drive_test/led_drv/led_drv/first_drv.c:1:
include/linux/init.h:350:6: error: ‘init_module’ aliased to undefined symbol ‘first_drv_init’
  int init_module(void) __attribute__((alias(#initfn)));
      ^
/home/lsy/drive_test/led_drv/led_drv/first_drv.c:42:1: note: in expansion of macro ‘module_init’
module_init(first_drv_init);
^
make[2]: *** [/home/lsy/drive_test/led_drv/led_drv/first_drv.o] Error 1
make[1]: *** [_module_/home/lsy/drive_test/led_drv/led_drv] Error 2
make[1]: Leaving directory `/home/lsy/linux_kernel/linux-master'
make: *** [all] Error 2
lsy@lsy-computer:~/drive_test/led_drv/led_drv$


错误log1

错误log1

错误log2

错误log2
回复

使用道具 举报

8

主题

1310

帖子

4095

积分

版主

Rank: 7Rank: 7Rank: 7

积分
4095
发表于 2019-5-23 21:44:41 | 显示全部楼层
static struct file_operations first_drv_fops = {
    .owner = THIS_MODULE,
    .open  = first_drv_open,
    .write = first_drv_write,
}

最后边少一个 ;
我是百问网www.100ask.org答疑助手,有关技术问题请与我联系。
韦东山视频开发板购买店铺:https://100ask.taobao.com/
微信公众平台:baiwenkeji
回复 支持 1 反对 0

使用道具 举报

3

主题

6

帖子

20

积分

新手上路

Rank: 1

积分
20
 楼主| 发表于 2019-5-24 09:19:36 | 显示全部楼层
百问网-李老师 发表于 2019-5-23 21:44
static struct file_operations first_drv_fops = {
    .owner = THIS_MODULE,
    .open  = first_drv_ ...

是的,解决了,谢谢老师
回复 支持 反对

使用道具 举报

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

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

GMT+8, 2019-6-27 07:08 , Processed in 0.135713 second(s), 11 queries , File On.

Powered by Discuz! X3.3

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

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