390 likes | 765 Views
嵌入式系統 6410 平台開發環境 & 工具介紹與操作實習 - Android porting. 華亨科技 江敏傑. Android-2.1 系統的燒寫 Android 模組使用 Linux 核心配置編譯 Android 開發環境建立 Android 的編譯. Android-2.1 系統的燒寫. 一個完整的 Android 系統至少由三部分組成,分別是 bootloader 、 kernel 、 rootfs ,這與典型的 linux 系統的結構是一致的 下面介紹如何燒寫一個完整的 Android 作業系統. 燒寫 bootloader .
E N D
嵌入式系統6410平台開發環境&工具介紹與操作實習-Android porting 華亨科技 江敏傑
Android-2.1系統的燒寫 • Android 模組使用 • Linux核心配置編譯 • Android開發環境建立 • Android的編譯
Android-2.1系統的燒寫 • 一個完整的Android系統至少由三部分組成,分別是bootloader、kernel、rootfs,這與典型的linux系統的結構是一致的 • 下面介紹如何燒寫一個完整的Android作業系統
燒寫bootloader • SD啟動的uboot燒寫,選擇\tool\u-boot_mmc.bin • 把 SD 取出並插入到板子的SD 插槽中,透過設定板子的撥碼開關使板子啟動方式為,00000000(開關撥向on為1)
進行dnw工具相關設定 • 選擇\tool\dnw • 接下來設定所使用的串列埠
第二步是連接這個串列埠設備 • Dnw工具可用後便可開啟開發板電源,如果沒有意外,dnw中將列印出uboot的啟動資訊:
NandFlash啟動的uboot燒寫 • 第一步,透過USB將uboot下載到記憶體中 • 輸入USB下載命令dnw:
USB驅動程式 • 如果你是第一次使用,會提示安裝板子的USB驅動程式,驅動已經安裝則可以跳過這幾步,以後就不需要安裝了 • 找到光碟中USB驅動中提供的USB驅動: 點選瀏覽,指到tool/USB driver
到此,驅動安裝成功,這時候使用配線usb線連接開發板的USB(OTG)到PC主機,並點選USB Port->Transmit->Transmit,準備下載uboot:
選擇光碟中android\2.1\android-image\u-boot.bin 注意,這個才是nand啟動的uboot,不要選擇SD啟動的u-boot_mmc.bin
第二步是將已經下載到記憶體中的uboot燒錄到nandflash第二步是將已經下載到記憶體中的uboot燒錄到nandflash • Uboot要燒寫到nand中0開始的256KB中,在燒寫之前需要先把這塊區域清除: • nand erase 0 40000
接著將0xc0008000中的uboot燒寫到nand中0開始的256K:接著將0xc0008000中的uboot燒寫到nand中0開始的256K: • nand write c0008000 0 40000
到這裡已經把uboot燒錄到nand中,重新設定板子的指撥開關6和7至on的位置,使啟動方式修改為nand啟動到這裡已經把uboot燒錄到nand中,重新設定板子的指撥開關6和7至on的位置,使啟動方式修改為nand啟動 • 設定完後重新啟動板子,如果沒有意外,將輸出以下資訊:
燒寫kernel • 第一步 透過USB將核心檔下載到板子記憶體中: • dnw 開啟光碟中android\android-image目錄下的zImage(請依LCD大小選擇),將核心下載到板子:
第二步 清除nandflash中存放核心的那部分空間: nand erase 40000 300000 • 第三步 將記憶體中的核心燒錄到Nandflash nand write c0008000 40000 300000 • 第四步 測試核心是否能啟動(以下步驟可省略) nand read c0008000 40000 300000 接著跳啟動記憶體中的核心: bootm c0008000 (第四步驟測試完,請reset,並在uboot停住)
燒寫cramfs • 真正用到的檔案系統都是使用ubifs格式的根檔案系統,cramfs檔案系統只是為了燒寫而製作的輔助檔案系統 • 第一步 使用USB將cramfs下載到板子記憶體中: • dnw
第二步 刪除nand中的cramfs分區: • nand erase 400000 400000
第三步 把記憶體中的根檔案系統燒寫到Nandflash中的cramfs分區: nand write c0008000 400000 400000 • 第四步 測試cramfs是否燒寫成功: setenv bootargs noinitrd root=/dev/mtdblock0 console=ttySAC0 init=/linuxrc • 再輸入 saveenv(儲存參數)
燒寫ubifs之前先要對這個分區進行格式化為ubifs所以如果現在就想開始燒寫ubifs,那麼這裡輸入a就開始對ubifs分區進行格式化了:燒寫ubifs之前先要對這個分區進行格式化為ubifs所以如果現在就想開始燒寫ubifs,那麼這裡輸入a就開始對ubifs分區進行格式化了: • 請注意!請將\android\2.1\android-image裡的android.tar.gz複製到SD卡內
這裡選擇燒寫Android的檔案系統,選擇a,再按Enter,結果如下:這裡選擇燒寫Android的檔案系統,選擇a,再按Enter,結果如下: • 這邊請輸入y,並按Enter • 這邊板子重新啟動後,請在uboot上停住
到這裡ubifs燒寫完成,接下來測試一下這個檔案系統是否可用到這裡ubifs燒寫完成,接下來測試一下這個檔案系統是否可用 • 首先重定系統重新進入uboot (要三秒內ENTER)的命令行介面,修改一下核心的啟動參數 • setenv bootargs noinitrd console=ttySAC0 init=/init ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs • 使用saveenv命令儲存
Android-2.1下WIFI的使用 • 選擇Settings->Wireless & network-> • Wi-Fi打勾 • Wi-Fi Setting
Android-2.1下Camera的使用 • 點擊Camera,記住~~鏡頭朝LCD方向 • 如果没有意外Camera 應該已經可以預覽 了,點擊Camera 界面的圓點按鈕便能拍下 • 照片,不過照片是保存在SD 中的,所以必須在拍照之前將SD 插到板子中
Android-2.1下GPS模組的使用 • 運行程序選單中的GPS Status 程序 GPS Status 在運行之後可能會彈出瀏覽器的界面連接到這個程序的開發網站,按下home按鍵取消瀏覽器的連接即可,這時候應該會顯示下面的界面:
Android開發環境建立 • 下面簡單介紹一下Ubuntu-9.10下Android開發環境的建立,對於這部分內容建議到網上查找資料,這裡的說明未必是全面 • Android開發時比較有用的幾個網站包括: • Android Source官方首頁:http://source.android.com/ • Android Developer官方首頁http://developer.android.com/index.html
基本環境的建立 • 在Ubuntu-9.10下,需要使用到相當多的套裝軟體,可以使用下面的命令進行安裝: • sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
java環境建立 • Android的編譯需要使用到jdk-1.5(jdk5),這裡分別介紹線上安裝和離線安裝兩種方式。 • 1.線上安裝jdk5 • 2.離線安裝jdk5
離線安裝jdk5 • sudo chmod 777 jdk-1_5_0_17-linux-i586.bin • ./ jdk-1_5_0_17-linux-i586.bin • 便能在當前目錄下得到jdk1.5.0_17目錄。 • 安裝結束後還要設定好環境變數讓Android找到這個路徑,編輯/etc/bash.bashrc,增加下面的語句: • export JAVA_HOME=/home/figo/jdk1.5.0_17 • export ANDROID_JAVA_HOME=$JAVA_HOME • export PATH= $JAVA_HOME/bin:$PATH
Android的編譯非常簡單,在終端機中進入Android-2.1目錄下執行make即可完成代碼的編譯,不過為了同時編譯出配套的Android SDK,可以使用make sdk進行編譯: Android原始碼的編譯
漫長的編譯過程後編譯結果放在了Android-2.1/out下。其中out/host是主機上執行的一些程式,比如說編譯出來的sdk就在Android-2.1/out/host/linux-x86/sdk下。這些程式需要用來幫助除錯,因此使用下面的命令設定環境變數:漫長的編譯過程後編譯結果放在了Android-2.1/out下。其中out/host是主機上執行的一些程式,比如說編譯出來的sdk就在Android-2.1/out/host/linux-x86/sdk下。這些程式需要用來幫助除錯,因此使用下面的命令設定環境變數:
sudo gedit /etc/bash.bashrc • 在bash.bashrc中增加以下內容: • export ANDROID_SDK_ROOT=/home/figo/ARM11/android/Android-2.1/out/host/linux-x86/sdk/android-sdk_eng.figo_linux-x86 • export PATH=$PATH:$ ANDROID_SDK_ROOT /tools • 儲存後執行source /etc/bash.bashrc讓設定生效,重新開一個終端機便能使用android、emulator等命令了。
在模擬器中執行編譯出來的Android鏡像 • 創建AVD • AVD是Android virtual device的縮寫,就是一個執行Android系統的虛擬機器,如果已經按照上一節來配置環境變數,那麼在命令行中執行android命令便能彈出一個GUI介面的AVD創建程式(Android SDK and AVD Manager):
之後儲存退出就產生了一個名為figo3的avd。這裡還可以指定一個虛擬的SD卡,使用mksdcard命令生成一個SD卡鏡像:之後儲存退出就產生了一個名為figo3的avd。這裡還可以指定一個虛擬的SD卡,使用mksdcard命令生成一個SD卡鏡像: • mksdcard 10M sdcard.img • 這樣便在當前目錄下產生一個SD鏡像檔,在Android SDK and AVD Manager中可以找到這個檔案作為avd的虛擬SD card,使用者還可以使用loop方式將這個sdcard.img掛載到主機目錄下,這樣便能將主機下的一些檔案透過sdcard傳遞到虛擬機中
在終端機中執行下面命令: emulator -avd figo3 -system out/target/product/generic/system.img -ramdisk out/target/product/generic/ramdisk.img -show-kernel 其中out/target/product/generic/system.img、out/target/product/generic/ramdisk.img為編譯Android原始碼生成的鏡像檔,根據自己的路徑情況來輸入。彈出的畫面如下: 執行emulator