android内核编译方法

android内核编译方法
android内核编译方法

android内核编译方法(转)

2008-07-10 16:14

google的android很多人都希望在gphone没有出来之前,把它移植到相关的硬件平台上去。网上看了不少文章,总的感觉是:在这一步走得最远的就是openmoko的一个大师级别的黑客Ben “Benno” Leslie,他曾经试图把目前google发布的android 移植到openmoko的平台上去,并且做了10000多行代码的尝试。最终虽然由于open moko采用比较老的arm 920t的内核,而android采用较新的arm926-ej-s内核,而且使用了新的内核的一些新特性,导致移植失败,但是anyway,他已经做了足够多的前期工作了,尔后的宣布成功移植android到real target板子上的人,大多是在他提供的patch的基础上继续走下去做出来的。

下面是一些有用的参考,希望有助于对此感兴趣的开发人员:

(1)Ben “Benno” Leslie的关于andorid移植到openmoko的个人博客地址:

http://benno.id.au/blog/

(2)早期宣布成功移植android到zauraus-sl-c760的详细方法描述的链接:

https://www.360docs.net/doc/605498191.html,/blog/2007/12/06/google-android-runs-on-sharp-zaurus-sl-c760/ (3)后续的根据上述先行者们的工作,成功移植android到zauraus-c3000的方法:https://www.360docs.net/doc/605498191.html,/article/74237419.html

(4)本文是参考下面的wiki,接合个人的实践写出来的,对原文的作者表示一下感谢:

https://www.360docs.net/doc/605498191.html,/Compilation_of_Android_kernel

很羡慕这些人阿!

不过很可惜,偶的开发板是s3c2410的,恰好是arm920t的核心的。。。估计移植上去戏不是很大,需要重写很多代码,毕竟偶跟benno相差得太远太远了,同样是开发人员,差距咋就那么大呢?!

(毕竟google仅仅开放了kernel的源代码而已,他们需要开放的东西还很多。)

在这里把关于android内核编译方法简单写一下,或许对希望移植内核的朋友能有些帮助:

(看了Benno的移植过程以后,觉得即使你能够编译google开放出来的内核,意义也不是特别大,因为这个内核中加入了为了支持qemu的很多东西,而这些代码似乎对希望移植到真机上的朋友来说,没有任何意义,反而是一种阻碍)。

1)从CodeSourcery上面载用于交叉编译的工具链:

https://www.360docs.net/doc/605498191.html,/gnu_toolchains/arm/download.html

我在这里选择的是->ARM GNU/Linux,以及IA32-GNU/Linux。有文章说应该选择ARM EABI,我不知道了,没有测试过,反正我选择的这个编译的内核也是可以跑

起来的:P

2)下载google的android linux的内核源代码:

https://www.360docs.net/doc/605498191.html,/p/android/downloads/list

主要是这个文件:linux-2.6.23-android-m3-rc20.tar.gz

3)把下载到的内核和交叉编译工具解压缩,并最好把工具链的路径放到PATH里面去

解压缩内核:

$ mkdir -p android

$ cd android

$ tar xzvf ../linux-2.6.23-android-m3-rc20.tar.gz

会解压出来一个叫做kernel的目录,google的android的linux内核就在里面了。

解压缩交叉编译工具链:

$ cd /usr/local/

$ sudo cp ~/arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-

gnu.tar.bz2 .

$ sudo tar zxvf arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

此时会解压出来一个叫做arm2007q3的一个目录,这里面就是工具链了。

设置一下环境变量:

$ export PATH=$PATH:/usr/local/arm2007q3/bin

好了,到此,基本的内核编译环境就搞好了。

4)现在是要得到android的内核编译参数的配置文件的时候了,该文件需要从已经安装好的android的模拟器

中得到才行。所以安装android的sdk也是必须的,这一步不太明白的朋友可以参考我以前发的android

命令行体验的文章。

首先启动android模拟器,然后通过adb得到模拟器中提供的内核配置文件:

$emulator &

$adb pull /proc/config.gz .

这时候adb工具会连接模拟器,并从它里面下载一个叫做config.gz的文件到你的当前目录下。

把它拷贝到你的kernel目录:

$cd ~/android/kernel

$cp ~/config.gz .

解压缩该文件,并重命名为.config,这一步做了就可以跳过make menuconfig之类的内核参数设置

动作了。

$gunzip config.gz

$mv config .config

5)修改kernel目录中的Makefile文件,用emacs或vi打开该Makefile

修改CROSS_COMPILE变量为:

