Android做了些什嗎?

來源:互聯網
上載者:User
Android主要有6部分

   Applications (java)
--------------------------------

    FrameWork (java)

=====================================
               |    Core Libraries
  external Lib |  --------------
               |    dalvik (jvm)
               |
-----------------------------------
               HAL
====================================
             Linux Kernel

第一部分 : Kernel

先把kernel的代碼拉下來

1 git clone git://android.git.kernel.org/kernel/common.git
  git clone git://android.git.kernel.org/kernel/common.git -o eclair
  git clone git://android.git.kernel.org/kernel/common.git -o v2.6.29
  怎麼kernel的版本總是2.6.27呢?我要的kernel版本是2.6.29,因為從2.6.29以後,kernel以及支援S3C6410了
(雖然支援S3C6410 ,但是大部分S3C6410的驅動沒有) 而在2.6.27中沒有 。
 solution : git branch -a
  git checkout v2.6.29/android-2.6.29
  如果修改了Makefile,則出現:
error: You have local changes to 'Makefile'; cannot switch branches.
 先把Makefile 重新checkout  
 git checkout Makefile
 然後 git checkout v2.6.29/android-2.6.29

2 make menuconfig ACRH=arm
  然後編譯
an
In file included from arch/arm/plat-s3c/include/plat/cpu-freq.h:14,
                 from arch/arm/mach-s3c6410/cpu.c:32:
include/linux/cpufreq.h:258:31: error: macro parameters must be comma-separated
make[1]: *** [arch/arm/mach-s3c6410/cpu.o] 錯誤 1

solution :
#define cpufreq_exit_idle(int cpu, unsigned long ticks) do {} while (0)
修改為:
#define cpufreq_exit_idle( cpu, ticks) do {} while (0)

3 Android對kernel 主要有哪些改動呢?
  1) 採用了Yaffs2
     在檔案系統 fs/yaffs2
  2) 增加了Alarm,Ashmem,Binder,Power Management,Logger, Kernel Debugger,Low Memory Killer
      其中Binder,Logger等在driver/staging/android下面
   alarm 在 driver/rtc/alarm.c
   Binder 為Application IPC所用,而  Power Managerment 為 android.os.PowerManager 所調用
 
  從linux官方網站下載了一個2.6.29版本,和android的2.6.29進行比較,發現不同之處還很多。
 所以,對於移植,最好還是在android的2.6.29的基礎上,把一些相關的驅動移植上去,而不是把android的東西移植到linux 2.6.29之上。

4  kernel 的 GPS driver 在哪裡 ?
  在android中,定義了gps.h,需要自己按照 gps.h去實現GPS driver

5 android為了支援emulator ,增加了goldfish
  在kernel的源碼目錄下:
  git checkout origin/android-goldfish-2.6.29
  cp ./arch/arm/configs/goldfish_defconfig  .config
 修改Makefile ,用arm-2008q3編譯器,然後make ARCH=arm 將產生zImage
 此image可以在emulator下跑

 
第二部分 HAL 
  HAL 在hardware 目錄下 ,它不是驅動,它其實是屬於user space ,而不屬於Kernel層。
  也就是用HAL把上層的應用,服務 和下層的系統分開,在Android的早期版本中,沒有這一層,1.0之後HAL層就比較明顯了。
  比如 背光的設定,我們可以實現一個lights.default.so動態庫,這個庫實現了介面 set_light ,而set_light會開啟Kernel的
device,然後進行操作(通過IO Control ,或者寫等)來調節背光。
 HAL中有一個 RIL (Radio Interface Layer),主要是為了電話功能
 
第三部分 external Libs
  這部分在external下面
1 它不是用glibc ,而用bionic
  bionic 更快 更小 ,但不完全支援POSIX標準,比如C++ exceptions,wide char
  這樣其他的toolchain不能用於編譯Android
 個人認為,其實系統的快慢和glibc沒有多大的關係,android的慢是因為平台的原因,而非glibc ,
 所以android把glibc換成bionic,非明智之舉,這樣需要開發自己的編譯器toolchain, bionic ,還不如把這個精力放在平台開發上
 難道是為了繞開 GPL?

2  採用opencore 而非mplayer
  支援hardware / software codec plug-ins

3 採用了sqlite 而非db4o
    這樣對於很多java人員,資料庫方面的操作要修改,除非把db4o移植到android上(db4o可以無縫的運行在Android平台)

第四部分  Dalvik虛擬機器
  這部分是android的核心。在目錄dalvik下,編譯後產生dalvikvm
 它和標準JVM的區別有
  1)dalvik基於寄存器,而JVM基於stack
    2) 效能上優與標準的JVM

它屬於J2SE的一個子集,但是沒有通過JAVA標準認證,支援Swing. 而J2ME的標準介面類就是lcdui包中的類,不支援swing.
 參見 : http://www.mcuol.com/Tech/122/29755.htm

第五部分 Framework 
  這部分在framework下面。包括
.  Activity manager
• Telephony manager
• Window Manager
• Power Manager
• Resource manager
• Notification Manager
 它提供一個給應用調用的介面。

第六部分 Applications
  這部分Google提供了很多應用,這部分在packages目錄下面。比如packages/apps下面就有很多應用。
這些應用也是用Java寫的,包括Google地圖,瀏覽器,Google商店等

除了以上的6部分外,android還提供了一套toolchain,在prebuilt/linux-x86/toolchain/下有arm交叉編譯器. 對於Native應用程式,必須要用android toolchain編譯,用其他的toolchain編譯的程式在android平台上用不了,因為其他的不是bionic.而對於kernel ,uboot可以用其他的toolchain編譯,因為kernel,uboot是一個獨立的,沒有用到glibc .
由於toolchain已支援arm v5以上。所以如果要移植android ,假如cpu為arm V4 如S3C2440,則除了移植kernel外,還必須移植toolchain .
不過,很奇怪的是,我用android的toolchain編譯kernel,出現錯誤,而用arm2008-q3卻沒問題???
fs/binfmt_aout.c: In function 'load_aout_binary':
fs/binfmt_aout.c:270: error: 'SEGMENT_SIZE' undeclared (first use in this function)
fs/binfmt_aout.c:270: error: (Each undeclared identifier is reported only once
fs/binfmt_aout.c:270: error: for each function it appears in.)
解決辦法是:
 Userspace binary formats  ---> 
Kernel support for a.out and ECOFF binaries  這項去掉 就可以了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.