·ChinaUnix首页 ·论坛 ·博客 
Linux首页 | Linux新闻 | Linux论坛 | Linux文档 | Linux下载 | Linux博客 | Linux搜索 | 开源项目孵化平台
新手入门 | 安装启动 | 管理员指南 | 开发手册 | 桌面应用 | 程序开发 | 数据库 | 网络技术| CentOS | Fedora | MySQL | Apache | Ubuntu | Gentoo| OSCON08
  Linux时代 >> 新闻
 
对Android平台Linux部分的初步理解
来源: Linux论坛  日期: 2008.11.18 09:34 (共有条评论) 我要评论
 
 Android是基于Linux内核的,对于喜欢研究底层的朋友来说,自然不会放过搞明白Linux层面上一些东西的机会。当然,最终目的还是要搞清楚 Linux是如何和上层lib以及虚拟机结合的,但是这得等Google完全开源Android之后了。很多关于Linux运行的细节,都可以通过adb 的shell来看到。

  首先用emulator console来启动模拟器并进入shell界面,试一试,发现虽然很多命令不能用,比如find,但是ls之类的基本操作还是可以的。然后echo $PATH观察一下有哪些具体的可用应用程序,发现可用的都集中在/sbin,/system/sbin,/system/bin中。

  看看/sbin

  -rwxr-xr-x root root 228776 1970-01-01 00:00 recovery

  -rwxr-xr-x root root 102832 1970-01-01 00:00 adbd

  adbd不用说,应该是守护程序,用于和你外部的adb通信的,这点从后面对进程的查看也能推测出来。至于recovery,应该是某种修复程序,但是目前还不能确定其具体用法。而且这个目录下的程序,应该都是系统自身根据即时情况调用的,不会让用户亲自调用。

  再去/system目录下,发现没有sbin目录,有bin目录,底下有很多应用程序,除了toolbox提供的常用Linux命令行程序外,就是 Google自己的用于Android开发的程序。总的来说,Android自带的toolbox还是比较简陋的,如果你不喜欢这种操作起来束手束脚的感觉,没关系,通过adb push的配合,我们可以把busybox安装到Android平台上,这是后话,这里先不谈这个。

  继续,用ps看看进程:

  root 1 0 252 164 c0082240 0000ab0c S /init

  root 2 0 0 0 c0048eac 00000000 S kthreadd

  root 3 2 0 0 c003acf0 00000000 S ksoftirqd/0

  root 4 2 0 0 c0045e5c 00000000 S events/0

  root 5 2 0 0 c0045e5c 00000000 S khelper

  root 8 2 0 0 c0045e5c 00000000 S suspend/0

  root 33 2 0 0 c0045e5c 00000000 S kblockd/0

  root 36 2 0 0 c0045e5c 00000000 S cqueue/0

  root 38 2 0 0 c0150c44 00000000 S kseriod

  root 74 2 0 0 c005bed0 00000000 S pdflush

  root 75 2 0 0 c005bed0 00000000 S pdflush

  root 76 2 0 0 c005f880 00000000 S kswapd0

  root 77 2 0 0 c0045e5c 00000000 S aio/0

  root 199 2 0 0 c014e2f4 00000000 S mtdblockd

  root 215 2 0 0 c0045e5c 00000000 S kmmcd

  root 229 2 0 0 c0045e5c 00000000 S rpciod/0

  root 446 1 4416 216 ffffffff 0000ceb4 S /sbin/adbd

  root 447 1 2816 284 ffffffff afe08b9c S /system/bin/usbd

  root 448 1 636 212 c017c114 afe08e9c S /system/bin/debuggerd

  root 449 1 12576 580 ffffffff afe08b9c S /system/bin/rild

  root 450 1 56576 14776 c01dc388 afe083dc S zygote

  root 451 1 18528 2064 ffffffff afe0861c S /system/bin/runtime

  bluetooth 452 1 1200 756 c0082240 afe0947c S /system/bin/dbus-daemon

  root 461 450 107792 19320 ffffffff afe0861c S system_server

  app_4 502 450 74292 14436 ffffffff afe09604 S com.google.android.home

  phone 503 450 74832 15044 ffffffff afe09604 S com.google.android.phone

  app_0 531 450 74620 14400 ffffffff afe09604 S com.google.process.content

  app_5 608 450 73780 11760 ffffffff afe09604 S lk.test

  app_7 662 450 82012 13124 ffffffff afe09604 S com.google.android.lunarlander

  app_0 809 450 74204 15780 ffffffff afe09604 S com.google.android.maps

  app_6 828 450 76844 14600 ffffffff afe09604 S com.google.android.samples

  system 873 450 76464 13028 ffffffff afe09604 S com.google.android.development

  root 971 446 720 292 c00386a4 afe092ac S /system/bin/sh

  root 2736 971 928 308 00000000 afe083dc R ps

  同样,有各种线程,系统自己调用的程序,以及用户自己的程序进程,比如lk.test和 com.google.android.lunarlander是我在工程中运行的,com.google.android.maps,com.google.android.phone这种就是Android模拟器运行时你看见的那些程序。有意思的是,从进程中有/system/bin/usbd来看,似乎客户端的调试都是通过USB的,当然不是现在拉,现在你只是在用模拟器而已。恩,以后真正配套硬件出来了,USB调试器会很贵么?嘿嘿。

  最后看看文件系统,mount一下:

  rootfs / rootfs rw 0 0

  /dev/pts /dev/pts devpts rw 0 0

  /proc /proc proc rw 0 0

  /sys /sys sysfs rw 0 0

  /dev/block/mtdblock0 /system yaffs2 rw,nodev,noatime,nodiratime 0 0

  /dev/block/mtdblock1 /data yaffs2 rw,nodev,noatime,nodiratime 0 0

  没什么有新意的,和台式机比较一下,一个就是没有虚拟内存文件系统,根文件系统直接就是模拟器从SDK安装目录下的/tools/lib /images/ramdisk.img加载的。而系统所用的是yaffs2 文件系统,system和data分别都是64MB大,而且都用了将近一半了。具体系统的映像是SDK安装目录下的tools/lib/image /system.img。

  从上面的分析看,这个Linux还是比较正常的。还有一个有意思的话题,就是目前安装软件,或者说是Package的方式在developer group上受到不少人的谴责,主要是Google目前对Android的程序安装没有标准的Install程序,也没有一个仓库说明,现在一些小程序,可以通过分析Android的文件变化得到大致的安装方式,但是以后有什么大型工程的话,最好还是定一个比较标准的安装方式规则,不能老依赖 Eclipse来帮我们搞吧,呵呵。

  通过下面的步骤,可以大致分析出目前的安装模式

  安装软件前:

  1. emulator -wipe-data

  2. adb push busybox ./

  3. adb shell ./busybox tar -cf /tmp/data.tar /data

  4. adb pull /tmp/data.tar .

  5. mkdir original

  6. cd original

  7. tar -xf ../data.tar

  安装软件后:

  1. adb shell ./busybox tar -cf /tmp/data.tar /data

  2. adb pull /tmp/data.tar .

  3. mkdir after_install

  4. cd after_install

  5. tar -xf ../data.tar

  具体的区别,目前来看,就是/data/app和data/data下多了两个相关文件,同时在/data/system/packages.xml中增加了安装的程序信息。似乎菜单也是从这个文件中得到是否新安装程序,以及如何显示相关信息比如名称什么的。

