搜档网
当前位置:搜档网 › Android开发系列:查看LogCat日志

Android开发系列:查看LogCat日志

Android开发系列:查看LogCat日志
Android开发系列:查看LogCat日志

Android开发系列:查看LogCat日志

LogCat日志

1. Window > Customize Perspective

2. 选择Shortcuts 标签

3. 在Submenus 选择Show View

4. 在Shortcut Categories选择Android

5. 在右边勾上 LogCat,然后确定。

6. Window > Show View > LogCat 就可以打开LogCat View

二 Log方法:

android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及Log.e() 。根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。

1、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");

2、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.

3、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息

4、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。

5、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。

三 adb Log过滤:

1. 只显示需要的输出,白名单

最方便的当然是通过管道使用 grep 过滤了,这样可以使用 grep 强大的正则表达式匹配。简单的匹配一行当中的某个字符串,例如 MyApp:

adb logcat | grep MyApp

adb logcat | grep -i myapp #忽略大小写。

2 保存log

使用-d参数,可以在读完所有log后返回,而不会一直等待,在自动化较有用。例如:adb logcat -d -s xxx > xxx.log //得到filter为xxx的日志,存入xxx.log,然后返回。

3.

adb forward tcp:6100 tcp:7100// PC上所有6100端口通信数据将被重定向到手机端7100端口server上

Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat命令来查看和使用.

使用logcat命令

你可以用 logcat命令来查看系统日志缓冲区的内容:

