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
- Sep 18 Wed 2013 19:08
MocroDroid SP6820 平臺開發介紹
全站熱搜
留言列表