CROSS_COMPILE=arm-none-linux-gnueabi-

这个就是刚刚的下载和解压的工具链的前缀了,旨在告诉make,在编译的时候要使用我们的工具

链。

在Makefile中注释掉LDFLAGS_BUILD_ID这个变量:

例如将如下定义:

LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\

$(call ld-option, -Wl$(comma)--build-id,))

修改为:

LDFLAGS_BUILD_ID=

#LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\

# $(call ld-option, -Wl$(comma)--build-id,))

把它注释掉的原因是目前android的内核还不支持这个选项。--build-id选项,主要是用于在生成的elf

可执行文件中加入一个内置的id,这样在core dump,或者debuginfo的时候就可以很快定位这个模块是

哪次build的时候弄出来的。这样就可以避免,每次都把整个文件做一遍效验,然后才能得到该文件的是由

哪次build产生的。对于内核开发者来说,这是很不错的想法,可以节约定位模块版本和其影响的时间。

目前,该功能还出于early stage的状态,未来的android或许会支持,但至少目前的版本是不支持的。

所以,用#注释掉即可,或者害怕不保险的话,就加入LDFLAGS_BUILD_ID=空,这样即使编译的时候用了,

也只是一个空格而已。

对这个--build-id选项感兴趣的朋友,可以访问下面的网址,它的作者已经解释得非常明白了:

https://www.360docs.net/doc/605498191.html,/wiki/Releases/FeatureBuildId

6)终于可以开始make了。

$ make

不出意外的话,应该整个过程都会非常顺利,最终会在~/android/kernel/arch/arm/boot 目录下面

生成一个zImage,这个就是我们要的内核映像了。

7)激动人心的时刻终于到来了,我们可以测试一下刚刚编译出来的内核可以不可以用了。

$emulator -kernel ~/android/kernel/arch/arm/boot/zImage

当看到red eye在晃来晃去,最终显示出来android的界面的时候,一颗悬着的心总算放下了。

android的proc里面的version如下:

# cat version

Linux version 2.6.23 (wayne@wayne) (gcc version 4.2.1 (CodeSourcery Sourcery G++ Lite 2007q3-51)) #1 Sat Jan 19 18:11:44 HKT 2008

从这里就可以看出,这是自己编译的kernel,而不是人家sdk里面自带的kernel-qemu了。

android自带的sdk里面的kernel映像的version应该是:

# cat version