[adb] logcat [

你也可以在你的电脑或运行在模拟器/设备上的远程adb shell端来使用logcat命令,也可以在你的电脑上查看日志输出。

$ adb logcat

你也这样使用:

# logcat

过滤日志输出

每一个输出的Android日志信息都有一个标签和它的优先级.

日志的标签是系统部件原始信息的一个简要的标志。(比如:“View”就是查看系统的标签).

优先级有下列集中,是按照从低到高顺利排列的:

?V— Verbose (lowest priority)

?D— Debug

?I— Info

?W— Warning

?E— Error

?F— Fatal

?S— Silent (highest priority, on which nothing is ever printed) 在运行logcat的时候在前两列的信息中你就可以看到 logcat的标签列表和优先级别,它是这样标出的:/.

下面是一个logcat输出的例子,它的优先级就似乎I,标签就是ActivityManage:

I/ActivityManager( 585): Starting activity: Intent

{ action=android.intent.action...}

为了让日志输出能体现管理的级别,你还可以用过滤器来控制日志输出,过滤器可以帮助你描述系统的标签等级.

过滤器语句按照下面的格式描tag:priority ..., tag表示是标签, priority是表示标签的报告的最低等级. 从上面的tag的中可以得到日志的优先级. 你可以在过滤器中多次写tag:priority.

这些说明都只到空白结束。下面有一个列子,例子表示支持所有的日志信息,除了那些标签为”ActivityManager”和优先级为”Info”以上的和标签为” MyApp”和优先级为” Debug”

以上的。小等级,优先权报告为tag.

adb logcat ActivityManager:I MyApp:D *:S

上面表达式的最后的元素 *:S,,是设置所有的标签为"silent",所有日志只显示有"View"

and "MyApp"的,用 *:S的另一个用处是能够确保日志输出的时候是按照过滤器的说明限制的,也让过滤器也作为一项输出到日志中.

下面的过滤语句指显示优先级为warning或更高的日志信息:

adb logcat *:W

如果你电脑上运行logcat,相比在远程adbshell端,你还可以为环境变量ANDROID_LOG_TAGS:输入一个参数来设置默认的过滤

export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"

需要注意的是ANDROID_LOG_TAGS过滤器如果通过远程shell运行logcat或用adb shell logcat来运行模拟器/设备不能输出日志.

控制日志输出格式

日志信息包括了许多元数据域包括标签和优先级。可以修改日志的输出格式,所以可以显示出特定的元数据域。可以通过 -v选项得到格式化输出日志的相关信息.

?brief— Display priority/tag and PID of originating process (the default format).

?process— Display PID only.

?tag— Display the priority/tag only.

?thread— Display process:thread and priority/tag only.

?raw— Display the raw log message, with no other metadata fields.

?time— Display the date, invocation time, priority/tag, and PID of the originating process.

?long— Display all metadata fields and separate messages with a blank lines.

当启动了logcat,你可以通过-v选项来指定输出格式:

[adb] logcat [-v ]

下面是用 thread 来产生的日志格式:

adb logcat -v thread

需要注意的是你只能-v 选项来规定输出格式 option.

查看可用日志缓冲区

Android 日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到日志信息,你需要通过-b 选项来启动logcat 。如果要使用循环缓冲区,你需要查看剩余的循环缓冲期:

-b 选项使用方法:

[adb] logcat [-b ]

下面的例子表示怎么查看日志缓冲区包含radio 和 telephony 信息:

adb logcat -b radio

查看stdout 和stderr

在默认状态下,Android 系统有stdout 和 stderr(System.out 和System.err)输出到

/dev/null ,在运行Dalvik VM 的进程中,有一个系统可以备份日志文件。在这种情况下,系统会用stdout 和stderr 和优先级 I.来记录日志信息

通过这种方法指定输出的路径,停止运行的模拟器/设备,然后通过用 setprop 命令远程输入日志

$ adb shell stop

$ adb shell setprop log.redirect-stdio true

$ adb shell start

系统直到你关闭模拟器/设备前设置会一直保留,可以通过添加/data/local.prop 可以使用模拟器/设备上的默认设置

Logcat 命令列表

-b 加载一个可使用的日志缓冲区供查看,比如event 和radio. 默认值是main 。具体查看Viewing Alternative Log Buffers.

-c 清楚屏幕上的日志.

-d 输出日志到屏幕上.

-f

指定输出日志信息的,默认是stdout. -g 输出指定的日志缓冲区,输出后退出.

-n 设置日志的最大数目.,默认值是4,需要和 -r 选项一起使用。

-r 时输出日志,默认值为16,需要和-f 选项一起使用. -s 设置默认的过滤级别为silent.

设置日志输入格式,默认的是brief格式,要知道更多的支持的格-v

式,参看Controlling Log Output Format.

Android驱动开发实例(控制LED灯)(精)

Android驱动例子(LED灯控制) 本例子,讲述在Android2.1上完全自已开发一个驱动去控制硬件口并写应用测试该驱动,通过这样一个例子,解析android下的驱动开发流程的应用调用流程,可以说是很好的入门引导 要达到的效果:通过Android的应用,调用驱动程序,在开发板上控制4个LED的亮灭。 一、硬件原理 如上图,通过4个IO口控制这LED,低电平LED亮, 这4个IO口分别是GPM1, GPM2, GPM3, GPM4, 二、驱动程序 1、在kernel文件夹下的driver目录,新键驱动文件夹 # cd kernel_Android_2.6.28.6/drivers 进到开发板的kernel目录,建驱动文件夹 #mkdir ledtest

2、在/driver/ledtest目录下,新建leddriver.c ,leddriver.h , Kconfig, Makefile 等4个文件leddriver.c leddriver.c 1. #include 2. #include 3. #include 4. #include/* For __init/__exit/... */ 5. #include 6. #include 7. #include 8. #include 9. #include 10. #include 11. #include 12. #include 13. #include 14. #include 15. #include 16. #include 17. #include//for register_chrdev( 18. #include 19. #include 20. #include"leddriver.h" 21. #include/* For MODULE_ALIAS_MISCDEV 22. (WATCHDOG_MINOR */ 23. #include/* For the watchdog specific items */ 24. #include/* For file operations */ 25. #define Viberator_MAJOR 97 //?÷éè±?o? 26. #define SCULL_NR_DEVS 4 27. #define SCULL_QUANTUM 4000 28. #define SCULL_QSET 1000 29. //---do as the GIO driver

android系统开发--HAL层开发基础

android系统开发--HAL层开发基础 Android HAL层,即硬件抽象层,是Google响应厂家“希望不公开源码”的要求推出的新概念 1,源代码和目标位置 源代码:/hardware/libhardware目录,该目录的目录结构如下: /hardware/libhardware/hardware.c编译成libhardware.so,目标位置为/system/lib目录 /hardware/libhardware/include/hardware目录下包含如下头文件: hardware.h 通用硬件模块头文件 copybit.h copybit模块头文件 gralloc.h gralloc模块头文件 lights.h 背光模块头文件 overlay.h overlay模块头文件 qemud.h qemud模块头文件 sensors.h 传感器模块头文件 /hardware/libhardware/modules目录下定义了很多硬件模块 这些硬件模块都编译成xxx.xxx.so,目标位置为/system/lib/hw目录 2,HAL层的实现方式 JNI->通用硬件模块->硬件模块->内核驱动接口 具体一点:JNI->libhardware.so->xxx.xxx.so->kernel 具体来说:android frameworks中JNI调用/hardware/libhardware/hardware.c中定义的hw_get_module函数来获取硬件模块, 然后调用硬件模块中的方法,硬件模块中的方法直接调用内核接口完成相关功能 3,通用硬件模块(libhardware.so) (1)头文件为:/hardware/libhardware/include/hardware/hardware.h 头文件中主要定义了通用硬件模块结构体hw_module_t,声明了JNI调用的接口函数 hw_get_module hw_module_t定义如下: typedef struct hw_module_t { /** tag must be initialized to HARDWARE_MODULE_TAG */ uint32_t tag; /** major version number for the module */ uint16_t version_major; /** minor version number of the module */ uint16_t version_minor; /** Identifier of module */ const char *id; /** Name of this module */ const char *name;

嵌入式linux android驱动工程师 面试题总汇

嵌入式linux android驱动工程师面试题总汇 1. 嵌入式系统中断服务子程序(ISR) 收藏中断是嵌入式系统中重要的组成 部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt 关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。 __interrupt double compute_area (double radius) { double area = PI * radius * radius; printf(" Area = %f", area); return area; } 1). ISR 不能返回一个值。2). ISR 不能传递参数。3). 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。4). 与第三点一脉相承,printf()经常有重入和性能上的问题。 2.C语言中对位的操作,比如对a的第三位清0,第四位置1.本来应该会的,一犯晕写反了,以后注意! #define BIT3 (1<<3) #define BIT4 (1<<4) a &= ~BIT3; a |= BIT4; 3.考到volatile含义并举例:理解出错,举了很具体的例子,连程序都搬上去了,有些理解不深的没举出来…… volatile表示这个变量会被意想不到的改变,每次用他的时候都会小心的重新读取一遍,不适用寄存器保存的副本。 volatile表示直接存取原始地址 例: 并行设备的硬件寄存器(状态寄存器) 在多线程运行的时候共享变量也要时时更新 一个中断服务子程序中访问到的的非自动变量(不太清楚,正在查找资料ing……) 4.要求设置一绝对地址为0x67a9 的整型变量的值为0xaa66 当时我的写法:#define AA *(volatile unsigned long *)0xaa66 AA = 0x67a9; 答案:

