MocroDroid SP6820 平臺開發介紹

----------
環境配置
----------

所需軟體和推薦版本
Linux : Ubuntu 11.04 (64-bit recommended)
JDK :   JDK1.6
GCC:    4.5.2
Perl:   5.10
python: 2.7.1
make:   3.81

需要的開發包

$sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev valgrind zlib1gdev

Adb(Android Debug Bridge)
在ubuntu中配置adb
步驟1,把adb複製到/usr/bin目錄下
$sudo cp /home/apuser/<Android_Project>/out/host/linux-x86/bin/adb/ usr/bin

步驟2,更改adb的權限
$sudo chmod a+x /usr/bin/adb

步驟3,建立spreadtrum usb 專有 VID
$[ -d ~/.android ] || mkdir ~/.android
$echo 0x1782 >~/.android/adb_usb.ini

在windows中配置adb
步驟1,在C:\Documents and Settings\<User name>\目錄下建立文件.android
步驟2,把adb_usb.ini放在資料夾.android中
步驟3,把adb tools放在某個目錄下


----------
編譯
----------

編譯命令
$ cd <Android_Project>/   
$ ./mk sp6820a pb         ;Pre Build
$ ./mk sp6820a n          ;new
$ ./mk sp6820a u          ;update target
$ ./mk sp6820a c          ;Clean the objects
$ ./mk sp6820a u k        ;Build kernel
$ ./mk sp6820a u ub       ;Build u-boot
$ ./mk sp6820a u k ub     ;Build kenrel and u-boot

注意:
更多資訊參見文件: <Android_project>/customize/docs
輸入./mk -dh 查看更多指令使用資訊.
編譯log資訊保存在目錄:out/target/product/xxx/log(xxx is customer project name).
在進行模組編譯前,需確保之前進行了一次NEW 或是一次PB


----------
下載
----------

兩個下載工具

1.Research Download Tool
該工具用於windows環境,使用前必須安裝SCI-android-usb-driver驅動

2.Fastboot
在ubuntu模式下進行燒錄.img的步驟如下所示:
步驟1,進入 fastboot 模式
同時按住fastboot key(注:這個鍵在u-boot中配置) 和開機鍵即可進入 fastboot 模式
步驟2,抹除相應模組
$ sudo ./fastboot erase Partition_Name
步驟3, 刷新相應模組
$ sudo ./fastboot flash Partition_Name Flash_File

注意: 先抹除再刷新


----------
專案目錄結構
----------

[3rdparty]    所有的設備驅動
[bionic]      C runtime libraries C運行時函式庫, 例如:libc, libm, libdl, dynamic linker等
[bootable]    啟動引導相關代碼
[build]       Android 編譯系統,include make file, 腳本和其他工具
[cts]         Android相容性測試套件
[customize]   客戶化配置相關,包括專案配置檔、驅動配置檔、 客戶化配置相關,包括專案配置檔、驅動配置檔、腳本等
[dalvik]      dalvik Java虛擬機
[development] 應用程式開發相關和debugging工具
[external]    android使用的一些開源的模組
[frameworks]  應用層核心框架--java及C++語言
[hardware]    硬體抽象層和介面
[kernel]      Linux kernel
[mk]          Project make and build entrance專案編譯和入口
[out]         編譯輸出檔(bin、img和中間檔)
[packages]    應用套裝程式
[prebuilt]    預編譯的一些資源
[sdk]         Android SDK工具
[system]      底層檔系統函式庫、應用及元件——C語言
[u-boot]      U-boot用於引導系統
[vendor]      廠商定制代碼

編譯專案

$ cd <Android_Project>/3rdparty/
$ ./build.products.sh sp6810a [subcmd]

subcmd list:
 fprebuild  -- 快速build需要的前提配置自動設置,同時完成一次徹底編譯
 fbuild     -- 快速build,不編譯3rdparty下的ko
 fbuild2    -- 快速build,在fbuild基礎上,再額外編譯3rdparty下的檔
 clean      -- 清除第3方對android的所有修改,恢復到原始的android版本
 system     -- 重新打包system資料夾產生system.img
 userdata   -- 重新打包data資料夾產生userdata.img
 bootimage  -- 產生boot.img和linux.bin核心文件

更多相關幫助資訊可以通過執行如下語句獲得:
./build.products.sh -h


----------
客戶化專案配置
----------

Customize目錄結構如下 : 目錄結構如下
├── customer_cfg-------客戶化配置目錄,客戶配置工作在此目錄下完成
│ ├── readme----------客戶化配置目錄說明文件
│ ├── sp6820a---------客戶專案:sp6820a(專案名稱)
│ └── sp8805ga--------客戶專案:sp8805ga(專案名稱)
├── docs---------------此資料夾存放客戶化配置相關文件
│ └── readme----------客戶化配置文件索引檔
├── make---------------客戶專案配置目錄
│ ├── emulator.mak----模擬器配置檔。此配置檔有待完善
│ ├── makefile.sprd---Makefile,是SHELL腳本調用入口
│ ├── readme----------客戶專案配置目錄各檔說明
│ ├── rules.cfg-------客戶化代碼產生過程中需要複製到目標資料夾
│ ├── sp6810a.mak-----客戶化專案:sp6810a(專案名稱)配置檔
│ └── sp6820a.mak-----客戶化專案:sp6820a(專案名稱)配置檔
├── perl---------------客戶化配置PERL腳本目錄
├── shell--------------客戶化配置編譯腳本目錄
└── tools--------------存放客戶開發/生產工具

