開發板: FS_S5PC100
CPU: S5PC100,800Mhz,A8
MEM:256Mb
NAND: 256Mb
LCD:4.3
Android4.0.4源碼:
linaro-android-12.06-release for origen
由於s5pc100官方只給出Android2.1的release版本,沒有最新版本的,所以只能自己移植。
-------------------------------------------------------------------------------
1. 通過git下載源碼
2. 設置編譯環境為origen-eng
3. 修改device裡的BoardConfig.mk
# 不編譯內核和Uboot(默認編譯會將Uboot和zImage一起編譯出來)
# 去掉支持SMP(A8是單核)
# 去掉硬件加速和Gator的arm調試服務
4. 編譯
由於android4.0.4 for origen是使用的CPUExynos 4210的獵戶座CPU,該CPU是A9的,支持SMP和Mali-400 GPU,所以內核我們要自己進行重新編譯針對S5PC100。
5. 編譯內核
使用s5pc100的默認配置,編譯內核,注意加上android的必要驅動。
Android驅動:
# Android Binder:基於openBinder框架的驅動,進程間通信底層主要驅動,沒有了它,android無法工作。
# Andorid Logger:是一個輕量級的日志系統,在內核裡是misc設備驅動,它與logcat配合實現調試。
代碼:driver/staging/android/logger.c
# Andorid Lowmemorykiller:低內存管理器,是linux標准OOM(Out Of Memory)改進版,當系統內存不足時,會殺掉一些不重要的進程,釋放空間。
代碼:driver/staging/android/lowmemorykiller.c
# Android Ram Console ram_console:輔助調試的內核機制,它用一段物理內存虛擬一個console設備,這樣printk的時候會把調試信息寫一份到這塊ram,最後通過/proc文件系統輸出。
#Android Timed Device timed_gpio:基於platform driver 實現的一個增強的gpio驅動,它與內核定時器綁定在了一起,實現了一種時鐘控制的gpio
通過sysfs操作gpio,可以讓gpio輸出高、低電平,同時也可以指定一個定時器過期時間,當超時的時候,會去執行一個callback函數。目前支持vibrator和LED設備
對應代碼:driver/staging/android/timed_gpio, time_output,對應文件系統(sys/class/timed_output/<dev_name>/enable)
# Androd Switch:它是android新引進的驅動,用於檢查一些開關量,如耳機插入,USB設備插入,在sysfs裡創建對應的entry(sys/class/switch/<dev_name>/stat),用戶通過sysfs與之進行交互,同時,也可以使用uevent機制與其交互。
設備文件沒有讀寫權限,沒有加載對應的uevent.rc啟動腳本文件(該腳本 文件為android的設備進行權限設置的)
對應代碼:driver/switch/*
# Android Power Manager:基於標准linux電源管理系統的輕量級電源管理驅動
代碼:kernel/power/*
# Android Ashmem:匿名共享內存,為進程間提供大塊共享內存,同時為內核提供回收和管理這些內存的機制。
代碼:mm/ashmem.c
# Android PMEM:用於向用戶空間提供連續的物理內存,DSP和其它需要連續物理內存的設備需要它的提供服務。
代碼:driver/misc/pmem.c
# Android alarm:提供一個定時器用於把設備從睡眠狀態喚醒,同時它也提供了一個即使在設備睡眠時也會運行的時鐘基准。
代碼:driver/rtc/alarm.c
# USB Gadget:一個基於標准Linux USB gadget驅動框架的設備驅動,Android的USB驅動是基於gadget框架的。
代碼:driver/usb/gadget/
# Yaffs2文件系統:Android采用Yaffs2作為 MTD Nandflash文件系統。
平台設備:
網卡:dm9000
http://www.linuxidc.com/Linux/2012-07/64866.htm
LCD:顯示
編譯出內核來,將其放到tftp目錄下,等待使用。