主要分享在Devkit8500板子上移植並定製本身的Androidhtml
首先,入手這個板子的時候,能夠看看Devkit8500的配件包,它自帶了一些額外的數據線或者小設備,其中最最要的是找到裏面的DVD光盤,裏面有好多東西對移植是很是重要的,包括各類須要使用到的編譯工具和Linux kernel、Android源碼!!linux
全部方法和教程其實都是參考其自帶的Devkit8500用戶手冊android
步驟:一、拷貝DVD中的編譯工具和源碼:shell
<!-- lang: shell --> linux-2.6.32-devkit8500.tar.bz2 // Linux-2.6.32的內核 rowboat-android-froyo-devkit8500.tar.bz2 //Android2.2的源碼 /linux/demo/Android/image 下的全部文件 //已經提供好的,編譯好的Android2.2的相關文件 /media/cdrom/linux/tools // 全部用到的工具 以及裏面的用戶手冊,你直接拷貝中文的,用戶手冊分爲2分,一份是簡單的,另外一分是詳細的,你把兩份都拷下來。
在尚未開始編譯本身的Android系統以前,咱們能夠現將上面拷貝的/linux/demo/Android/image 下的全部文件複製到TF卡上,並根據您所使用的顯示設備 LCD(4.3",7"),重命名 uImage_xx 爲 uImage。(裏面會有兩個uImage文件,分別是4.3和7寸的顯示屏的,根據本身的設備修改uImage的名稱),而後將TF卡插到板子上,上電,等到因此文件都拷貝到板子的ROM上後,重啓就能夠看到Android系統了,具體參考用戶手冊!!ubuntu
二、安裝編譯環境。bash
在ubuntu的$HOME目錄下新建目錄:tools,並將/media/cdrom/linux/tools中的工具解壓,並拷貝到該目錄,而後配置環境變量。若是用終端命令操做,示例以下:svn
<!-- lang: shell --> cd /media/cdrom/linux/tools tar xvf arm-eabi-4.4.0.tar.bz2 -C $HOME tar xvf arm-2007q3.tar.bz2 -C $HOME mkdir $HOME/tools cp /media/cdrom/linux/tools/mkimage $HOME/tools cp /media/cdrom/linux/tools/signGP $HOME/tools cp /media/cdrom/linux/tools/mkfs.ubifs $HOME/tools cp /media/cdrom/linux/tools/ubinize $HOME/tools cp /media/cdrom/linux/tools/ubinize.cfg $HOME/tools export PATH=$HOME/arm-eabi-4.4.0/bin:$HOME/tools:$PATH
你也能夠將環境變量寫進~/.bashrc文件,這樣也比較方便,不知每回開機就要從新設置環境變量。工具
三、開始進行編譯,並定製本身的Android系統網站
針對不一樣的目的要求能夠定製不一樣的Android系統,個人主要目的是:要在本身定製的Android操做系統中移植安裝Systemtap工具。對於移植安裝Systemtap工具,我會在後面的博客分享給你們ui
分爲2步:一、編譯linux內核,二、在linux內核的基礎上編譯Android源碼
首先,個人Android源碼和Linux內核源碼都放在Home目錄下
一、編譯linux內核:linux-2.6.32-devkit8500 爲了可以安裝上systemtap,要對內核進行一些修改:進入到arch/arm/include/asm/ptrace.h,修改以下,在下面幾行後面
<!-- lang: shell --> #define isa_mode(regs) \ ((((regs)->ARM_cpsr & PSR_J_BIT) >> 23) | \ (((regs)->ARM_cpsr & PSR_T_BIT) >> 5)) #define processor_mode(regs) \ ((regs)->ARM_cpsr & MODE_MASK) #define interrupts_enabled(regs) \ (!((regs)->ARM_cpsr & PSR_I_BIT)) #define fast_interrupts_enabled(regs) \ (!((regs)->ARM_cpsr & PSR_F_BIT))
添加:
<!-- lang: shell --> #define condition_codes(regs) \ ((regs)->ARM_cpsr &(PSR_V_BIT|PSR_C_BIT|PSR_Z_BIT|PSR_N_BIT))
最後變成:
<!-- lang: shell --> #define isa_mode(regs) \ ((((regs)->ARM_cpsr & PSR_J_BIT) >> 23) | \ (((regs)->ARM_cpsr & PSR_T_BIT) >> 5)) #define processor_mode(regs) \ ((regs)->ARM_cpsr & MODE_MASK) #define interrupts_enabled(regs) \ (!((regs)->ARM_cpsr & PSR_I_BIT)) #define fast_interrupts_enabled(regs) \ (!((regs)->ARM_cpsr & PSR_F_BIT)) #define condition_codes(regs) \ ((regs)->ARM_cpsr &(PSR_V_BIT|PSR_C_BIT|PSR_Z_BIT|PSR_N_BIT)) /* Are the current registers suitable for user mode? * (used to maintain security in signal handlers) */
而後開始編譯:
<!-- lang: shell --> cd linux-2.6.32-devkit8500 make distclean make omap3_devkit8500_android_defconfig make menuconfig
在圖形界面中開啓以下選項,這些是systematp必須須要的開關:
<!-- lang: shell --> CONFIG_KPROBES: General Setup -> Kprobes CONFIG_RELAY: General Setup -> user spacerelay support CONFIG_PROFILING: General Setup -> Profilingsupport (EXPERIMENTAL) + General Setup -> Oprofile system profiling(EXPERIMENTAL)
另外還有一個開關要打開,這主要是爲了符合你板子屏幕大小,打開屏幕大小選項:
個人屏幕是4.3的,因此選擇4.3
最後執行:
<!-- lang: shell --> make uImage
執行完以上操做後,arch/arm/boot 目錄下會生成咱們須要的 uImage 文件。
二、編譯Android源碼,生成ubi.img UBI是一種文件系統,主要用於智能手機中。廠商提供的源碼仍是有點問題,有些地方須要改動,就是這麼點問題搞了很久,google也沒結果!
以下圖,進入到/OMAP35x_Android_Graphics_SDK_3_01_00_03目錄下
首先修改Rules.make文件兩處,一是HOME變量路徑,二是KERNEL_INSTALL_DIR,我將原來的註釋了,而後加上了修改後的路徑:
<!-- lang: shell --> #set home area HOME (relative location for all SDK operations) #HOME=/home/android/rowboat-android-froyo-devkit8500 HOME=/home/ubuntu/rowboat-android-froyo-devkit8500 #set the kernel installation path #KERNEL_INSTALL_DIR=/home/luofc/work/svn/AM37x_EVM/kernel/linux-2.6.32-android KERNEL_INSTALL_DIR=/home/ubuntu/linux-2.6.32-devkit8500
這裏之因此這麼修改,主要是由於本身的Android源碼和Linux內核源碼在文件夾中位置不一樣,因此各位按着本身的修改便可。
因爲咱們要在以前的編譯好的kernel的基礎上編譯Android源碼,因此呢咱們還要將下面
<!-- lang: shell --> ubuntu@ubuntu:~$ cd linux-2.6.32-devkit8500/arch/arm/boot/ ubuntu@ubuntu:~/linux-2.6.32-devkit8500/arch/arm/boot$ ls bootp compressed Image install.sh Makefile uImage zImage
將其中zImage拷貝到如下目錄,並重命名爲kernel
<!-- lang: shell --> ubuntu@ubuntu:~/rowboat-android-froyo-devkit8500/device/ti/omap3evm$ ls AndroidBoard.mk asound.conf init.rc omap3evm.mk TWL4030_Keypad.kl AndroidProducts.mk BoardConfig.mk kernel TWL4030_Keypad.kcm vold.fstab
另外還有一處須要改動的地方,就是在當前目錄下,有三個文件夾
<!-- lang: shell --> gfx_rel_es2.x_android gfx_rel_es3.x_android gfx_rel_es5.x_android
咱們分別進入這三個文件夾,而後找到 : install.sh文件,作以下修改,將文件最開頭的一行:
<!-- lang: shell --> #!/bin/sh
改成:
<!-- lang: shell --> #!/bin/bash
最後執行make進行編譯
<!-- lang: shell --> cd rowboat-android-froyo-devkit8500 make
這個過程要相對比較久,並且出錯的可能性比較大,出錯的狀況也比較多,可是大部分錯誤的解決方法均可以在這個網站找到:http://www.cnblogs.com/ouling/archive/2011/09/08/2171337.html
當編譯完成後,咱們還須要作的一步就是製做ubi.img文件系統。這邊咱們還須要修改一個文件:rowboat-android-froyo-devkit8500目錄下的build_ubi.sh,這個文件是製做ubi文件系統的腳本。
將下面代碼
<!-- lang: shell --> #!/bin/sh //注意這sh也須要修改 、、、、、、、、、、 MKFSUBI=/home/embest/tools/mkfs.ubifs MKFSUBI_ARG="-r ${ROOT_DIR} -m 2048 -e 129024 -c 4063 -o temp/ubifs.img" UBINIZE=/home/embest/tools/ubinize UBINIZECFG=/home/embest/tools/ubinize.cfg UBINIZE_ARG="-o ubi.img -m 2048 -p 128KiB -s 512 ${UBINIZECFG}"
修改成:
<!-- lang: shell --> #!/bin/bash 、、、、、、、、、、 MKFSUBI=/home/ubuntu/tools/mkfs.ubifs MKFSUBI_ARG="-r ${ROOT_DIR} -m 2048 -e 129024 -c 4063 -o temp/ubifs.img" UBINIZE=/home/ubuntu/tools/ubinize UBINIZECFG=/home/ubuntu/tools/ubinize.cfg UBINIZE_ARG="-o ubi.img -m 2048 -p 128KiB -s 512 ${UBINIZECFG}"
還有一處須要修改的地方,進入目錄:
<!-- lang: shell --> ubuntu@ubuntu:~/rowboat-android-froyo-devkit8500/out/target/product/devkit8500/root$ ls bin data default.prop dev init init.goldfish.rc initlogo.rle.bak init.omap3.rc init.rc proc sbin sys system
而後修改init.rc文件
將下面:
<!-- lang: shell --> mount rootfs rootfs / ro remount mount yaffs2 mtd@system /system ro remount
修改成:
<!-- lang: shell --> mount rootfs rootfs / rw remount mount yaffs2 mtd@system /system rw remount
最後製做ubi.img,執行命令:
<!-- lang: shell --> ubuntu@ubuntu:~/rowboat-android-froyo-devkit8500$ sudo ./build_ubi.sh
若是沒有出錯,最後會提示安裝成功,在tmp文件下生存ubi.img:
<!-- lang: shell --> binary hal_server_test -> /system/bin/hal_server_test binary framebuffer_test -> /system/bin/framebuffer_test binary texture_benchmark -> /system/bin/texture_benchmark binary xmultiegltest -> /system/bin/xmultiegltest Installation complete! ###~### file temp/ubi.img generated ### -rw-r--r-- 1 root root 79036416 2013-09-10 15:43 temp/ubi.img
四、安裝Android操做系統到板子上
在Android源碼和Linux內核編譯完成後,咱們就能夠安裝Android系統了。
一、格式化TF卡
二、將光盤/linux/demo/Android/image下的全部文件拷貝到TF卡上,而後將ubi.img、uImage_4.三、uImage_7刪除
三、將下面兩個目錄中
<!-- lang: shell --> ubuntu@ubuntu:~/linux-2.6.32-devkit8500/arch/arm/boot$ ls bootp compressed Image install.sh Makefile uImage zImage ubuntu@ubuntu:~/rowboat-android-froyo-devkit8500/temp$ ls ubifs.img ubi.img
的uImage和ubi.img拷貝到TF卡上
四、將TF卡插到板子上,並上電,等拷貝到板子Rom完成(當板子上的sys LED等一閃一閃的時候,說明拷貝完成),拔出TF卡,從新上電啓動就能夠了。通常你能夠在你的ubuntu主機上安裝minicom這個超級終端來控制板子!
具體能夠查看網上一些資料。安裝完成之後啓動minicom是要作些修改,用以下命令啓動:
<!-- lang: shell --> sudo minicom -s
而後配置Serial port setup選項,
<!-- lang: shell --> Serial Device : /dev/tty8 修改成: Serial Device : /dev/ttyS0 Hardware Flow Control : Yes 修改成:Hardware Flow Control : NO