Android移动应用开发习题答案

Android移动应用开发习题答案 单元1 Android开发环境搭建与模拟器创建 1.填空题 (1) 2008 (2) Linux、操作系统 (3) 应用程序层、应用程序框架层、核心类库、Linux内核 (4) Java C++/C (5) 应用框架 (6) 应用程序 (7) 模拟器、Android模拟器 (8) IntelliJ IDEA Android 2.选择题 (1)创建程序的过程中,填写Application Name表示()。 正确答案:A (2)Android操作系统的手机可以有以下几个方法进行软件安装()。(多选题)ABCD (3)Android操作系统主要的特点是:()。(多选题) 正确答案:ABC (4)以下对Android操作系统描述正确的是:()。(多选题) 正确答案:ABCD (5)以下哪些是Android Stuido的优势()。(多选题) 正确答案:ABCD (6)以下哪些是Genymotion模拟器的优势()。(多选题) 正确答案:ABCD 3.简答题 (1)Android的四层架构分别包括哪几层?分别起到什么作用? 参考答案: Linux内核层(Linux Kernel):基于Linux内核,内核为上层系统提供了系统服务。 核心类库层(Libraries):系统库基于C/C++语言实现,通过接口向应用程序框架层提

基于Android Studio的移动应用开发任务驱动教程 供编程接口。 应用框架层(Application Framework):为开发者提供了一系列的Java API,包括图形用户界面组件View、SQLite数据库相关的API、Service组件等。 应用程序层(Applications):包含了Android平台中各式各样的应用程序。 (2)简述Android开发环境安装的步骤。 参考答案: 下载并安装JDK,配置JDK的环境变量; 从Anroid官网上下载Android开发组件(包含Eclipse和Android SDK、ADT); 安装Android开发环境(包括配置Android SDK的环境变量、打开Eclipse通过菜单设定Android SDK路径)。 (3)简述Android Studio的优势。 参考答案:略。 (4)简述Genymotion模拟器的优势。 参考答案:略。 (5)简述Android应用程序创建和运行的步骤。 参考答案: 通过菜单创建Android应用程序,设置应用程序名、Android版本等基本信息。 单击菜单中的运行按钮可以直接运行Android项目(也可以通过菜单配置运行参数, 指定运行的模拟器)。 单元2 Android Studio的组成结构与基本操作 1.填空题 (1) res/layout (2) Activity、Bundle (3) XML (4) java代码文件 (5) AndroidManifest.xml (6) 打包成.apk文件 2.选择题 (1)如果需要创建一个字符串资源,需要将字符串放在res\values的哪个文件中?()B (2)新建的Android程序默认的布局方式是相对布局(RelativeLayout),该布局中包含一个()控件。 B (3)要让布局文件或者控件能够显示在界面上,必须要设置RelativeLayout和控件的