Linux version 2.6.23-gcc3bc3b4 (arve@https://www.360docs.net/doc/605498191.html,) (gcc version 4.2.1) #3 Tue Oct 30 16:28:18 PDT 2007

hoho, 这里不会把这个开发者的email暴露出来了吧。。。

android的cpuinfo如下:

Processor : ARM926EJ-S rev 5 (v5l)

BogoMIPS : 313.75

Features : swp half thumb fastmult vfp edsp java CPU implementer : 0x41

CPU architecture: 5TEJ

CPU variant : 0x0

CPU part : 0x926

CPU revision : 5

Cache type : write-through

Cache clean : not required

Cache lockdown : not supported

Cache format : Harvard

I size : 4096

I assoc : 4

I line length : 32

I sets : 32

D size : 65536

D assoc : 4

D line length : 32

D sets : 512

Hardware : Goldfish

Revision : 0000

Serial : 0000000000000000

Android usb流程分析

Android usb流程分析 文档以UMS(usb mass storage)为例来分析流程,主要按照图中红线来分析(即从插入USB 开始到状态栏弹框,然后又从选择UMS功能开始往下的流程)。以前没有看过USB相关代码,网上也很少有分析usb FRAMEWORK相关的东西,文档中可能存在错误,如果发现欢迎指正。 总体框图 1.Kernel USB 流程 LINUX KERNEL GADGET 架构 Linux USB Gadget分三层架构,层次关系从上到下 一层:USB Gadget功能层。BSP/Driver开发者通常是要实现这一层,从而实现一个具体的设备驱动,如Anddroid在此层实现了adb,mtp,mass_storage等。浏览参考关注此层代码时,会发现“composite”是此层的关键字,此层中关键的数据结构是:struct usb_composite_driver。这一层的驱动文件一般为:driver/usb/gadget/android.c(android实现的)或driver/usb/gadget/serial.c(传统Linux实现的USB转串口)。 二层:USB设备层(usb core)。这一层是Linux内核开发维护者实现的,与我们没太大关系,不用我们操心,我们只关心其的一些接口就行。浏览参考关注此层时,会发现“gadget”是此层的关键字,此层的关键数据结构是:usb_gadget_driver,usb_composite_dev。这层主要的一个驱动文件为:driver/usb/gadget/composite.c 三层:USB设备控制器驱动层。这一层主要是与CPU、CPU USB控制器有关,与硬件

基于安卓操作系统的应用软件开发分析.docx

基于安卓操作系统的应用软件开发分析 众所周知,信息技术在其自身的发展过程中,电子产品的丰富性与多样性充分地展现出来,并且使得人们生活方式有所改变,一定程度上为人们日常生产与生活带来了便利。正是因为安卓操作系统自身独特的开放性特征,使其同电子设备实现了有效地沟通,并且始终能够满足用户不同需求。现阶段,安卓手机已经被广泛使用,并且已经普及,在此背景下,使人们开始重视其便携性问题,希望能够时刻进行操作,所以,在安卓操作系统的基础上,应该积极开发出相应的应用软件,这是省前安卓操作系统工作领域中亟待解决的问题。 1.安卓操作系统开发平台在安卓操作系统平台中,其主要的构成部分就是应用软件、中间件以及用户界面和操作系统,给予平台各层分离有力的支撑与保障,使得各层中间都能够保证分工的明确性m。通常情况下,安卓操作系统中的应用程序框架可以有效地提供API,同时还能够合理地设计出其自身特有的功能模块,这样一来,还可以实现为其他应用程序提供有价值的使用依据。在安卓操作系统当中,其最核心的应用程序就是联系人、网络浏览器、日历、SMS应用程序以及电子邮件等等。在编写并设计应用程序的过程中,开发工作人员需要对Java语言进行充分地利用,这样才能够确保系统程序和开发程序所包含的资源实现共享。在此基础上,安卓操作系统还能够向组件提供相应的C/C++库集合,然而,开发工作人员不能够对其进行直接调用’一定要根据上层的应用程序框来实现C/C++库的应用p1。通常情况下,安卓操作系统库的构成内容是媒体库、FreeType、界面管理和SQLite等多种系统。 2.基于安卓操作系统应用软件开发的重要意义随着科技发展与人们生活水平的提升,始终对个人电脑与智能手机在社会经济当中的发展情况产生影响。现阶段,我国智能手机市场始终处于爆炸式增长的趋势,而截至到2013年,智能手机的普及率也迅速上升,将近2/3的国民都已经拥有智能手机pi。然而,国民拥有智能手机的技术水平也处于上升的阶段,其中,智能手机终端CPU处理能力以及存储和用户交互等方面的能力都出现了明显的提高,以上内容也同样是智能手机关键性的指标,所以,一定程度上对于安卓操作系统应用软件的开发工作提供了有力的硬件基础。基于安卓操作系统的应用软件开发能够保证使用者手中安卓智能操作系统同社会各行业经济发展过程中所使用的电子设备实现有效连接,进而能够为使用者提供更具特色与专业化的服务。若安卓智能操作系统应用软件能够得到广泛地应用,必然会为人们的生产与生活带来便利与实用价值,进而更方便人们的工作与生活。 3.安卓操作系统概述 3.1安卓发展史安卓股份有限公司位于美国加州,公司成立于2003年,并在2005年被谷歌所收购。谷歌公司的主要目标就是要创建标准化与开放化的安卓系统移动客户端平台141。同其他智能手机的操作系统相比,安卓操作系统的开放性更加明显,并且能够在其实际运行的过程中始终处于开放状态,同时还能够同其他电子设备实现数据链接,在此基础上,更好地实现高级操作。安卓系统是智能手机当中的一种智能操作系统,所以,其更新的速度相对较快,当前最新版本已经是Android6.0.1(M)操作系统。 3.2安卓开发平台结构与特征(1)应用程序层。智能手机操作系统中的安卓系统,其自身就能够为智能手机的运行提供相应的应用软件,而且,其基本的应用软件都是操作系统本身所配置的,主要的表现形式就是系统应用151。然而,在智能手机实际运行的过程当中,这些应用软件同其他的应用软件共同享受同等资源的支配权利。(2)应用程序框架。在智能手机操作系统当中的安卓操作系统,本身明显的特征就是能够支持使

Android本质上就是一个基于Linux内核的操作系统

Android本质上就是一个基于Linux内核的操作系统。与Ubuntu Linux、Fedora Linux 类似。只是Android在应用层专门为移动设备添加了一些特有的支持。既然Android是Linux内核的系统,那么基本的启动过程也应符合Linux的规则。如果研究过其他Linux 系统应该了解,一个完整的Linux系统首先会将一个Linux内核装载到内存,也就是编译Linux内核源代码生成的bzImage文件,对于为Android优化的Linux内核源代码会生成zImage文件。该文件就是Linux内核的二进制版本。由于zImage在内核空间运行,而我们平常使用的软件都是在应用空间运行(关于内核空间和应用空间的详细描述,可以参考《Android深度探索(卷1):HAL与驱动开发》一书的内容,在后续的各卷中将会对Android的整体体系进行全方位的剖析)。内核空间和应用空间是不能直接通过内存地址级别访问的,所以就需要建立某种通讯机制。 目前Linux有很多通讯机制可以在用户空间和内核空间之间交互,例如设备驱动文件(位于/dev目录中)、内存文件(/proc、/sys目录等)。了解Linux的同学都应该知道Linux的重要特征之一就是一切都是以文件的形式存在的,例如,一个设备通常与一个或多个设备文件对应。这些与内核空间交互的文件都在用户空间,所以在Linux内核装载完,需要首先建立这些文件所在的目录。而完成这些工作的程序就是本文要介绍的init。Init是一个命令行程序。其主要工作之一就是建立这些与内核空间交互的文件所在的目录。当Linux内核加载完后,要做的第一件事就是调用init程序,也就是说,init是用户空间执行的第一个程序。 在分析init的核心代码之前,还需要初步了解init除了建立一些目录外,还做了如下的工作 1. 初始化属性 2. 处理配置文件的命令(主要是init.rc文件),包括处理各种Action。 3. 性能分析(使用bootchart工具)。 4. 无限循环执行command(启动其他的进程)。 尽管init完成的工作不算很多,不过代码还是非常复杂的。Init程序并不是由一个源代码文件组成的,而是由一组源代码文件的目标文件链接而成的。这些文件位于如下的目录。 /system/core/init 其中init.c是init的主文件,现在打开该文件,看看其中的内容。由于init是命令行程序,所以分析init.c首先应从main函数开始,现在好到main函数,代码如下: int main(int argc, char **argv) { int fd_count = 0; struct pollfd ufds[4]; char *tmpdev; char* debuggable; char tmp[32]; int property_set_fd_init = 0; int signal_fd_init = 0;

android休眠与唤醒驱动流程分析

android休眠与唤醒驱动流程分析 标准linux休眠过程: ●power management notifiers are executed with PM_SUSPEND_PREPARE ●tasks are frozen ●target system sleep state is announced to the platform-handling code ●devices are suspended ●platform-specific global suspend preparation methods are executed ●non-boot CPUs are taken off-line ●interrupts are disabled on the remaining (main) CPU ●late suspend of devices is carried out (一般有一些BUS driver的动作进行)? ●platform-specific global methods are invoked to put the system to sleep 标准linux唤醒过程: ●t he main CPU is switched to the appropriate mode, if necessary ●early resume of devices is carried out (一般有一些BUS driver的动作进行)? ●interrupts are enabled on the main CPU ●non-boot CPUs are enabled ●platform-specific global resume preparation methods are invoked ●devices are woken up ●tasks are thawed ●power management notifiers are executed with PM_POST_SUSPEND 用户可以通过sys文件系统控制系统进入休眠: 查看系统支持的休眠方式: #cat /sys/power/state 常见有standby(suspend to RAM)、mem(suspend to RAM)和disk(suspend to disk),只是standby耗电更多,返回到正常工作状态的时间更短。 通过#echo mem > /sys/power/state 让系统进入休眠。 Android休眠与唤醒 android是在传统的linux内核电源管理设计的基础上,结合手机设计的实际需求而进化出的一套电源管理系统,其核心内容有:wakelock 、early_suspend与late_resume。 wakelock在Android的电源管理系统中扮演一个核心的角色。wakelock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得。这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了,内核就会启动休眠的那套机制来进入休眠。 当系统在启动完毕后,会自己去加一把名为“main“的锁,而当系统有意愿去睡眠时则会先去释放这把“main”锁,在android中,在early_suspend的最后一步会去释放“main”锁(wake_unlock: main)。释放完后则会去检查是否还有其他存在的锁,如果没有则直接进入睡眠过程。 它的缺点是,如果有某一应用获锁而不释放或者因一直在执行某种操作而没时间来释放的话,则会导致系统一直进入不了睡眠状态,功耗过大。 early_suspend:先与linux内核的睡眠过程被调用。一般在手机系统的设计中对背光的操

Android系统的开机画面显示过程分析

Android系统的开机画面显示过程分析 分类:Android2012-07-0900:561252人阅读评论(39)收藏举报 好几个月都没有更新过博客了,从今天开始,老罗将尝试对Android系统的UI实现作一个系统的分析,也算是落实之前所作出的承诺。提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的画面了。Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段。本文将详细分析这三个开机画面的显示过程,以便可以开启我们对Android系统UI实现的分析之路。 第一个开机画面是在内核启动的过程中出现的,它是一个静态的画面。第二个开机画面是在init进程启动的过程中出现的,它也是一个静态的画面。第三个开机画面是在系统服务启动的过程中出现的,它是一个动态的画面。无论是哪一个画面,它们都是在一个称为帧缓冲区(frame buffer,简称fb)的硬件设备上进行渲染的。接下来,我们就分别分析这三个画面是如何在fb上显示的。 1.第一个开机画面的显示过程 Android系统的第一个开机画面其实是Linux内核的启动画面。在默认情况下,这个画面是不会出现的,除非我们在编译内核的时候,启用以下两个编译选项: CONFIG_FRAMEBUFFER_CONSOLE CONFIG_LOGO 第一个编译选项表示内核支持帧缓冲区控制台,它对应的配置菜单项为:Device Drivers--->Graphics support--->Console display driver support--->Framebuffer Console support。第二个编译选项表示内核在启动的过程中,需要显示LOGO,它对应的配置菜单项为:Device Drivers--->Graphics support--->Bootup logo。配置Android 内核编译选项可以参考在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)一文。 帧缓冲区硬件设备在内核中有一个对应的驱动程序模块fbmem,它实现在文件kernel/goldfish/drivers/video/fbmem.c中,它的初始化函数如下所示: 1/**

用Eclipse开发Android应用程序分析

在 Eclipse 环境中进行 Android 应用程序开发 开始之前 本教程介绍如何在 Eclipse 环境中进行 Android 应用程序开发,包括两个示例应用程序。第一个示例是一个基本的应用程序,涉及构建和调试的所有阶段。第二个应用程序示例涉及比较复杂的 Android 特性,包括联系人搜索和 Google Maps 地址查找。要想从本教程获得最大收益,具备移动开发经验会有帮助,但不是必需的。开发 Android 应用程序需要Java? 编程技能,但是对于本教程不是必需的。 关于本教程 我们为什么要关注 Android?有两个原因使 Android 成为重要的平台。首先,Google 引入了 Android,它在很短时间内就获得了市场的关注。Google 正在进军移动市场。它在这个市场上采取的第一个行动就是发布 Android 和 Open Handset Alliance,这是一个令人印象深刻的起点。第二,Android 不仅仅是另一种包含电话、菜单和触摸屏功能的移动平台。您将在本教程中了解到,Android 提供了一种不同的应用程序开发方法。由于可以对请求的操作和代码进行运行时绑定,Android 的体系结构支持高度可定制的软件环境。无论是考虑市场因素还是 Android 的技术方面,它都是一个值得研究的平台。 本教程分为以下几节: ?Android 基础知识和必需的工具 ?Android Software Developer Kit ?构建和调试 SaySomething Android 应用程序 ?创建内容提供器和 Google Maps 应用程序 系统需求 本教程需要结合使用几种技术。 Eclipse 平台Eclipse 是一个运行插件的平台。您应该安装 Eclipse Classic 的最新版本(本教程使用 V3.3.1)。Android Developer Tools按照安装 Android SDK中的说明安装 Android Developer Tools(Eclipse 插件)。 源代码本教程中的源代码片段包括: ?AndroidManifest.xml(片段)—这个文件是 Android 应用程序的应用程序部署描述符。 ?IntentReceiver —演示 IntentReceiver 的实现,这个类处理 AndroidManifest.xml 文件中 IntentFilter 标记所公布的 intent。 ?SaySomething.java —实现一个 Android 活动,这是本教程的示例应用程序的主要入口点。 ?Main.xml —这个文件包含 Android 活动所用的视觉元素或资源。 ?R.java —这个文件是由 Android Developer Tools 自动生成的,它把视觉资源“连接” 到 Java 源代码。 ?AndroidManifest.xml(完整)—这是完整的 AndroidManfest.xml 文件,包含每个重要元素的描述。

Android 图形系统分析-surfaceFlinger流程

第一章Android GDI之基本原理及其总体 框架 Android GDI基本框架 在Android中所涉及的概念和代码最多,最繁杂的就是GDI相关的代码了。但是本质从抽象上来讲,这么多的代码和框架就干了一件事情:对显示缓冲区的操作和管理。 GDI主要管理图形图像的输出,从整体方向上来看,GDI可以被认为是一个物理屏幕使用的管理器。因为在实际的产品中,我们需要在物理屏幕上输出不同的窗口,而每个窗口认为自己独占屏幕的使用,对所有窗口输出,应用程序不会关心物理屏幕是否被别的窗口占用,而只是关心自己在本窗口的输出,至于输出是否能在屏幕上看见,则需要GDI来管理。 从最上层到最底层的数据流的分析可以看到实际上GDI在上层为GUI提供一个抽象的概念,就好像操作系统中的文件系统所提供文件,目录等抽象概念一样,GDI输出抽象成了文本,画笔,位图操作等设备无关的操作,让应用程序员只需要面对逻辑的设备上下文进行输出操作,而不要涉及到具体输出设备,以及输出边界的管理。GDI负责将文本、线条、位图等概念对象映射到具体的物理设备,所以GDI的在大体方向上可以分为以下几大要素:画布 字体 文本输出 绘画对象 位图输出 Android的GDI系统 Android的GDI系统所涉及到概念太多,加之使用了OpenGL使得Android的层次和代

码很繁杂。但是我们对于Android的GDI系统需要了解的方面不是他的静态的代码关系,而是动态的对象关系,在逻辑运行的架构上理解GDI。我们首先还是需要从代码结构开始我们的理解。 Frameworks/Libs/Surfaceflinger Frameworks/base/core/jni/android_view_Surface.cpp Frameworks/base/core/java/android/view/surface.java Frameworks/base/Graphics:绘图接口 Frameworks/Libs/Ui External/Skia 其中External/Skia是一个C++的2D图形引擎库,Android的2D绘制系统都是建立在该基础之上.Skia完成了:文本输出,位图,点,线,图像解码等功能。在这里给出Android GDI 的基本框架示意图。 对于上面的GDI架构图我们只是一个大概的了解,我们有太多的问题需要解决,有太多的疑问需要得到答案,我就一直在想,为什么设计者有提出如此众多的概念,这个概念的背景是什么?他要管理什么,他要抽象什么?从前面知道,Android的整个设计理念就是无边界化,他是如何穿透Linux进程这个鸿沟来达到无边界的?Surface,Canvas,Layer,LayerBase, NativeBuffer,SurfaceFlinger,SurfaceFlingerClient这些到底是一个什么东西?如

嵌入式Linux系统开发很完整的习题答案解析

参考答案 第一章 一、填空题。 1、嵌入式系统主要融合了计算机软硬件技术、通信技术和微电子技术,它是将计算机直接嵌入到应用系统中,利用计算机的高速处理能力以实现某些特定的功能。 2、目前国内对嵌入式系统普遍认同的定义是:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 3、嵌入式系统一般由嵌入式计算机和执行部件组成,其中嵌入式计算机主要由四个部分组成,它们分别是:硬件层、中间层、系统软件层以及应用软件层。 4、嵌入式处理器目前主要有ARM、MIPS、Power PC、68K等,其中arm处理器有三大特点:体积小、低功耗、的成本和高性能,16/32位双指令集,全球合作伙伴众多。 5、常见的嵌入式操作系统有:Linux、Vxworks、WinCE、Palm、uc/OS-II和eCOS。 6、嵌入式系统开发的一般流程主要包括系统需求分析、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最后得到最终产品。 二、选择题 1、嵌入式系统中硬件层主要包含了嵌入式系统重要的硬件设备:、存储器(SDRAM、ROM等)、设备I/O接口等。(A) A、嵌入式处理器 B、嵌入式控制器 C、单片机 D、集成芯片 2、20世纪90年代以后,随着系统应用对实时性要求的提高,系统软件规模不断上升,实时核逐渐发展为,并作为一种软件平台逐步成为目前国际嵌入式系统的主流。(D) A、分时多任务操作系统 B、多任务操作系统 C、实时操作系统 D、实时多任务操作系统 3、由于其高可靠性,在美国的火星表面登陆的火星探测器上也使用的嵌入式操作系统是。(B) A、Palm B、VxWorks C、Linux D、WinCE [在此处键入]

实例解析Android HAL的开发方法_华清远见

实例解析Android HAL的开发方法 本篇文章为大家带来的是,通过分析台湾的Jollen的mokoid 工程代码,和在s5pc100平台上实现过程种遇到的问题,解析Andorid HAL的开发方法。我相信,看完本篇文章,对你的学习非常有帮助。因为本篇文章来自华清远见,最具权威! 一、我们需要做个HAL介绍,现有HAL架构由Patrick Brady (Google) 在2008 Google I/O演讲中提出的,如下图。 Android的HAL是为了保护一些硬件提供商的知识产权而提出的,是为了避开linux的GPL束缚。思路是把控制硬件的动作都放到了Android HAL中,而linux driver仅仅完成一些简单的数据交互作用,甚至把硬件寄存器空间直接映射到user space。而Android是基于Aparch的license,因此硬件厂商可以只提供二进制代码,所以说Android只是一个开放的平台,并不是一个开源的平台。也许也正是因为Android 不遵从GPL,所以Greg Kroah-Hartman才在2.6.33内核将Andorid驱动从linux中删除。GPL和硬件厂商目前还是有着无法弥合的裂痕。Android想要把这个问题处理好也是不容易的。 二、总结下来,Android HAL存在的原因主要有: 1. 并不是所有的硬件设备都有标准的linux kernel的接口 2. KERNEL DRIVER涉及到GPL的版权。某些设备制造商并不原因公开硬件驱动,所以才去用HAL方式绕过GPL。

3. 针对某些硬件,An有一些特殊的需求。 三、HAL内容 1、HAL 主要的储存于以下目录: (注意:HAL在其它目录下也可以正常编译) ● libhardware_legacy/ - 旧的架构、采取链接库模块的观念进行 ● libhardware/ - 新架构、调整为 HAL stub 的观念 ● ril/ - Radio Interface Layer ● msm7k QUAL平台相关 主要包含以下一些模块:Gps、Vibrator、Wifi、Copybit、Audio、Camera、Lights、Ril、Overlay 等。 2、两种 HAL 架构比较 目前存在两种HAL架构,位于libhardware_legacy目录下的“旧HAL架构”和位于libhardware目录下的“新HAL架构”。两种框架如下图所示。

MTK平台下的sensor框架分析

关于Android平台下的sensor介绍 随着移动互联网技术的普及,人们对智能手机的需要也越来越多。而在众多 智能手机操作系统之中,Android 系统凭借着Google 的技术支持及其开源特性在短时间内迅速占领大量的市场。传感器系统可以让智能手机的功能更加丰富多 彩,所以传感器设备已经成为智能手机必备的组件之一。Android 系统可以支持 多种传感器,有的传感器已经在Android 的框架中使用,大多数传感器由应用程 序使用。 本文基于MTK6582 的平台上Android 系统的传感器模块进行移植和 开发,对Android 系统框架和开发环境进行了简介,对Android 系统的传感器模块的驱动层和硬件抽象层的开发进行深入的分析与研究,概括并总结了传感器模 块的工作原理和工作流程,对传感器的数据采集、数据传输、设备休眠和设备控 制等方面进行了具体的设计与实现,最终在MTK6582 的平台上实现了传感器模 块的驱动层和硬件抽象层。 Android 系统可大致分为四部分,应用层、框架层、硬件抽象层、Linux 驱动层,Android 系统的传感器模块涉及到了Android 系统的各个层次。应用 层以Java 为编程语言,一般为第三方开发的应用程序,也有一些是Google 自 己提供的应用程序,框架层是Google 自己开发的,有着完整代码的体系,提 供完善的接口,以便第三方开发应用程序。硬件抽象层是能以封闭源码形式提 供硬件驱动模块,可以把框架层与驱动层隔开,使得Android 框架层的开发能 在完全不考虑驱动程序的前提下进行。驱动层会根据硬件的设计对传感器进行 初始化和寄存器的读写,使传感器正常工作。 Android 系统支持多种传感器,包括加速度传感器、磁力域传感器、方向传感 器、陀螺仪、光线传感器、压力传感器、温度传感器、接近传感器,一般手 机都支持加速度传感器、磁力域传感器、方向传感器、光线传感器、接近传感 器,也有一些比较高端的手机支持陀螺仪。

Android系统分析

Android操作系统分析 穆英华 基于Linux内核的Android操作系统尽管非常年轻,却已经占领了智能手机9%的市场,而且还在向其它移动平台及嵌入式领域迅速扩张着。下图为2010年一季度的智能手机操作系统占有率统计。在国内外制造商纷纷推出基于Android的产品、Android Market中的应用程序飞速增长的背景下,有必要对Android操作系统的情况进行调研,对比其与Midinux的优劣势、估计其机遇或威胁。本文将从以下几个方面分析Android:目标用户群、支持硬件架构、平台技术架构、应用程序数量、未来发展方向。 一.目标用户群 覆盖高、中、低端智能手机用户是Android的主要目标,尤其是市场上基于ARM11处理器的智能手机已经降到1000元人民币的价格,让低成本的硬件配置也可以运行Android系统,更使得Android从中高端扩展到低端成为可能。除智能手机外,Android已经渗透到了平板电脑、上网本,乃至汽车电子、机顶盒、电子相册、无绳电话等各移动平台和嵌入式产品领域。 对于Android的智能手机和平板电脑用户,Android Market中种类丰富和数量众多的应用程序是其选择Android的重要原因,没有众多可选择的第三方应用程序,操作系统就是再性能优异,也不会对用户有任何杀伤力。这一点类似于苹果的iOS,但总体来说,Android 的用户不会像苹果用户那样忠诚、他们中的很大一部分也不会像苹果用户那样为数码产品花费那么多金钱,可以说Android更大众一些。 二. 支持硬件架构 1.支持的硬件架构 目前Android已经移植到了ARM、X86、M IP S各体系架构中的很多处理器核、处理器芯片、以及更多的板级结构上,对PPC等体系架构的移植也早已开始。如高通、三星等芯片制造商推出的基于ARM C ortex-A8处理器核及P o w er V R显示核心的处理器芯片早已移植Android成功,并被联想的Le Ph one、魅族的M9等许多手机采用,多核的C ortex-A9也蓄势待发。随着

Android Kernel Development Part 1

本文主要讲解开发Android平台下的LKM(Linux Kernel Module)的步骤,以及如何使用Android Emulator调试LKM。 一、编译android内核 1.首先运行模拟器(emulator命令所在目录为androidsdk/tools/,可将其添加至系统环境变量PATH中) emulator -avd android4 注意:本人使用的是android4的版本,android2.x的版本也可使用 2.goldfish内核下载 git clone https://www.360docs.net/doc/605498191.html,/kernel/goldfish.git 3.从模拟器中将/proc/config.gz文件复制到goldfish(即kernel)目录 cd goldfish/ adb pull /proc/config.gz . 4.将config.zg解压 gunzip config.gz mv config .config 5.进行编译 make ARCH=arm CROSS_COMPILE=arm-eabi- -j4 注意:本人所用arm toolchain为NDKr5c版本,NDKr7所用的gcc 4.4.3版本编译后的模块在加载时会出问题,切莫使用。也可自己编译arm toolchain 6.通过emulator运行刚刚编译好的kernel emulator -kernel /Volumes/Software/Android/kernel/goldfish/arch/arm/boot/zImage -avd android4 7.通过"About phone",可以查看当前内核信息

3.《移动互联网安全技术解析》 自测练习(修正版)

《移动互联网安全技术解析》自测练习(修 正版) 一、单选题(共42题,每题1分,共42分) 1.keberos认证基于的密码技术[1.0] A.非对称密码技术 B.对称密码技术 C.数字认证技术 D.令牌环技术 标准答案:B 试题分析:P29 2.以下属于杂凑算法的是[1.0] A.笛卡尔算法 B.MD5算法 C.DES算法 D.AES算法 标准答案:B 试题分析:P26 3.以下关于云计算特点说法错误的是[1.0] A.易扩展性 B.高可靠性 C.低成本 D.无需进行大规模基础设施建设 标准答案:D 试题分析:P151 4.以下哪项不是IPSec协议簇中的安全协议[1.0] A.AH B.ESP C.SSL D.IKE 标准答案:C 试题分析:P34 5.移动互联网终端环境安全威胁不包括:________。[1.0] A.手机丢失或被盗 B.非法跟踪窃听 C.非法使用手机 D.终端位置的暴露 标准答案:B 试题分析:70 6.________是网络信息安全技术的内核和基石。[1.0] A.数字签名技术 B.密码技术 C.数字认证技术 D.数字签名技术 标准答案:B 试题分析:17 7.以下不属于android操作系统应用程序框架层主要部分的是________[1.0] A.view system B.windows manager C.surface manager D.location manager 标准答案:C 试题分析:p58 8.GSM移动通信系统主要组成部分不包括下列哪项[1.0] A.移动台 B.工作台 C.基站子系统 D.网络子系统 标准答案:B 试题分析:p87 9.____是基于C语言的接口集,能够提供iPhone应用的基本数据管理和服务功能。[1.0] A.核心基础框架 B.核心管理框架 C.核心数据框架 D.核心服务框架 标准答案:A 试题分析:65 10.在3G网络中,发送方要将传送的数据用完整性密钥IK经过____算法产生消息的认证码。[1.0] A.f3

相关主题
相关文档
最新文档