安卓深度探索(卷一)第十章

printk 函数的原型如下:

asmlinkage int printk(const char *fmt, ... )

第1个参数表示格式字符串,后面是再变参数。也就是说,一旦 printk 函数至少要有两个参数〔格式字符串),如果格式字符串中包含在占位符(%d、 %s), 后面必须跟与占位符相等数量的参数,以便一一对应传入 printk 函数。

KERN_DEBUG KREN_WARNING 是两个宏 它们的值分别为飞<7>和飞<4>。在 printk

数的第1个参数值(格式字符串)前面加尖括号(<…>)包含的数字表示输出的日志级别.

修改 p rintk_demo 驱动代码,通过编译指令定义了pr_debug 宏, 并通过修改

编译指令的条件值来控制是否调用 pri ntk 函数

Linux 文件系统中, proc 经常被用来作为内核空间与用户空间进行数据交 EE 具。/ proc文件系统的行为方式与设备文件系统 C/dev )类似。/ proc 是虚拟文件系统,也就是说 proc 并不是真正的文件系统,而是内存映射 所有读写/ proc l¥J 操作都是对内存的读写 所以读写/ proc 文件系统的速度要远比读写 dev 文件系统的速度快。因此,/ proc 文件系统也可作为 inux 驱动与用户空间程序交互的工具.

proc_mkdir

name 虚拟目录名称。

parent 虚拟目录父目录的 pro c_ 让_ en 町结构体指针。如果直接在/ proc 目录下建 虚拟目录,该参数的值为 NULL

re e_p ro nt η

name 虚拟文件名

mode 虚拟文件的访问权限, 等同于 Linux 文件的访问权限

parent 文件父目录 proc _dir_ entry 结构体指针。如果直接在/ pro 剖录下建立虚拟

文件,该参数的值为 NU LL

at e_p oc_ ad _e

name 虚拟文件名称。

mod :虚拟文件的访问权限,等同于 Linux 文件的访问权限

base 虚拟文件父目录的 roc _dir_entry 结构体指针。如果直接在/ proc 下建立虚拟文件,

该参数的值为 NULL

read_proc :处理读动作的函数指针。

data 用于虚拟文件系统的数据(任意类型的指针〉。该值就是 pro _dir_entry.read_proc 函数的最后一个参数值。相当于与某个虚拟文件永久绑定的数据。如果不市要设置该数据,可以为 NULL

remove_proc_entry

name 删除的虚拟文件的名称。

parent 虚拟文件父目录的 proc _dir_en 结构体指钊。如果直接在/ proc 目录下建立虚拟文件 该参数的值为 NULL.

时间: 2024-12-05 03:12:33

安卓深度探索(卷一)第十章的相关文章

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

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

《Android深度探索卷一》第一章Android系统移植与驱动开发概述。

<Android深度探索>第一章讲的是Android系统移植与驱动开发概述.这一章节将对Android以及Linux驱动做一个总体的介绍. Android是一个非常优秀的的嵌入式操作系统.经过几年的发展和演进,Android已经形成了非常完善的系统架构.Android的系统架构分为四层,如下图 Android移植可分为两部分:应用移植和系统移植. Android系统移植是指让Android操作系统在某一个特定硬件平台上运行.使一个操作系统在特定硬件平台上运行的一个首要条件就是该操作系统支持硬件

安卓深度探索(卷一)第五章

S3C6410 是由三星公司推出的 款低功耗.高性价比的 SC ( reduced instruction set computer, 精简指令集计算机〉处理器,它基于 ARM11 内核. OK6410 开发板采用“核心板+底板”结构 安装串口调试工具:minicom 第一步:检测当前系统是否支持 SB 转串口 lsmod | grep usbserial 第二步:安装minicom sudo apt-get install minicom 第三步:配置minicom sudo minicom

安卓深度探索(卷一)第九章

HAL ( Hardware Abstraction Layer ,硬件抽象层,是建立在 Linux 驱动之上的一套程序库,传统的 linux系统中 Linux 驱动一般有两种类型的代码:访问硬件寄存器的代码和业务逻辑代码HAL 并不是 Linux 内核的 部分,而是位于Android的系统运行库.也就是说在 Linux驱动中不应该保留任何不想公开的业务逻辑代码 这些代码都放在 HAI 层中,而只保留与寄存器交互的代码,访问寄存器只有 Linux 内核的相关函数能做到.如果这样安排 Linpx

安卓深度探索(卷一)第八章

代码矗用分为静态和动态两种.在上 节介绍的方式是代码的静态重用,这种方式是代码级的重用,也就是将需要重用的代码和使用这些代码的使用者放在 起进行编译,最终生成 个可执行文件或程序C. ko .so 等) 8-1 测试 mu ti fi iver 驱动在本节将介绍另外 种代码共享的方式:模块依赖,也称为导出符号.如果只能用一句话解释如何利用导出符号实现代码共卒,这句话就是“在 个驱动模块里使用另 个驱动模块里的被导出的符号(常章.变量.函数等〉” 由于 ymbol_ consumer 驱动使用了

安卓深度探索(卷一)第七章

led驱动的实现原理尽管 Linux 驱动直接与硬件打交道,但并不是 Linux 驱动直接向硬件中的内存写数据 而是与本机的 ν0 内存( νO Memory ,位于内核空间〉进行交互.所谓 1/0 内存是通过各种接口( PC I .USB .蓝牙.以太网口 等〉连接到主机( PC .手机〉的硬件〈网卡.声卡.摄像头等〉在主机内存中的映射. 编写LED驱动 第一步:使用 cdev_init 函数初始化cdev 第二步:指定设备号 直接在代码中指定(硬编码〉 动态分配 第三步:使用 cdev_ad

安卓深度探索(卷一)第六章

Linux系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目中.这种设计理念使得与Linux驱动进行交互就像与普通文件进行交互一样容易. 由于大多数Linux驱动都有与其对应的设备文件, 因此与Linux驱动交换数据就变成了与 设备文件交换数据.例如,向Linux打印机驱动发送一个打印命令,可以直接使用C语言函数open打开设备文件, 使肝 函数 oc tl 向该驱 的设备文件发送打印命令. 编写linux驱动的步骤 第一步:建 Linu 驱动骨架 装载和卸载

《Android深度探索卷一》读书笔记一

一.Android系统架构 Android系统架构分为4层: 第一层:Linux内核 Android是基于Linux内核的,因此,Android内核和标准Linux2.6的内核结构基本相同,细微差异在Android在Linux内核中增加的主要是一些Android专用驱动和Android使用的设备驱动,这些驱动程序在Android不同版本中可能并不通用. 第二层:C/C++代码库 是使用C/C++编写的代码库也就是Linux下的.so文件,还有Android运行时环境(AndroidRuntime

《Android深度探索卷一》读书笔记二

开发,测试和调用Linux驱动,HAL程序库需要的工具: JDK6或以上版本: Eclipse3.4或以上版本: ADT(用于开发Android应用程序): CDT(用于开发AndroidNDK程序): Android SDK: Android NDK: 交叉编译环境: Linux内核源代码: Android源代码: 用于调试开发板的串口工具:minicom; 一.安装JDK 下载JDK压缩包并解压到任意目录,在Linux终端输入“getdit /etc/profile”打开profile文件,