51CTO学院-Android驱动与HAL开发实战视频课程

Android驱动与HAL开发实战视频课程 课程目标 本教程主要讲解了如何开发Android底层的驱动程序(Linux驱动),以及Android HAL的开发。并使用蜂鸣器等demo来讲解。 适用人群 了解Android的基本知识,想从事Android底层开发的学员。 课程简介 课程目标: 本教程主要讲解了如何开发Android底层的驱动程序(Linux驱动),以及Android HAL的开发。并使用蜂鸣器等demo来讲解。 适合对象: 了解Android的基本知识,想从事Android底层开发的学员。 学习条件: 熟悉Linux的基本操作和C语言 1 Android底层开发概述 [免费观看] 47分钟 本讲主要介绍了Android底层开发概况、Android底层架构、Linux驱动程序的基本结构等内容。 2 搭建开发环境 [免费观看] 44分钟 本讲主要介绍了如何搭建用于开发Android底层的开发环境。 3 源代码下载和编译 45分钟 本讲主要介绍了如何编译Android源代码和Linux内核源代码。并且如何下载这些系统的源代码。 4

搭建S3C6410开发板的测试环境 40分钟 本讲主要介绍了如何搭建S3C6410开发板(Android系统)的开发测试环境。本教程后面的蜂鸣器、LED驱动开发都会使用这个开发板进行开发和测试,其他类似的开发板也同样适用。不过需要向厂家或销售商索要相应的驱动。其余的例子也可以在手机和平板电脑上测试。 5 第一个Linux驱动_读写设备文件(1) [免费观看] 45分钟 本讲主要介绍了如何开发第一个有读写功能的Linux驱动程序(第一部分) 6 第一个Linux驱动_读写设备文件(2) [免费观看] 47分钟 本讲主要介绍了实现第一个Linux驱动的第二部分。 7 实现LED驱动(1) 42分钟 本讲主要介绍了实现LED驱动的基本方法,并实现了这个LED驱动(第一部分)。 8 实现LED驱动(2) 42分钟 本讲主要介绍了实现LED驱动的基本方法,并实现了这个LED驱动(第二部分)。 9 实现LED驱动(3) 47分钟 本讲主要介绍了实现LED驱动的基本方法,并实现了这个LED驱动(第三部分)。 10

Android驱动---LED驱动的编写汇总

Android驱动---LED驱动的编写 1.编写Android驱动时,首先先要完成Linux驱动,因为android驱动其实是在linux驱动基础之上完成了HAL层(硬件抽象层),如果想要测试的话,自己也要编写Java程序来测试你的驱动。 2.android的根文件系统是eclair_2.1版本。我会上传做好的根文件系统提供大家。这里要说的是,android底层内核还是linux的内核,只是进行了一些裁剪。做好的linux内核镜像,这个我也会上传给大家。android自己做了一套根文件系统,这才是android自己做的东西。android事实上只是做了一套根文件系统罢了。 假设linux驱动大家都已经做好了。我板子上有四个灯,通过ioctl控制四个灯,给定不同的参数,点亮不同的灯。 linux驱动代码因平台不同而有所不同,这就不黏代码了。 这是我测试linux驱动编写的驱动,代码如下: [cpp] view plaincopy #include #include #include #include #include #include #include #include #define LED_ON _IO ('k',1) #define LED_OFF _IO ('k',2) int main() { int i = 0; int dev_fd; dev_fd = open("/dev/led",O_RDWR); if ( dev_fd == -1 ) { printf("Cann't open file /dev/led\n"); exit(1); } while(1) { ioctl(dev_fd,LED_ON,1); sleep(1); ioctl(dev_fd,LED_OFF,1); sleep(1); ioctl(dev_fd,LED_ON,2); sleep(1); ioctl(dev_fd,LED_OFF,2);

Android Linux驱动开发工程师简历模板