3rdparty目錄結構 目錄結構: 目錄結構
├── app----------------模組名:app 模組名: 模組名
│ ├── app6810---------模組配置:app6810 模組配置: 模組配置
│ │ └── special------模組具體代碼 模組具體代碼
│ ├── app6820---------模組配置:app6810 模組配置: 模組配置
│ └── special---------模組具體代碼 模組具體代碼
├── bluetooth----------模組名:bluetooth 模組名: 模組名
│ ├── AR3002----------模組配置:AR3002 模組配置: 模組配置
│ │ ├── framework----模組 模組FRAMEWORK層代碼 模組 層代碼
│ │ ├── hal----------模組 模組HAL層代碼 模組 層代碼
│ │ └── special------模組具體代碼 模組具體代碼
├── camera-------------模組名:camera 模組名: 模組名
│ ├── gc0309----------模組配置:gc0309 模組配置: 模組配置
│ │ ├── framework
│ │ ├── hal
│ │ └── kernel-------模組 模組KERNEL層代碼 模組 層代碼


新加一個專案

步驟1,在customize/make資料夾下以展訊RELEASE的xxx.mak為模版(同平臺專案)新建專案cust_prj.mak,根據需要進行配置
步驟2,在customize/cusomer_cfg目錄下新建cust_prj資料夾,根據需求具體配置
步驟3,在客戶專案根目錄下編譯:$./mk cust_prj n

注: 更多資訊參見文件<Android_Project>/custimize/docs/S mart Phone B uild System Usr Guide.pdf

新加一個模組配置項

以新加模組A(模組名)(包含兩模組配置:B和C)為例:
步驟1,在customize/make/cust_prj.mak中添加3RDPARTY_LCD = hx8357:r61581
步驟2,在3rdparty/lcd目錄下新建r61581,在r61581資料夾下根據需要建立相關資料夾(hal/framework/kernel/special中的一個或多個),在建立的 資料夾中加入相關文件即可

注: 更多資訊參見文件<Android_Project>/custimize/docs/Smart Phone Buil d System Usr Guide.pdf

新加一個模組
以新加模組A(模組名)(包含兩模組配置:B和C)為例:
步驟1,在customize/make/cust_prj.mak中添加3RDPARTY_A = B:C
步驟2,在3rdparty目錄下新建目錄a(模組名,小寫),在a目錄下新建目錄B和C(模組配置,大小寫與步驟1中配置項一致)
步驟3,在B和C下根據需要加入相關資料夾(hal/framework/kernel/special 中的一個或多個)

注: 更多資訊參見文件<Android_Project>/custimize/docs/Smart Phone Buil d System Usr Guide.pdf

以上情形下模組目錄結構如下:
a
├─B
│ │
│ ├── framework
│ │ ├── path1
│ │ │    ├── 1.java
│ │ │    ├── 2.java
│ │ │    └── route.mk
│ │ │
│ │ └── path2
│ │
│ │ ├── 3.java
│ │       └── route.mk
│ │
│ ├── kernel
│ │    ├── 4.c
│ │    └── route.mk
│ │
│ └── special

└── C
      ├── hal
      │    ├── Android.mk.3rdparty(note: destination file name will be Android.mk)
      │    └── route.mk
      │
      └── special


----------
客戶化驅動配置
----------

Pin-map 配置
在文件/customize/customer_cfg/$pro ject/kernel/pinmap/pinmap_cfg.c 中添加相應的配置

用巨集MFP_CFG_X(d die)或MFP_ANA_CFG_X(a die)來定義pins,例如:
MFP_CFG_X(SIMCLK0, AF0, DS1, F_PULL_NONE, S_PULL_NONE, IO_OE)
MFP_ANA_CFG_X(TP_YD, AF0, DS1, F_PULL_NONE, S_PULL_NONE, IO_Z)

注:
pin的名字是晶片 定義好的
AF0 ~AF3用於選擇pin的複用功能
DS指pin的驅動能力
F_PULL_NONE,F_PULL_UP,F_PULL_DOWN 指在工作模式下pin的上拉和下拉等
S_PULL_NONE,S_PULL_UP,S_PULL_DOWN指在睡眠模式下pin的上拉和下拉等
IO_OE,IO_IE,IO_Z指 在睡眠模式下pin的輸入、輸出和高阻


GPIO 配置
在文件/customize/customer_cfg/$pro ject/kernel/gpio/gpio_cfg.c 中按照如下步驟配置GPIO
步驟1, 定義GPIO的變數,例如: int sprd_3rdparty_gpio_wifi_reset;
步驟2,在gpio_func_cfg 中添加配置項,例如:gpio_func_cfg[]=
{
   {
    &sprd_3rdparty_gpio_wifi_reset,
    140|GPIO_DEFAUT_HIGH|GPIO_DIRECTION_OUTPUT|GPIO_LOGIC_TRUE
   },
};