来源:IT168
  发表评论 查看评论(共有条评论)
 
 


最新资讯更多>> 
· ESA拥抱开源,新SAR工具以GPL发布
· jspx来自埃及的java web快速开..
· PremiumSoft发布NavicatforMyS..
· 负载测试——网站的“体能”测试
· 评论:gOS3到CloudOS——英雄的..
· BSD发行版发布:FreeBSD 7.1
· Google和红帽的JBoss联手促进网..
· 红帽公司董事会主席Matthew Sz..
· 为什么游戏开发者应支持OS X和..
· Perl迁移至Git版本控制系统
论坛热点更多>> 
· Linux内核中的红黑树
· [求助]新手推荐使用什么版本..
· 微软Zunes播放器死机 源于开..
· 嵌入式操作系统的成功之道
· 请教Godbach版主(mmap用户态..
· [转]在计算机领域做研究的一..
· mysql导出的表格出现中文乱码
· grub>这个是什么意思?
· 在一个服务器上实现RAID 5,..
· 熟悉IP分流朋友进来看看
文档更新更多>> 
· DHCP请教如何分配IP地址
· opensuse11.1使用感想
· Linux 命令 一句话
· 如何在linux/solaris下配置&使用..
· linux的安装
· Chapter 11 CHAPTER 11 Data Types
· Chapter 10 CHAPTER 10 Interrupt
· [转]How to configure webcam in..
· 本地安装Backtrack3
· 安装solaris10全程抓图
 
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 友情链接 | 免费注册

Copyright © 2001-2008 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号