zoukankan      html  css  js  c++  java
  • 《android深入探索》第六章心得

    看了本书第六章,我学到了:

    1. linux系统下每个驱动都映射成一个文件(设备文件/驱动文件),都保存在/dev目录下。回掉函数的功能是使linux驱动能响应应用程序,使设备文件和应用程序交互的接口。
    1. 编写linux驱动程序(大体框架):

    ①   装载驱动:module_init()   卸载驱动:module_exit()

    ②   注册设备文件:misc_register()  注销设备文件:misc_deregister()

    ③   指定与驱动相关信息:MODULE_AUTHOR、MODULE_LICENSE(必需)、MODULE_ALIAS、MODULE_DESCRIPTION等宏。

    ④   指定回掉函数:通过事件触发各回掉函数:open/read/write/icntl/close等

    ⑤   编写Makefile文件:修改目标及路径及交叉编译工具

    ⑥   编译linux驱动程序:make

    ⑦   安装linux驱动:insmod/modprobe

    卸载linux驱动:rmmod

    1. 编写统计单词个数的linux驱动程序(详细):

    ①   建立存放驱动程序的目录及编写驱动源码文件word_count.c,编写Makefile文件:

    • obj-m :=word_count.o

    word_count=y “=process.o data.o

    ②   初始化和退出驱动:module_init(word_count_init)、module_exit(word_count_exit)

    ③   指定与驱动相关信息:查看驱动自身信息 #modinfo word_count

    MODULE_AUTHOR、MODULE_LICENSE(必需)、MODULE_ALIAS、MODULE_DESCRIPTION等宏信息放在源代码最后。

    ④   指定回掉函数:word_count_read()、word_count_write()

    由于内核空间程序不能直接访问用户空间数据,所以在两个函数中分别使用copy_to_user()、copy_from_user()实现内核与用户空间数据的交互。

    ⑤   编译驱动源码:#make –C (linux内核头文件目录) M=(驱动程序所在目录)

    编译完成后生成linux驱动模块文件word_count.ko

    ⑥   安装linux驱动:#insmod word_count.ko

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

    卸载linux驱动:#rmmod word_count

    查看linux驱动输出的日志信息:#dmesg | grep word_count | tail –n 2 或#cat /var/log/syslog | grep word_count | tail –n 2

    1. 测试linux驱动:

    ①   在虚拟机中测试:

    编写一个测试程序(test.c),

    #gcc test.c –o test

    #./test

    终端中查看测试结果

    ②   Android模拟器中测试:

    进入安卓模拟器goldfish中配置linux内核,再#make menuconfig 进入设置界面将第二项选中,再回车进入子菜单选中前三项,保存退出。最后重新编译linux内核。

    执行build.sh脚本完成对驱动的编译、上传、安装,再进入android模拟器终端使用“echo”、”dmesg“测试驱动并查看结果。

    ③   使用Android NDK测试:

    启动模拟器,

    #emulator –avd myavd –kernel /root/kernel/goldfish/arch/arm/boot/zImage

    ④   使用java代码直接操作设备文件测试。

    ⑤   使用S3C6410开发板测试:

    重新编译test.c文件,将编译好的test源码上传给开发板,测试方法与android模拟器类似。

    在Eclipse中重新编译android NDK程序即可在S2C6410开发板上运行。

                       在S3C6410开发板中使用java代码测试。

    ⑥   将驱动编译进linux内核测试

    将源码(word_count.c)放到<linux内核目录中>/drivers/char目录

    修改Kconfig>文件,在endmenu前添加:

    config WORD_COUNT

    bool “word_count driver“

               help

                        This is a word count driver.It can get a word count from /dev/wordcount

    修改Makefile文件,插入:obj - $(CONFIG_WORD_COUNT)                += word_count.o

    用菜单项设置.config文件:#make menuconfig 选择“Device Drivers”-“Character devices”-“word_count_driver”

    编译linux内核:进入/root/kernel/goldfish,执行#make (在之前要提前赋予访问设备的权限)

    1. 使用eclipse开发和测试linux驱动程序:

    ①   Eclipse开发:建立C工程——建立C源码文件链接——设置include路径——编译linux驱动

    ②   测试linux驱动:导入test.c文件——设置include路径——建立Target——Build工程——运行测试程序

  • 相关阅读:
    centos下安装wireshark 抓包
    centos安装系统全过程
    生活大爆炸第十二季在线观看下载(2018)
    古战场传奇第四季在线观看下载(2018)
    奥维尔号第二季在线观看迅雷下载(2018)
    路德第五季在线观看迅雷下载
    权力的游戏第七季在线观看(2017)
    维京传奇第五季下载
    给你的 CentOS 7 安装中文支持
    行尸走肉第九季在线观看
  • 原文地址:https://www.cnblogs.com/cqj0818/p/5561724.html
Copyright © 2011-2022 走看看