步驟3:導出該變數: EXPORT_SYMBOL_GPL(sprd_3rdparty_gpio_wifi_power);


Keypad 配置
在文件/customize/customer_cfg/$pro ject/kernel/kpd/kpd_cfg.c中按照如下步驟配置 Keypad
步驟1, 用如下兩個巨集來定義Keypad的行列值
#define CUSTOM_KEYPAD_ROWS 3
#define CUSTOM_KEYPAD_COLS 3
步驟2, 用巨集KEYVAL在sprd_keymap[]添加配置項
static const unsigned int sprd_keymap[] =
{
  KEYVAL(0, 0, ANDROID_KEY_VOLUME_DOWN),  // 0 row
  KEYVAL(1, 0, ANDROID_KEY_VOLUME_UP),    // 1 row
};


I2c 配置
在文件/customize/customer_cfg/$pro ject/kernel/i2c/i2c_cfg.c中按照如下步驟配置 6820 晶片 四組 i2c 口, 確定設備使用那組i2c並添加配置,例如:

static struct i2c_board_info __initdata i2c_boardinfo[] =
{
   {I2C_BOARD_INFO("al3006_pls", 0x1c),},
}
static struct i2c_board_info __initdata i2c_boardinfo1[] =
{
   {I2C_BOARD_INFO(SENSOR_MAIN_I2C_NAME,SENSOR_MAIN_I2C_ADDR),},
   {I2C_BOARD_INFO(SENSOR_SUB_I2C_NAME,SENSOR_SUB_I2C_ADDR),},
};


LCD配置 配置
在文件/customize/customer_cfg/$pro ject/kernel/lcd/lcd_cfg.c中按照如下步驟配置
步驟1,在3rdparty/lcd/中添加lcd的驅動
步驟2,在lcd_cfg.c中添加extern struct lcd_spec lcd_panel_XXXX,例如
extern struct lcd_spec lcd_panel_hx8369;
步驟3, 填充lcd_panel[],例如:
static struct lcd_panel_cfg lcd_panel[] =
{
   [0]=
   {
    .lcd_id = LCD_PANEL_ID_HX8369,
    .panel = &lcd_panel_hx8369,
   },
};

Camera 配置
在文件/customize/customer_cfg/$pro ject/kernel/camera/camera_cfg.c中按照如下步驟配置
步驟1,在3rdparty/camera/中添加camera的驅動
步驟2,在camera_cfg.c中添加externel extern SENSOR_INFO_T g_XXXX_yuv_info,例如:
extern SENSOR_INFO_T g_OV7675_yuv_info;
extern SENSOR_INFO_T g_GC0309_yuv_info;
步驟3,填充main_sensor_infor_tab和sub_sensor_infor_tab
const SENSOR_INFO_T* main_sensor_infor_tab[]=
{
  &g_OV7675_yuv_info,
  PNULL
};
const SENSOR_INFO_T* sub_sensor_infor_tab[]=
{
  &g_GC0309_yuv_info,
  PNULL
};


----------
調試
----------

查看 Android log
adb logcat

查看 kernel log
adb shell
cat /proc/kmsg

注:
保存log資訊
mkdir /data/anr
logcat *:V >/data/anr/Android.log
dmesg >/data/anr/kernel.log
adb pull /data/anr ./log/

查看 modem log
Channel Server + Armlogel
注: 使用前必須先安裝SCI-android-usb-driver,該工具用於windows環境
Channel Server
Logel

查看sd card上的log
adb shell start logs4android
adb shell stop logs4android
注: 所有的log資訊都保存在目錄:/mnt/sdcard/logs4android. 假如SD card不存在, 則log資訊不會被保存

自動測試腳本
共有兩個腳本LogAndroid2PC.bat,StopLogging.bat (目前僅提供 windows版本)(V1.3.4/release notes) 共有兩種測試方法:
測試過程連接PC:請在測試前雙擊LogAndroid2PC,測試完成/出現問 題後雙擊StopLogging
測試過程不連接PC:請在測試完成/出現問題後,先用USB線將測試機 連到PC,再雙擊StopLogging
注: 目前,只提供windows版本,更多資訊,參見備註

查看 uart log
修改 the nvitem.bin並下載到手機
在ubuntu環境下,用cu, minicom 等工具來查看uart log
例如:
用紅盒子連接電腦
$ cd <the path of cu>
$./cu -mux -l /dev/ttyUSB0
$ @[x] ; Quit
在windows環境下,通過超級終端等工具來查看uart log

Lookat 的使用
lookat [-l nword] [-s value] [-h] phy_addr_in_hex
-l nword: 以一定的形式列印出從phy_addr_in_hex 開始的連續多個寄存器的值
-s value :把phy_addr_in_hex 中的值設置為value
-h 列印出這條資訊
例如:
$ lookat 0x82000004
$ lookat -l 4 0x82000030
$ lookat -s 0xa072 0x820004c0

arrow
arrow
    全站熱搜

    虎千代 發表在 痞客邦 留言(0) 人氣()