• 第六章


    接下来就要进入Android底层开发入门的阶段了,在学习Linux驱动之前先来介绍一下Linux驱动的工作方式,Linux系统将每个驱动都映射成一个文件。这些文件称为设备文件或驱动文件,都保存在/dev目录中。这种设计理念使得与Linux驱动进行交互就向与普通文件进行交互一样容易。大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据变成与驱动设备交换数据。

    编写Linux驱动程序的步骤:

    1.建立Linux驱动骨架(装载和卸载Linux驱动)

    2.注册和注销设备文件

    3.指定与驱动相关的信息

    4.指定回调函数

    5.编写业务逻辑

    6.编写Makefile文件

    7.编译Linux驱动程序

    8.安装和卸载Linux驱动

    接下来要进行一个实例:

    基础代码:#mkdir -p  /root/drivers/ch06/word_count    建立目录存放Linux驱动程序

    #cd /root/drivers/ch06/word_count

    #echo '' > word_count.c  建立驱动源代码文件

    #echo 'obj-m := word_count.o' > Makefile  编写一个Makefile文件 make命令会吧Linux驱动源代码目录中的word_count.c或 word_count.s文件编译成word_count.o文件

    obj-m 表示将Linux驱动作为模块(.ko文件)编译,word_count.o会被连接进word_count.ko文件,然后使用insmod或modprode命令装载word_count.ko

    obj-y  表示将Linux驱动编译进Linux内核,word_count.o会被连接进built-in.o 文件,最终会被连接进内核

    Linux系统将内存分为了用户空间和内核空间,两者空间的程序不能直接访问,printk函数运行在内核空间,printf函数运行在用户空间,因此属于内核程序的Linux驱动是不能直接访问printf函数的#make -C /usr/src/linux-headers-3.0.0-15-generic  M=/root/driver/ch06/word_count    编译Linux驱动源代码

    # insmod word_count.ko  装载驱动

    # lsmod | grep word_count   查看word_count是否安装成功

    # rmmod word_count   卸载Linux驱动

    #dmesg | grep word_count | tail -n 2    查看有Linux驱动输出的日志信息

    加入有关信息:#define DEVICE_NAME "wordcount"    //定义设备文件名

    //描述与设备文件触发的事件对应的回调函数指针

    //owner:设备事件回调幻术应用于哪些驱动模块,THIS_MODULE表示应用于当前驱动模块

    static struct file_operations dev_fops={.owner = THIS_MODULE};

    //描述设备文件的信息

    //minor:次设备号 MISC_DYNAMIC_MINOR,:动态生成次设备号  name :  设备文件名称

    //fops : file_operations 结构体变量指针

    static struct miscdevice misc={.minor = MISC_DYNAMIC_MINOR, .name=DEVICE_NAME,.fops = &dev_fops};

    //初始化Linux驱动

    static  int word_count_init(void)

    { int ret;

       ret = misc_register(&misc);

      printk("word_count_init_success ");

     return ret;

    }

    装载与卸载驱动:检查word_count驱动工作是否完全正常

    #dmesg | tail -n 1

    #modinfo word_count.ko

    检测Linux驱动模块的依赖关系

    #depmod /root/drivers/ch06/word_count/word_count.ko

    调用命令装载Linux驱动

    #modprode word_count

    值得注意的是insmod 和 modprode 命令都是加载驱动,后者可以检查驱动模块的依赖性

    接下来是多种方法测试Linux驱动:

    1.使用Ubuntu Linux测试Linux驱动程序

    2.在安卓模拟器上使用原生C语言来测试

    3.使用Android ADK测试Linux驱动程序

    4.使用Java代码直接操作设备文件来测试

    5.使用S3C6410测试

    6.将驱动编译进Linux内核测试

  • 相关阅读:
    WPF应用程序中获取参数
    访问远程oracle数据库时TNS操作超时
    VS2010不能引用System.Data.OracleClient解决方法
    Windows系统下完全卸载Oracle
    创建WPF单实例应用程序
    Winform 版本信息
    SQL Date Time format
    Union合并数组(去掉重复的项目)
    SQL数据类型nchar,char,varchar与nvarchar区别
    Sql语句 生日提醒
  • 原文地址:https://www.cnblogs.com/xianrenzhilu/p/5561573.html
Copyright © 2020-2023  润新知