Megan简历 工作经历 XX有限公司2016年09月- 2019年10月Android/Linux驱动开发工程师 带领驱动开发团队进行DM8127平台的定制开发,完成inux内核/uboot移植,外围驱动移植与开发, 基于IPNCRDK 搭建视频采集,降噪,编码、输出的数据流。配合应用团队实现智能交通抓拍业务。负责技术方案的预研和选型。负责软件版本需求评估、实现评估,工作分配,版本构建和发布、测试故障指派和处理等。 负责Atmel maxtouch电容触摸产品线技术开发与支持,包括Android驱动开发支持和项目性能调试和优化等。负责MIPI 桥接芯片和DDI显示驱动芯片技术支持。负责团队的建设和协调,以及开发进度的跟踪。 XX有限公司 2014年07月- 2016年08月Android/Linux驱动开发工程师 负责几款公司开发的ARM+DSP多媒体处理器芯片的测试、应用开发;这几款芯片广泛应用于Android平板电脑、微型投影机、电子书、MID等领域。 熟悉codec图像编解码算法,dsp底层算法库,主要用汇编开发,独立解决了编解码双核调度的问题。熟练使用c/c++。阅读过Android操作系统ion源码 公司ti平台开发板WinCE系统BSP,公司ti和freescale平台开发板的Android系统BSP开发和驱动开发,负责开发了一个RTSP流媒体的流媒体,把上级领导交代的工作尽快做好,提高工作效率。 教育经历 成都信息工程学院2010年09月- 2014年06月电子科学与技术本科 成都其他 技能:Dsp,Word,C/C++,Wince,Excel,Android,操作系统,办公软件 语言:普通话二级甲等证书

Android之蓝牙驱动开发总结

Android之蓝牙驱动开 发总结

二Android Bluetooth架构 (1) 2.1 Bluetooth架构图 (1) 2.2 Bluetooth代码层次结构 (3) 三Bluetooth协议栈分析 (4) 3.1 蓝牙协议栈 (4) 3.2 Android与蓝牙协议栈的关系 (5) 四Bluetooth之HCI层分析 (5) 4.1 HCI层与基带的通信方式 (6) 4.2 包的分析及研究 (7) 4.3 通信过程的研究与分析 (8) 五Bluetooth之编程实现 (8) 5.1 HCI层编程 (8) 5.2 L2CAP层编程 (10) 5.3 SDP层编程 (12) 六Bluetooth之启动过程实现 (13) 6.1 Bluetooth启动步骤 (14) 6.2 Bluetooth启动流程 (14) 6.3 Bluetooth数据流向 (14) 6.4 Bluez控制流程 (14) 6.5 Bluetooth启动过程分析 (15) 七Bluetooth之驱动移植 (15) 7.1 android系统配置 (15) 7.2 启动项修改 (16) 7.3 电源管理rfkill驱动 (16) 7.4 Rebuild Android image and reboot (16) 7.5 实现BT睡眠唤醒机制 (16) 7.6 系统集成 (17) 八Bluetooth之调试与编译 (17) 8.1 Bluetooth驱动调试 (17)

九Bluetooth之应用程序开发 (18) 9.1 Bluetooth的API开发 (18) 9.2 The Basics开发 (18) 9.3 Bluetooth Permissions开发 (19) 9.4 Setting Up Bluetooth服务 (19) 9.5 Finding Devices服务 (20) 9.6 Connecting Devices服务 (22) 9.7 Managing a Connection服务 (26) 9.8 Working with Profiles服务 (28) 十总结与疑问 (29)

Android底层驱动开发

Android 开发之---- 底层驱动开发(一) 说到android 驱动是离不开Linux驱动的。Android内核采用的是Linux2.6内核(最近Linux 3.3已经包含了一些Android代码)。但Android并没有完全照搬Linux系统内核,除了对Linux进行部分修正,还增加了不少内容。android 驱动主要分两种类型:Android专用驱动和Android使用的设备驱动(linux)。Android 专有驱动程序: 1)Android Ashmem 匿名共享内存;为用户空间程序提供分配内存的机制,为进程间提供大块共享内存,同时为内核提供回收和管理这个内存。 2)Android Logger 轻量级的LOG(日志)驱动; 3)Android Binder 基于OpenBinder框架的一个驱动; 4)Android Power Management 电源管理模块; 5)Low Memory Killer 低内存管理器; 6)Android PMEM 物理内存驱动; 7)USB Gadget USB 驱动(基于gaeget 框架); 8)Ram Console 用于调试写入日志信息的设备; 9)Time Device 定时控制设备; 10)Android Alarm 硬件时钟; Android 上的设备驱动(linux): 1)Framebuff 显示驱动; 2)Event 输入设备驱动; 3)ALSA 音频驱动; 4)OSS 音频驱动; 5)v412摄像头:视频驱动; 6)MTD 驱动; 7)蓝牙驱动; 8)WLAN 设备驱动; Android 专有驱动程序 1.Android Ashmem 为用户空间程序提供分配内存的机制,为进程间提供大块共享内存,同时为内核提供回收和管理这个内存。 设备节点:/dev/ashmen .主设备号10. 源码位置:include/linux/ashmen.h Kernel /mm/ashmen.c 相比于malloc和anonymous/named mmap等传统的内存分配机制,其优势是通过内核驱动提供了辅助内核的内存回收算法机制(pin/unoin)

