《Android深度探索》第七章心得体会

《Android深度探索》第七章讲的是LED将为我闪烁:控制发光二极管。1.创建LED驱动的设备文件:第1步:使用cdev_init函数初始化cdev;第2步:指定设备号,Linux设备文件的设备号分为主设备号和次设备号。设备号有直接在代码中指定和动态分配两种指定方法;第3步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中;第4步:使用class_create宏创建struct class;第5步:使用device_create函数创建设备文件。2.卸载LED驱动的设备文件,需要依次调用device_destroy、class_destroy和unregister_chrdev_region方法。3.控制LED,LED驱动可以通过字符串和I/O命令两种方式控制LED。

通过对第七章的学习,我知道了Linux驱动与硬件打交道,但并不是Linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互。所谓I/O内存是通过各种接口连接到主机的硬件在主机内存中的映射。Linux内核的内存管理模块负责同步I/O内存与硬件中的数据。每一个连接Linux的硬件在I/O内存中都会有映射首地址。LED驱动是本书第一个真正与硬件打交道的Linux驱动,虽然LED驱动并不复杂,只是控制了4个LED,但LED驱动已经包括了Linux驱动所有必要的部分。一个完整的Linux驱动主要由内部处理和硬件交互两部分组成。其中内部处理主要是指Linux驱动的装载、卸载、与设备文件相关的动作处理以及业务逻辑等。与硬件交互主要是指通过iowrite32、ioread32等函数与硬件中的寄存器进行数据交互。Linux驱动在不同平台的移植也是处理这两部分。如果在不同的Linux内核版本之间的移植,主要是移植第1部分,如果在不同硬件平台的移植,主要是移植第2部分。

时间: 2024-10-10 09:27:58

《Android深度探索》第七章心得体会的相关文章

《Android深度探索》第一章心得体会

<Android深度探索>第一章讲的是Android系统移植与驱动开发概述.Android的系统架构分为四层:Linux内核.C/C++代码库.Android SDK API.应用程序.Android移植的主要工作:移植Linux驱动和移植HAL.学习Linux驱动要准备一个自己熟悉的Linux操作系统,用于开发和测试Linux驱动:准备一块开发板:学习GNU C:学习相关的硬件知识:不断地实践.Linux将存储器和外设分为3大类:字符设备.块设备.网络设备. 通过对第一章的学习,我了解到由于

《Android深度探索》第二章心得体会

<Android深度探索>第二章讲的是搭建Android开发环境.搭建Android底层开发环境主要包括Android应用程序开发环境和Android NDK开发环境和交叉编译环境的搭建.搭建Android开发环境的步骤:安装JDK:安装Android SDK:安装Eclipse:安装ADT:配置ADT:建立AVD:下载Android NDK:安装CDT:命令行方式编译Android NDK程序:导入Android NDK的例子:配置Android NDK 的集成开发环境:安装交叉编译环境.

《Android》深度探索第七章心得体会

第七章简述了另外一个驱动程序:LED灯的控制 1.创建LED驱动的设备文件: 第1步:使用cdev_init函数初始化cdev: 第2步:指定设备号,分为两种指定方法 第3步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中: 第4步:使用class_create宏创建struct class: 第5步:使用device_create函数创建设备文件. 2.卸载LED驱动的设备文件 关键代码: void device_destory(sruct class *class,dev_t

Android深度探索第七章心得

从上到下,一个软件系统可以分为:应用程序.库.操作系统(内核).驱动程序.开发人员可以专注于自己熟悉的部分,对于相邻层,只需要了解它的接口,无需关注它的实现细节.以点亮LED为例,这4层软件的协作关系如下: 1.应用程序使用库提供的open函数打开代表LED的设备文件. 2.库数据open函数传入的参数执行“swi”指令,这条指令会引起CPU异常,进入内核. 3.内核的异常处理函数根据这些参数找到相应的驱动程序,返回一个文件句柄给库,进而返回给应用程序. 4.应用程序得到文件句柄后,使用库提供的

《Android深度探索》第十章心得体会

<Android深度探索>第十章讲的是嵌入式Linux的调试技术.对于复杂的Linux驱动及HAL等程序库,需要使用各种方法对其进行测试.printk函数的用法和printf函数类似,只不过printk函数运行在内核空间,printf函数运行在用户空间.也就是说,像Linux驱动这样的Linux内核程序只能使用printk函数输出调试信息.在Linux文件系统中,/proc经常用来作为内核空间和用户空间进行数据交互的工具./proc文件系统的行为方式和设备文件系统(/dev)类似./proc是

Android深度探索——第七章读书笔记及心得

控制发光二极管 ——第七章读书笔记及心得 通过本章的学习掌握了一个真正和硬件打交道的linux驱动程序.知道了一个完整的linux驱动只要由内部处理与硬件交互两部分组成.其中的内部处理指linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑.与硬件交互主要是指通过部分函数与硬件中的寄存函数进行数据交互. Linux驱动直接与硬件打交道,但是并不是linux启动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.每一个连接linux的硬件在I/O内存中都会有映射首地址. 创建LED

Android深度探索第四章心得

本章主要介绍使用Git下载两套源代码.一套是Android 源代码,另一套是Linux 内核源代码.主要介绍如何下载和编译Android源代码和Linux内核源代码. Android源代码包含较多东西,如内嵌在Android系统内置应用程序的源代码,Android SDK带的各种工具的源代码以及HAL源代码. 1.配置Android源代码下载环境,在Linux终端执行一系列命令: 第一步:创建一个用于存放下载脚本文件(repo)的目录(可将该脚本文件放置到任何目录中,在这里使用~/bin) #

Android深度探索第三章心得

本章主要介绍GIT的学习,以及介绍GIT用于获取诸多开源项目的源代码. 1.安装Git命令: #apt-get  install git # apt-get install git-doc git-svn git-email git-gui gitk 2.查看Git文档: # man git-checkout 3.源代码的提交与获取 1.创建版本库:git init   GIT的版本库分为本地版本库与远程版本库.在建立开源项目之初,需要使用git init 在本地建立一个空的版本库.其命令为:

Android深度探索第七章总结

通过本章的学习掌握了一个非常实用的linux驱动程序.知道了一个完整的linux驱动只要由内部处理与硬件交互两部分组成.其中的内部处理指linux驱动的装载.卸载.与设备文件相关的动作处理以及业务逻辑.与硬件交互主要是指通过部分函数与硬件中的寄存函数进行数据交互. Linux驱动是与本机的I/O内存进行交互.每一个连接linux的硬件在I/O内存中都会有映射首地址. 创建LED驱动的设备文件的步骤: 1.使用cdev_init函数初始化cdev 2.指定设备号 3.使用cdev_add函数将字符

Android深度探索第五章心得

一.S3C6410开发环境配置的过程如下: 1.检测当前系统是否支持USB转串口 #lsmod | grep usbserial 2.安装minicom #apt-get install minicom 3.配置minicom #minicom –s 4.测试minicom 二.烧写Android系统 (1)在Android烧写之前,务必启动EBOOT擦除NandFlash,使用EBOOT擦除步骤如下: 1.准备工作 用串口线或USB转串口连接开发板和PC,并启动minicom 2.进入Eboo