zoukankan      html  css  js  c++  java
  • 18.15 驱动程序

    18.15.1 Makefile错误

    ERROR 01:         

      make -C $(KERN_DIR) M=`pwd` modules

    ANSWER 01:   

      上面的M=`pwd`,其中“`”为英文状态下的1前面的键,不是单引号’。

    18.15.2 调试同步互斥阻塞问题

    ERROR 02:         

      int fcntl(int fd, int cmd, ... /* arg */ );

      其中fd的类型是整型,由于开始定义为unsigned int fd;导致不能实现原子操作。

    ANSWER 02:   

      将fd定义为int fd;

    18.15.3 中断函数未写return

    ERROR 01:         

      中断函数后一定得写返回值return IRQ_HANDLED;,否则会出现如下错误

      irq event 79: bogus return value a

      [<c002ede8>] (dump_stack+0x0/0x14) from [<c0067844>] (__report_bad_irq+0x38/0x94)

      [<c006780c>] (__report_bad_irq+0x0/0x94) from [<c00678f0>] (note_interrupt+0x50/0x240)

       r4:c0364308

      [<c00678a0>] (note_interrupt+0x0/0x240) from [<c006862c>] (handle_edge_irq+0x120/0x144)

      ……

    ANSWER 01:   

      在中断函数后增加  return IRQ_HANDLED;

      static irqreturn_t pen_down_up_irq(int irq, void *dev_id)

      {    if(s3c_ts_regs->ADCDAT0 & (1<<15)){/*ADCDAT0=1 stylus up*/

                   printk("pen up ");

                   enter_wait_pen_down_mode();

            }else{

                   printk("pen down ");

                   enter_wait_pen_up_mode();

            }

            return IRQ_HANDLED;}

    18.15.4 增加mkdosfs命令

    做块设备驱动程序实验时,使用格式化命令mkdosfs时,系统内没有安装,在嵌入式设备内增加该命令步骤如下:

    首先在http://manpages.ubuntu.com/manpages/precise/man8/mkdosfs.8.html下载dosfstools压缩包;

    $ tar xzf dosfstools_2.11.orig.tar.gz

    .../dosfstools-2.11$ make CC=arm-linux-gcc

    .../dosfstools-2.11$ cd mkdosfs/

    .../mkdosfs$ ls

    .../mkdosfs$ cp mkdosfs /work/nfs_root/first_fs/usr/sbin/

    通过以上步骤,即可完成嵌入式设备命令的增加。

    18.15.5 入口函数未写return 0

    ERROR 01:         

    入口函数未写返回值:make后警告如下

    /work/3.4.2_driver_test/fifth_drv/fifth_drv.c:152: warning: control reaches end of non-void function

    在开发板装载驱动显示如下错误:

    / # insmod fifth_drv.ko

    insmod: can't insert 'fifth_drv.ko': Success

    ANSWER 01:   

    在入口函数增加返回值

    return 0;

    即可解决

    18.15.6 出口函数卸载顺序出错

    ERROR 02:         

    出口函数卸载顺序出错

          class_destroy(fifth_class);

          device_destroy(fifth_class,MKDEV(major, 0));

    如果是上述顺序的话会出错,因为device_destroy对fifth_class有依赖关系,先释放的话后面会出错。

    开发板卸载驱动时错误信息:

    / # insmod fifth_drv.ko

    / # rmmod fifth_drv

    Unable to handle kernel NULL pointer dereference at virtual address 00000034

    pgd = c3a68000

    [00000034] *pgd=33a55831, *pte=00000000, *ppte=00000000

    Internal error: Oops: 17 [#1] ARM

    Modules linked in: fifth_drv(O-) [last unloaded: fifth_drv]

    CPU: 0    Tainted: G           O  (3.4.2 #3)

    PC is at sysfs_delete_link+0x18/0x2c

    LR is at device_del+0x70/0x1b0

     [<c00df43c>] (sysfs_delete_link+0x18/0x2c) from [<c01bf73c>] (device_del+0x70/0x1b0)

    [<c01bf73c>] (device_del+0x70/0x1b0) from [<c01bf888>] (device_unregister+0xc/0x18)

    [<c01bf888>] (device_unregister+0xc/0x18) from [<c01bf8c4>] (device_destroy+0x30/0x3c)

    [<c01bf8c4>] (device_destroy+0x30/0x3c) from [<c005770c>] (sys_delete_module+0x1f0/0x250)

    [<c005770c>] (sys_delete_module+0x1f0/0x250) from [<c00152a0>] (ret_fast_syscall+0x0/0x2c)

    Code: 05900018 01a0100c 0a000004 e5900018 (e1d033b4)

    ---[ end trace 0b10d0445267ba1e ]---

    Segmentation fault

    ANSWER 02:   

    在出口函数改变顺序如下:

          device_destroy(fifth_class,MKDEV(major, 0));

          class_destroy(fifth_class);

    按上述顺序即可解决


  • 相关阅读:
    「斜杠」 ​​​​​​​​​​​​​​写出我心(一百一十三)
    「心就像一杯水」​​​​​​​​​​​​​写出我心(一百一十二)
    「一切速成都是耍流氓」​​​​​​​​​​​​写出我心(一百一十一)
    「生活方式」​​​​​​​​​​​写出我心(一百一十)
    反人类直觉
    编程语言居然是魔法咒语!
    PyInstaller 打包 python程序成exe
    .NET线程池最大线程数的限制-记一次IIS并发瓶颈
    为何要花费精力琢磨人工意识?
    Coder解压探索===冥想补蓝v.1.0
  • 原文地址:https://www.cnblogs.com/baixu/p/10489587.html
Copyright © 2011-2022 走看看