Android驱动开发示例及系统编译

Android驱动开发示例及系统编译 1基础部分 在Ubuntu上下载、编译和安装Android最新源代码 看完了前面说的几本书之后,对Linux Kernel和Android有一定的认识了,是不是心里蠢蠢欲动,想小试牛刀自己编译一把Android源代码了呢?一直习惯使用Windows系统,而Android源代码是不支持在Windows上编译上,于是决定使用虚拟机安装Ubuntu,然后下载、编译和安装Android源代码。 一. 环境准备 1. 磁盘空间预留20G左右,存3G,因为一边要跑主机,一边要跑虚拟机,存要求还是比较高的,这样才会比较流畅。 2. 安装VMWare 7.1.4。我的操作系统是Win7,VMWare的版本要新一点的,旧版本的VMWare在网络支持上比较差,由于要在虚拟机上下载Android源代码,没有网络是万万不行的。 3. 安装好VMWare后,接下来就安装Ubuntu系统了。我选择目前最新的版本ubuntu-11.04-alternate-i386,从网上查到的资料说,要编译Android源代码,Ubuntu 的最低版本是8.04。下载好后,安装时采用一直默认安装即可。 4. 安装Git工具。Android源代码采用Git工具来管理,与SVN相比,这是一种分布式的源代码管理工具,而SVN是集中式的源代码管理工具。要安装Git工具,在Ubuntu上执行以下命令即可: USER-NAMEMACHINE-NAME:~$ sudo apt-get install git-core gnupg 5. 安装Java SDK。在Ubuntu上执行以下命令: USER-NAMEMACHINE-NAME:~$ sudo add-apt-repository ppa:ferramroberto/java USER-NAMEMACHINE-NAME:~$ sudo apt-get update USER-NAMEMACHINE-NAME:~$ sudo apt-get install sun-java6-jre sun-java6-plugin USER-NAMEMACHINE-NAME:~$ sudo apt-get install sun-java6-jdk 6. 依赖的其它包。在Ubuntu上执行以下命令: USER-NAMEMACHINE-NAME:~$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl

android wifi驱动开发日记(一)

学习android wifi开发已经一周了,今天开始立帖,将每天的学习成果贴出来,以备以后查阅,从framework 到wpa_supplicant的适配层(wifi.c)网上介绍的帖子很多,而且本身也并不复杂,其中framework部分需要注意的是wifiService和wifiMoniter两部分,这两快一个是转发AP的CMD另一个是接收来自 wpa_supplicant的CMD。他们与本地库的连接都是通过JNI方法,具体实现方法在 android_net_wifi_Wifi.cpp中。在这个文件中可以大致看出AP会给wpa_supplicant下哪些命令。这些命令通过wifi.c的wifi_command发送给wpa_supplicant,在发送命令的过程中实际是调用wpa_ctrl_request 来完成命令发送的,wpa_ctrl_request是通过socket的方式与wpa_supplicant进行通信的,然后通过wpa_ctrl_recv来接收来自wpa_supplicant的命令,并返回标识给wifi_wait_for_event。 但是命令发到wpa_supplicant后的流程网上提到的资料就非常少了,不过由于wpa_supplicant是一个标准的开源项目,已经被移植到很多平台上,它中间的过程我暂时还没有去细看。比较关心的是 wpa_supplicant在接收到上层的命令后是怎么将命令发给DRIVER的,DRIVER在接收到命令后的解析的动作以及之后调用驱动功能函数的流程以及驱动对寄存器控制的细节。由于需要注意代码保密,之后不会提及具体使用了哪块WIFI芯片也不会提及此WIFI DRIVER是在什么平台什么产品。 先贴一张wpa_supplicant的标准结构框图:

相关主题