前往: 導覽, 搜尋

RK3288 Android 5.1 Manual

目錄

android開發平台的搭建

Android自從升級到4.0以來,相比之前的版本工程更加龐大,編譯整套源碼對PC機硬體要求很高,因此不建議採用虛擬機編譯,強烈建議直接安裝Linux作業系統,充分發揮PC機的性能。我們這裡以ubuntu14.04 64位系統機器為例講解,如果您是新手,建議與我們版本保持一致。

使用U盤安裝ubuntu

使用U盤安裝ubuntu系統簡單快捷,強烈推薦使用此方法安裝。

安裝工具:

安裝方法:

第一步:下載好ubuntu的ISO文件,和lili usb creater這個軟體並安裝。

第二步:插入usb,並打開usb creater 這個軟體,根據軟體提示設置,在步驟1中選擇安裝盤,找到識別出的U盤;在步驟2中找到下載的ubuntu映像文件;步驟3默認,步驟4中選中隱藏優盤上創建的文件,使用FAT32格式化U盤;最後在步驟5中點擊閃電圖標開始安裝,直到提示優盤已安裝完成為止。

USB-MemoryToUbuntu.png

第三步:重啟電腦,開機時,看清螢幕下方的提示,進入BIOS設置菜單,選擇U盤啟動。一般台式機是按DEL鍵,筆記本有些是按F2,有些按F10進入。設置完成後保存退出。

第四步:再次重啟系統,這時已經可以看到ubuntu的安裝界面了,選擇中文,繼續;

第五步:選擇 install (您也可以選擇live mode 可以體驗下系統),繼續;

第六步:也選擇中文,點擊繼續:再繼續;

第七步:配置網絡,可以安裝時升級,也可以不升級,等安裝完系統後再手動升級;

第八步:第一個選項是把以前的系統升級到ubuntu14.04,如果你只要單系統的可以選擇第一項,第二項是升級到ubuntu14.04並把其他的資料刪除掉,第三項是我們用的最多的,比較靈活,選something else,繼續,在這裡我分出了兩個區給ubuntu,一個 /  和 一個 /home ,分區可以新建,可以對它格式化,具體根據需要選擇;

第九步:這是設置區域,選擇上海就行了;

第十步:選擇鍵盤布局。選中國;

第十一步:選擇用戶名和密碼,到此配置完畢,點擊繼續直接安裝,喝一會兒咖啡,待安裝完畢,重啟之後,就可以看到美麗的ubuntu世界了。

設置XP為開機默認啟動

ubuntu安裝後每次開機都是默認進入ubuntu系統的,對於以windows為主的朋友,每次開機都要守在畫面切換到XP啟動,可見十分麻煩,通過下面,你可以設置讓你的XP系統為第一啟動。

修改/boot/grub/grub.cfg文件,可以看到最末尾有如下語句:

<nowiki>
 menuentry "Microsoft Windows XP Professional (on /dev/sda1)" {

    insmod part_msdos

    insmod ntfs

    set root='(hd0,msdos1)'

    search --no-floppy --fs-uuid --set 0E48A65048A6367D

    drivemap -s (hd0) ${root}

    chainloader +1

}

### END /etc/grub.d/30_os-prober ###
<nowiki>

仔細閱讀該文件,發現有不少menuentry,這些正是對應了開機啟動時的選擇項,將上面語句放在第一個menuentry的前面,這樣Windows XP就為默認的啟動系統了。修改後的部分代碼如下:

### BEGIN /etc/grub.d/05_debian_theme ###

set menu_color_normal=white/black

set menu_color_highlight=black/light-gray

### END /etc/grub.d/05_debian_theme ###



### BEGIN /etc/grub.d/30_os-prober ###

menuentry "Microsoft Windows XP Professional (on /dev/sda1)" {

    insmod part_msdos

    insmod ntfs

    set root='(hd0,msdos1)'

    search --no-floppy --fs-uuid --set 0E48A65048A6367D

    drivemap -s (hd0) ${root}

    chainloader +1

}

### END /etc/grub.d/30_os-prober ###



### BEGIN /etc/grub.d/10_linux ###

menuentry 'Ubuntu, with Linux 2.6.35-30-generic' --class ubuntu --class gnu-linux --class gnu --class os {

    recordfail

    insmod part_msdos

    insmod ext2

    set root='(hd0,msdos9)'

    search --no-floppy --fs-uuid --set 4833f619-6388-4dd3-acd7-6fa3eacb9a15

    linux    /boot/vmlinuz-2.6.35-30-generic root=UUID=4833f619-6388-4dd3-acd7-6fa3eacb9a15 ro   quiet splash

    initrd    /boot/initrd.img-2.6.35-30-generic

}

ubuntu下磁碟格式化

在做開發時,經常會把SD卡格式化為msdos,ext3等格式。這時,放在windows下將無法格式化,只能藉助於Linux。

在Linux下使用fdisk和mkfs兩個工具實現SD卡的格式化。首先,使用fdisk指令刪除裡面的所有分區,步驟為:

fdisk  /dev/sdb

d

w


每輸一次d,輸入一次分區的序號,直到刪完,再按w寫入,完成分區的刪除。再按n,回車,回車,新建一個分區。之後再使用mkfs工具格式化為指定格式的盤,如格式化為fat32格式,則執行如下指令:

mkfs  –t  vfat  /dev/sdb

Ubuntu下通過SSH遠程登錄伺服器

第一步:在伺服器上安裝ssh的伺服器端。

 apt-get install openssh-server 

第二步:啟動ssh-server。

 service ssh restart 

第三步:確認ssh-server已經正常工作。

 netstat -tlp 

有如下列印信息:

 tcp 0 0 *:ssh *:* LISTEN - 

看到上面這一行輸出說明ssh-server已經在運行了。

第四步:在Ubuntu客戶端通過ssh登錄伺服器。假設伺服器的IP位址是172.18.0.198,登錄的用戶名是liuqiming。

 $ ssh -l liuqiming 172.18.0.198 

接下來會提示輸入密碼,然後就能成功登錄到伺服器上了。可以通過資源管理器瀏覽的方式登錄伺服器,點擊位置->連接到伺服器,伺服器類型選擇ssh,伺服器一欄填入伺服器的IP位址,點擊連接即可。

ubuntu下使用郵箱

ubuntu下默認就有郵箱軟體,如在使用時發現無法接受或發送郵件,在發送電子郵件->身份驗證點擊檢查的類型,再選擇沒有劃斜線的就好了。

ubuntu下安裝五筆

使用如下指令:

 sudo apt-get install ibus-tables-wubi 

然後在系統->首選項->鍵盤輸入法的輸入法中選擇WUBI,添加進去即可。

ubuntu下安裝chrome瀏覽器

ubuntu10.10默認安裝的火狐瀏覽器,如果用戶喜歡該瀏覽器,可以跳過此節。google出了基於linux的瀏覽器chrome,用戶可以使用如下方式安裝。在網上下載安裝源文件,http://tools.google.com/chrome/,也可以從光碟中獲得,雙擊即可安裝。

ubuntu下安裝VIM

使用如下命令安裝即可:

 sudo apt-get install vim 

ubuntu打開WINDOWS下記事本亂碼問題

出現這種情況的原因是,gedit 使用一個編碼匹配列表,只有在這個列表中的編碼才會進行匹配,不在這個列表中的編碼將顯示為亂碼。您要做的就是將 GB18030 加入這個匹配列表。

您可以遵循以下步驟,使您的gedit正確顯示中文編碼文件。

1. 終端中鍵入「gconf-editor」,並按下回車鍵,打開「配置編輯器」。

2. 展開左邊的樹節點,找到 /apps/gedit-2/preferences/encodings 節點並單擊它。

3. 雙擊右邊的 auto_detected 鍵,打開「編輯鍵」對話框。

4. 單擊列表右邊的「添加」按鈕,輸入「GB18030」,單擊確定按鈕。

5. 列表的最底部新增加了一個「GB18030」。單擊右邊的向上,將「GB18030」放在第二位;

6. 單擊確定按鈕,關閉配置編輯器。

現在,gedit 應該能夠順利打開 GB18030 編碼的文本文件了。如果不放心,可以再增加GBK、GB2312編碼。

ubuntu下安裝源碼比較工具

ubuntu下源碼比較工具很多,比較常見的是meld工具,使用如下指令安裝:

sudo apt-get install meld 

安裝完成後,可以在應用程式->編程中打開。

ubuntu下安裝串口終端minicom

使用如下指令安裝:

sudo apt-get install minicom 

安裝完成後,需要設置minicom。如果直接使用串口,通常設置為ttyS0,如果使用USB轉串口,通常設置為ttyUSB0。輸入如下指令:

 sudo minicom -s 

選擇Serial port setup,選擇A,輸入正確的串口終端,選擇E,輸入115200 8N1,選擇F和G,都設置為No,不使用流控,再回車,選擇Save setup as dfl。注意,只有root用戶才有權限保存參數。筆記本用戶通常使用的USB轉串口延長線,目前市面上大多都是pl2303方案,插上USB轉串口延長線後,輸入如下命令查詢驅動是否正常加載:

lsmod |grep pl2303 

正常加載時會提示如下信息:

lqm@lqm:~$ lsmod |grep pl2303

pl2303                 11756  1 

usbserial              33100  3 pl2303 

再使用如下命令查詢系統的一些信息:

 dmesg | tail -f 

正常情況下會出現如下提示:

lqm@lqm:~$ dmesg |tail -f

<nowiki>[  383.093851] ERROR! H2M_MAILBOX still hold by MCU. command fail

[  383.148849] ---> RTMPFreeTxRxRingMemory

[  383.148903] <--- RTMPFreeTxRxRingMemory

[  383.180580]  RTUSB disconnect successfully

[  387.762330] usb 2-4: USB disconnect, address 3

[  387.762566] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0

[  387.762601] pl2303 2-4:1.0: device disconnected

[  392.164589] usb 2-4: new full speed USB device using ohci_hcd and address 5

[  392.379898] pl2303 2-4:1.0: pl2303 converter detected

[  392.412998] usb 2-4: pl2303 converter now attached to ttyUSB0</nowiki>

表示串口設備名稱為ttyUSB0。有時會提示如下錯誤:

lqm@lqm:~$ dmesg | tail -f

<nowiki>[  408.910351] 0x1300 = 00073200

[  413.945752] ===>rt_ioctl_giwscan. 8(8) BSS returned, data->length = 1177

[  419.047006] ===>rt_ioctl_giwscan. 7(7) BSS returned, data->length = 1067

[  419.047302] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=1)

[  419.392535] wlan0: no IPv6 routers present

[  433.902136] ===>rt_ioctl_giwscan. 6(6) BSS returned, data->length = 960

[  473.902907] ===>rt_ioctl_giwscan. 8(8) BSS returned, data->length = 1271

[  533.900777] ===>rt_ioctl_giwscan. 8(8) BSS returned, data->length = 1200

[  613.904091] ===>rt_ioctl_giwscan. 9(9) BSS returned, data->length = 1435

[  713.904199] ===>rt_ioctl_giwscan. 8(8) BSS returned, data->length = 1263</nowiki>

一般情況下重插撥一次USB轉串口線即可。

ubuntu卡死的解決辦法

ubuntu系統有時也會像windows系統一樣,卡死不動。這時除了復位系統,我們也可以嘗試如下方法:

一:按住ctrl+alt+F2進入tty2;

二:查看進程:

ps -e 

三:kill掉相關進程

四:再按住alt+F7返回圖形界面

Android開發工具

代碼編輯工具

在windows下開發時,很多人都習慣使用source insight,但是source insight並沒有linux版本,而且自從3.5版本之後,就再也沒有更新了。

在linux下,同樣也有很多優秀的代碼編輯軟體,如Emacs、KVIM、Arachnophilia、Bluefish、Komodo Edit、NEdit、Gedit、Kate、Quanta Plus等等。這裡介紹兩款比較優秀的代碼編輯軟體,slickedit和eclipse。

slickedit

安裝步驟如下:

第一步:解壓se_14000202_linux_full.tar.gz:

tar -zxvf <nowiki>se_14000202_linux_full.tar.gz</nowiki>

第二步:進入解壓的目錄,運行安裝程序vsinst。這裡要加上sudo,增加讀寫訪問權限:

 sudo ./vsinst 

第三步:會彈出安裝信息,按住回車不放,直到彈出如下提示:

<nowiki>Do you agree to the above license terms?[yes or no] </nowiki>
輸入
 yes 

第四步:彈出如下信息:

<nowiki>Install directory [/opt/slickedit]: </nowiki>

這裡提示輸入安裝路徑,默認按回車即可

第五步:提示如下信息:

<nowiki>Directory /opt/slickedit/ does not exist. Create [Y]? </nowiki>

輸入Y,回車, 程序開始安裝。

第六步:安裝過程中會彈出一個SlickEdit License Manager的對話框,點退出

再彈出一個對話框,點
OK 

第七步:這時會提示:

INSTALLATION SUCCESSFULLY COMPLETED

1.Type "/opt/slickedit/bin/vs" to run SlickEdit.

2.You may want to add "/opt/slickedit/bin/" to your users' PATH.

第八步:退回原存放安裝文件的目錄,解壓破解文件

<nowiki>slickedit2009-14.0.2.2-linux-cracked.tar.gz:

tar -xvf slickedit2009-14.0.2.2-linux-cracked.tar.gz</nowiki>

將解壓出的破解文件VS拷備到/opt/slickedit/bin目錄下:

sudo cp vs /opt/slickedit/bin 

第九步:在/opt/slickedit/bin目錄下,執行./vs命令打開slickedit軟體,看看是否大功告成?以下是執行命令:

cd /

./opt/slickedit/bin/vs 

第十步:啟動方式

可以在 [終端] 中 ./vs 啟動 ,也可以自己創建一個起動器。

cd /opt/slickedit/bitmaps 

找到圖標文件,slickedit 2010下我選擇了vse_profile_256.bmp

$ sudo cp <nowiki>vse_profile_256.bmp /usr/share/icons </nowiki>

一般把圖標都放在/usr/share/icons下

$ cd /usr/share/applications 

$ sudo gedit <nowiki>slickedit.desktop </nowiki>

輸入如下語句:

<nowiki>[Desktop Entry]

Name=Slickedit

Comment=Slickedit

Exec=/opt/slickedit/bin/vs

Icon=/usr/share/icons/vse_profile_256.bmp

Terminal=false

Type=Application

Categories=Development;

StartupNotify=true </nowiki>

這時,在應用程式->編程中,就能找到slickedit的圖標了。

第十一步:如果你實在是用煩了這個軟體,那就幹掉他吧!進入/opt目錄,輸入如下指令:

rm -rf slickedit 

從此讓他滾得越遠越好!

附:slickedit行號顯示:

tool->options->Languages->Application Languages->C/C++->View->Line numbers 

eclipse

在ubuntu下安裝eclipse

第一步:進入如下網站下載eclipse:

http://www.eclipse.org/

選擇Eclipse IDE for Java Developers,Linux 32 Bit或Linux 64 Bit根據自己的機器而定;

第二步:將下載的文件解壓到用戶目錄:

cp <nowiki>eclipse-java-indigo-SR1-linux-gtk.tar.gz ~/

cd ~

tar xf eclipse-java-indigo-SR1-linux-gtk.tar.gz</nowiki>

第三步:創建啟動圖標:

sudo cp <nowiki>icon.xpm /usr/share/icons/eclipse.xpm

sudo gedit /usr/share/applications/eclipse.desktop </nowiki>

輸入如下語句:

<nowiki>[Desktop Entry]

Name=eclipse

Comment=eclipse

Exec=/home/lqm/eclipse/eclipse

Icon=/usr/share/icons/eclipse.xpm

Terminal=false

Type=Application

Categories=Development;

StartupNotify=true  </nowiki>

這時,在應用程式->編程中,就能找到eclipse圖標了,點擊即可啟動eclipse.

第四步:安裝CDT插件

安裝eclipse後,還不能建立C/C++工程,需安裝插件。進入官網下載:

http://www.eclipse.org/downloads/download.php?file=/tools/cdt

解壓下載的文件cdt-master-8.0.1.zip,將解壓出來的plugins和features目錄拷貝到eclipse安裝目錄,直接合併即可完成安裝。

使用eclipse新建一個工程

第一步:打開eclipse,首次打開時,會提示選擇工作路徑,建立自己的路徑,確定即可;

第二步:新建一個工程。點擊

 File->New->Project,

選擇

 C/C++->C Project,

點擊

 Next,

在Project name一欄輸入工程名稱,如xboot,在Project name下面有一個Use default location的選擇框,去掉前面的勾, 點擊

 Browse,

指向我們需要修改的文件的目錄。

在Project type中選擇一個工程類型,如Shared Library->Empty Project,在Toolchains中選擇Cross GCC,再點擊Next,在Select Configurations中選擇配置類型,如Release,點擊Finish完成。

第三步:這時在Project Explorer中有xboot的目錄,右擊xboot,點擊Import,找到General->File System,雙擊,彈出Import對話框,在From directory中找到需要加載的文件的目錄,點擊Select All,將把加載的目錄的所有類型文件添加到工程中,點擊Finish按鈕,提示是否覆蓋.cproject,點擊Yes To All,這時我們需要編輯的文件就已經全加載到工程中了。

adb工具

安裝adb工具

網上下載最新的SDK,下載地址為:

http://developer.android.com/sdk/index.html

對於WINDOWS系統,需下載installer_r12-windows.exe,如下圖所示:

Android-sdk-Window.png

如果PC機上沒有安裝JDK,會提示需要先安裝,需從java官網下載,如jdk-6u25-windows-i586.exe,不同的版本名稱不一樣。安裝完JDK後,再安裝SDK,默認會裝在C盤,建議安裝在D盤,這時adb工具在下面的路徑:

 D:\Program Files\Android\android-sdk\platform-tools 

修改系統環境變量,找到Path環境變量,在前面添加

 D:\Program Files\Android\android-sdk\platform-tools;

注意一定要加一個分號隔開。然後在WINDOWS的CMD命令行中輸入adb,將會彈出adb的一些參數。如果出現」adb不是內部或外部命令的錯誤」,表示系統沒有找到adb,將上面目錄中的adb.exe和AdbWinApi.dll拷貝到C:\WINDOWS\system32中即可。

查看設備的連接狀態

開發板上電,進入 setting,選擇「 developer options」,勾選「 USB debugging」進入WINDOWS下的CMD命令行,輸入如下命令驗證開發板是否連接:

adb  devices 

顯示下面內容表示成功連接:

Adb-device.png

進入adb shell

使用如下命令進入開發板終端:

adb  shell 

如下圖所示:

Adb-shell.png

輸入exit退回DOS操作界面。注意,有時候,執行adb devices命令時,會提示error: more than one device and emulator,很有可能是播放了USB設備造成的。這時已經無法再通過adb傳輸數據,解決的辦法很簡單,如果是使用windows,直接在進程中幹掉adb.exe,再啟動adb即可。

串口工具secureCRT

安裝secureCRT工具,在計算機設備管理器中找到COM口號,點擊「快速連接」,如下圖:

SecureCRT.png

協議選擇serial(我的設備是COM2),其他選項按照下圖所示選擇,右側三個流控制選項不能勾選!

SecureCRT-set.png

接下來用USB轉串口線接到開發板的調試串口與PC即可看到調試串口列印的log信息。

Usb-serial.png

Usb-serial-log.png

安裝android源碼包

安裝android源碼依賴包

說明:本文檔所有開發全部基於ubuntu14.04 64位系統,後續不再聲明。

使用如下命令安裝所需的軟體包(安裝前使用
sudo apt-get update 
獲得一下最近的軟體包的列表):
sudo apt-get install git-core gnupg sun-java6-jdk flex bison gperf libsdl-dev libwxgtk2.8-dev build-essential zip curl libncurses5-dev zlib1g-dev genromfs u-boot-tools libxml2-utils texinfo mercurial subversion whois 

很可能個別軟體包會安裝失敗,比如sun-java6-jdk,這時需要我們手動來安裝。下面是在ubuntu下手動安裝jdk1.6的詳細步驟:

第一步:在官網下載最新的jdk1.6的安裝源文件jdk-6u27-linux-i586.bin,下載地址為:

http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u27-oth-JPR

第二步:將下載的文件複製到/usr/lib/jvm目錄,執行如下命令安裝:

chmod +x <nowiki>jdk-6u27-linux-i586.bin

sudo ./jdk-6u27-linux-i586.bin </nowiki>

第三步:修改環境變量:

sudo gedit /etc/profile

在最末尾加入如下語句:

<nowiki>#set java environment

JAVA_HOME=/usr/lib/jvm/jdk1.6.0_27

export JRE_HOME=/usr/lib/jvm/jdk1.6.0_27/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH</nowiki>

第四步:重啟系統

第五步:查看當前java安裝版本:

root@lqm:/usr/lib/jvm# java -version

java version "1.6.0_27"

Java(TM) SE Runtime Environment (build 1.6.0_27-b07)

Java HotSpot(TM) Server VM (build 20.2-b06, mixed mode)

root@lqm:/usr/lib/jvm# 

到此,jdk1.6成功安裝。

注意,如果安裝了jdk1.5和1.6,很有可能查詢版本時,仍然是1.5的,執行如下指令:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_27/bin/java 255

sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_27/bin/javac 255 

這兩條指令用於創建符號連結。其中,/usr/bin/java 是不用改動的,為你的原有的jdk路徑,/usr/lib/jvm/jdk1.6.0_27/bin/java這個是jdk1.6的java路徑255是優先級。

再執行如下命令:

sudo update-alternatives --config java

sudo update-alternatives --config javac 

彈出如下對話框:

root@lqm:/usr/local# update-alternatives --config java

There are 2 choices for the alternative java (providing /usr/bin/java). 

  选择       路径                                    优先级  状态

<nowiki>------------------------------------------------------------

* 0            /usr/lib/jvm/jdk1.6.0_27/bin/java          255       自动模式

  1            /usr/lib/jvm/java-1.5.0-sun/jre/bin/java   53        手动模式

  2            /usr/lib/jvm/jdk1.6.0_27/bin/java          255       手动模式 </nowiki>

要維持當前值[*]請按回車鍵,或者鍵入選擇的編號。這裡選擇我們需要使用的jdk 版本,回車即可。

說明:jdk1.6也可以使用如下方法安裝:

手動修改下載源,指令如下:

cd /etc/apt

cp <nowiki>sources.list sources.list.bak

vim sources.list  </nowiki>

在最末行添加如下語句:

 deb <nowiki>http://archive.canonical.com/ubuntu maverick partner </nowiki>

然後更新源:

 apt-get update 

再安裝java6:

apt-get install sun-java6-jdk 

安裝交叉編譯工具鏈

我們已經將交叉編譯工具鏈集成到源碼包中,無需再手動安裝。交叉編譯工具鏈路徑:

Sourcetree/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8 

安裝64位系統必要的一些補丁包

 apt-get  install  lsb-core  libc6-dev-i386  g++-multilib  lib32z1-dev  lib32ncurses5-dev 

指定GCC交叉編譯器

在ubuntu系統上安裝最新的GCC交叉編譯器時,版本已經超過4.4了,使用如下指令可查詢GCC的版本:

gcc –version 

可能出現的界面如下:

terry@ubuntu-server:~$ gcc --version  

gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 

Copyright © 2011 Free Software Foundation, Inc. 

terry@ubuntu-server:~$ 

上面顯示4.6.3版本,默認我們給出的包,在4.6.3上編譯會提示一些錯誤,都是新的GCC引出的錯誤,網上都有解決辦法,如果不想修改這些錯誤,可將GCC版本降至4.4即可。解決辦法 :

sudo apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib 

裝完後,開始降級gcc ,這不會影響系統,僅僅是改個連結而已,不喜歡的話改回來即可。

cd /usr/bin

sudo mv gcc <nowiki>gcc.bk

sudo ln -s gcc-4.4 gcc

sudo mv g++ g++.bk

sudo ln -s g++-4.4 g++ </nowiki>

安裝android源碼包

從網盤中拷貝android源碼包,放在自己的用戶名目錄,光碟中存放著android4.4的源碼包,其名稱為x3288_lollipop_v10.tar.bz2。注意最好不要放在文件系統的根目錄,這樣會出現管理權限問題。

示例方法:在用戶權限下執行如下命令:

cp  yourcdromdir/source/ <nowiki>x3288_lollipop_v10.tar.bz2  ~/

cd 

tar  xvf  x3288_lollipop_v10.tar.bz2 </nowiki>

這時,整個android文件系統全部都放在了當前解壓的目錄中。至此,android源碼包安裝完成。

說明:源碼包名稱可能會因發布日期等有所不同,具體以網盤中實際名稱為準。

android腳本分析配置

源碼編譯腳本分析

說明:各種版本的源碼編譯腳本大同小異,原理完全相同,具體腳本以相關源碼包中的為準,這裡僅用來分析其實現機制。

編譯腳本mk內容及注釋如下:

<nowiki>#!/bin/bash

#

# Description    : Android Build Script.

# Authors    : lqm www.9tripod.com

# Version    : 1.0

# Notes        : None

#



#

# JAVA PATH

#

export PATH=/usr/lib/jvm/jdk1.6.0_45/bin:$PATH



#

# Some Directories

#

BS_DIR_TOP=$(cd `dirname $0` ; pwd)

BS_DIR_RELEASE=${BS_DIR_TOP}/out/release

BS_DIR_UBOOT=${BS_DIR_TOP}/uboot

BS_DIR_KERNEL=${BS_DIR_TOP}/kernel



#

# Target Config

#指定uboot,内核以及文件系统配置文件

BS_CONFIG_BOOTLOADER_UBOOT=x3288_config

BS_CONFIG_KERNEL=x3288_defconfig

BS_CONFIG_FILESYSTEM=PRODUCT-rk3288-eng



# 在编译前,事先设置一些编译环境,保证准确可靠的编译

setup_environment()

{

    LANG=C

    cd ${BS_DIR_TOP};



    PATH=${BS_DIR_TOP}/out/host/linux-x86/bin:$PATH;



    mkdir -p ${BS_DIR_RELEASE} || return 1

}



# 编译 uboot,编译完后,自动将 bootloader.bin 拷贝到 out/release 目录

build_bootloader_uboot()

{

    # Compiler uboot

    cd ${BS_DIR_UBOOT} || return 1

    make distclean || return 1

    make ${BS_CONFIG_BOOTLOADER_UBOOT} || return 1

    make -j${threads} || return 1



    # Copy bootloader to release directory

    cp -v ${BS_DIR_UBOOT}/RK3288UbootLoader_V2.19.09.bin ${BS_DIR_RELEASE}



    echo "^_^ uboot path: ${BS_DIR_RELEASE}/RK3288UbootLoader_V2.19.09.bin"

    return 0

}



# 编译内核,编译完成后,会自动将内核映像 kernel.img & resource.img拷贝到 out/release 目#录

build_kernel()

{

    #export PATH=${BS_DIR_UBOOT}/tools:$PATH 

    # Compiler kernel

    cd ${BS_DIR_KERNEL} || return 1

    make ${BS_CONFIG_KERNEL} return 1

    make x3288.img -j${threads} || return 1



    # Copy kernel.img & resource.img to release directory

    cp -v ${BS_DIR_KERNEL}/kernel.img ${BS_DIR_RELEASE}

    cp -v ${BS_DIR_KERNEL}/resource.img ${BS_DIR_RELEASE}



    return 0

}

# 编译 android 文件系统

build_system()

{

    cd ${BS_DIR_TOP} || return 1

    source build/envsetup.sh || return 1

    make -j${threads} ${BS_CONFIG_FILESYSTEM} || return 1



    # create boot.img

    echo -n "create boot.img without kernel... "

    [ -d $OUT/root ] && \

    mkbootfs $OUT/root | minigzip > $OUT/ramdisk.img && \

        truncate -s "%4" $OUT/ramdisk.img && \

    rkst/mkkrnlimg $OUT/ramdisk.img $BS_DIR_RELEASE/boot.img >/dev/null

    echo "done."



    # create recovery.img

    echo -n "create recovery.img with kernel and with out resource... "

    [ -d $OUT/recovery/root ] && \

    mkbootfs $OUT/recovery/root | minigzip > $OUT/ramdisk-recovery.img && \

        truncate -s "%4" $OUT/ramdisk-recovery.img && \

    mkbootimg --kernel $OUT/kernel --ramdisk $OUT/ramdisk-recovery.img --output $OUT/recovery.img && \

    cp -a $OUT/recovery.img $BS_DIR_RELEASE/

    echo "done."



    # create misc.img

    echo -n "create misc.img.... "

    cp -a rkst/Image/misc.img $BS_DIR_RELEASE/misc.img

    cp -a rkst/Image/pcba_small_misc.img $BS_DIR_RELEASE/pcba_small_misc.img

    cp -a rkst/Image/pcba_whole_misc.img $BS_DIR_RELEASE/pcba_whole_misc.img

    echo "done."



    # create system.img

    if [ -d $OUT/system ]

    then

        echo -n "create system.img... "

        system_size=`ls -l $OUT/system.img | awk '{print $5;}'`

        [ $system_size -gt "0" ] || { echo "Please make first!!!" && exit 1; }

        MAKE_EXT4FS_ARGS=" -L system -S $OUT/root/file_contexts -a system $BS_DIR_RELEASE/system.img $OUT/system"

        ok=0

        while [ "$ok" = "0" ]; do

            make_ext4fs -l $system_size $MAKE_EXT4FS_ARGS >/dev/null 2>&1 &&

            tune2fs -c -1 -i 0 $BS_DIR_RELEASE/system.img >/dev/null 2>&1 &&

            ok=1 || system_size=$(($system_size + 5242880))

        done

        e2fsck -fyD $BS_DIR_RELEASE/system.img >/dev/null 2>&1 || true

        echo "done."

    fi



    chmod a+r -R $BS_DIR_RELEASE/



    return 0

}



threads=1

uboot=no

kernel=no

system=no



if [ -z $1 ]; then

    uboot=yes

    kernel=yes

    system=yes

fi



while [ "$1" ]; do

    case "$1" in

    -j=*)

        x=$1

        threads=${x#-j=}

        ;;

    -u|--uboot)

        uboot=yes

        ;;

    -k|--kernel)

            kernel=yes

        ;;

    -s|--system)

        system=yes

        ;;

    -a|--all)

        uboot=yes

        kernel=yes

        system=yes

        ;;

    -h|--help)

        cat >&2 <<EOF

Usage: build.sh [OPTION]

Build script for compile the source of telechips project.



  -j=n                 using n threads when building source project (example: -j=16)

  -u, --uboot          build bootloader uboot from source

  -k, --kernel         build kernel from source

  -s, --system         build android file system from source

  -a, --all            build all, include anything

  -h, --help           display this help and exit

EOF

        exit 0

        ;;

    *)

        echo "build.sh: Unrecognised option $1" >&2

        exit 1

        ;;

    esac

    shift

done



setup_environment || exit 1



if [ "${uboot}" = yes ]; then

    build_bootloader_uboot || exit 1

fi



if [ "${kernel}" = yes ]; then

    build_kernel || exit 1

fi



if [ "${system}" = yes ]; then

    build_system || exit 1

fi



exit 0  </nowiki>


配置使用MIPI屏

在kernel/arch/arm/boot/dts目錄下存放了多個已經調試好的液晶屏的配置文件,7寸RGB屏的配置文件為

 x3288_lcd070hdr.dtsi,

7寸MIPI屏的配置文件為

 x3288_lcd070hdm.dtsi。

 kernel/arch/arm/boot/dts/x3288.dts

中選擇配置使用的液晶模組即可,如需要使用7寸MIPI屏,示例代碼如下:

//#include "<nowiki>x3288_lcd070hdr.dtsi"

#include "x3288_lcd070hdm.dtsi" </nowiki>

編譯android源碼包

說明:編譯映像時一定要使用普通權限編譯。編譯完成後,生成的映像文件RK3288UbootLoader_V2.19.09.bin,boot.img, system.img, kernel.img, misc.img, recovery.img, resource.img,update.img。

編譯uboot

在android源碼目錄下執行如下命令編譯uboot,編譯完成後映像文件RK3288UbootLoader_V2.30.10.bin(因版本不同,名稱不一定相同)會釋放到out/release目錄。

./mk     -u 

編譯android內核

在android源碼目錄下執行如下命令編譯android內核,編譯完成後映像文件kernel.img、resource.img會釋放到out/release目錄。

./mk     -k 

編譯android文件系統

在android源碼目錄下執行如下命令編譯android映像文件,編譯完成後映像文件會釋放到out/release目錄。

./mk     -s 

編譯完文件系統,在out/release目錄下會生成如下文件:

  • RK3288UbootLoader_V2.19.09.bin: uboot映像文件
  • Kernel.img:內核映像
  • Resource.img:資源映像,內含開機圖片和內核的設備樹信息。
  • Boot.img: Android的初始文件映像,負責初始化並加載system分區。
  • System.img:android的system分區映像,ext4文件格式系統。
  • Recovery.img:急救模式映像。
  • Misc.img:分區映像,負責啟動模式切換和急救模式的參數傳遞。
  • update.img:整個升級文件的單一映像,包括了uboot,內核,文件系統等。

查看編譯幫助

執行如下指令可查詢mk腳本使用方法:

./mk  -h 


燒寫android映像文件

Windows系統映像燒寫

RKTool驅動安裝

解壓RKTools.rar,工具路徑:
SDK\RKTools\windows\Release_DriverAssitant
打開「DriverInstall.exe」,點擊「驅動安裝」,提示安裝驅動成功即可。

Rktools-driver.png

Rktool-driver-ok.png

注意事項:

1.目前支持的作業系統包括:XP,Win7_32,Win7_64,Win8_32,Win8_64。

2.XP系統在驅動安裝完後,若還提示「發現新設備」, 安裝驅動時選擇「自動安裝」。

3.若之前已經安裝過老版本驅動,請先點擊「驅動卸載」後再進行「驅動安裝」。

燒錄方法一:單個升級固件update.img

生成統一固件update.img

我們已經在mk腳本中集成了生成統一固件的方法,在編譯android文件系統時(./mk -s),會自動生成update.img,並釋放到out/release目錄。

燒錄固件update.img

打開

 RKTools\windows\AndroidTool_Release_v2.3\AndroidTool_Release_v2.3\AndroidTool.exe

選擇「升級固件」選項卡,點擊「固件」,在彈出窗口中選擇已經生成的update.img 文件,如下圖所示。

Update-fireware.png

Update-fireware1.png

工具配置好後,連接開發板(如下圖):

按下RECOVERY鍵,然後插上microUSB線與5V DC電源線 Update-fireware2.png

燒錄工具界面會提示發現一個LOADER設備,然後點擊升級,即可開始升級過程(註:如果提示發現一個ADB設備,點擊切換按鈕切換成LOADER設備即可)。

Update-fireware3.png

Update-fireware4.png

上圖為升級完成截圖。

燒錄方法二:多設備升級固件update.img

該工具適合用戶批量刷機,可以同時給多台開發板刷機。

打開路徑:

 SDK\RKTools\windows\FactoryTool_v1.33

下的「FactoryTool.exe」,點擊「固件」選擇update.img,勾選「升級」,點擊「啟動」,如下圖所示:

步驟1:點擊固件,選擇update.img;

步驟2:點擊啟動(選擇升級按鈕);

步驟3:連接開發板USB、DC電源,按下recovery鍵,對應USB口發現設備,並實現自動升級;然後重複步驟3即可同時升級第二台、第三台設備,升級成功或者失敗的設備會在兩邊的列表中列出,移除成功或者失敗的設備後可以繼續連接需要升級的設備。

Update-fireware-multi-device.png

Linux系統燒寫映像

生成固件update.img

我們已經在mk腳本中集成了生成統一固件的方法,在編譯android文件系統時(./mk -s),會自動生成update.img,並釋放到out/release目錄。

燒錄固件update.img

工具路徑:

 RKTools\linux\Linux_Upgrade_Tool_v1.2

在升級之前將update.img拷貝到upgrade_tool相同目錄下,運行upgrade_tool(需要sudo)

work@ubuntu:~/3288/Linux_Upgrade_Tool_v1.2/cp rockdev<nowiki>/update.img .

work@ubuntu:~/3288/Linux_Upgrade_Tool_v1.2$ sudo ./upgrade_tool  </nowiki>

執行結果如下圖,發現設備列表,輸入要升級的DevNo(設備號)選擇設備 DevNo.png

選擇設備後彈出工具使用菜單如下圖,左側是功能描述,右側是命令語法,升級相關操作都在upgrade command列表下,忘記命令語法可以輸入H進行查看,清屏輸入CS,退出按Q。

DevNo1.png

  • CD命令: 選擇設備, 當執行的命令有包含設備重啟操作時, 需重新選擇設備,當改變操作設備時需重新選擇
  • SD命令:msc切換到rockusb升級模式。 當切換執行成功後, 需要重新選擇設備
  • UF命令:升級完整update.img固件,當執行成功後需要重新選擇設備
  • UL命令:升級loader功能,當執行成功後需要重新選擇設備
  • DI命令:下載單獨image鏡像到指定扇區,例如升級kernel.img或者system.img都可以直接使用此功能.例如下載kernel.img: DI -k kernel.img parameter //如果之前通過DI下載過parameter,則再下載kernel.img時就可以不用指定最後的parameter參數
  • DB命令:下載boot,在maskrom狀態下,可以通過此功能, 讓maskrom設備進行Rockusb協議通訊
  • EF命令:擦除整個nandflash
  • LF命令:低格保留塊後面區域,只有在loader模式下使用

執行uf update.img 開始更新固件,下圖為更新完成截圖。

Rockusb>uf  <nowiki>update.img </nowiki>

DevNo2.png

備註:也可通過配置config.ini文件配置升級映像文件,只需輸入UF即可升級,請用戶自行嘗試。

使用upgrade_tool指令燒寫映像

上一節我們介紹了通過upgrade_tool燒寫統一固件update.img的方法,熟悉三星平台的開發者會發現,這種方法並不是很高效,真正操作起來,它遠沒有fastboot工具來的迅速。其實,upgrade_tool工具同樣支持類似於fastboot的燒寫方式。

為了燒寫方便,在mk腳本中,默認在編譯系統時,已經將燒寫工具upgrade_tool拷貝到out/release目錄了。

第一步:打開串口終端,並打開minicom,用於適時監控串口調試信息;

第二步:按住RECOVERY鍵,連接USB OTG線和電源線,這時uboot列印信息將會提示已經進入USB下載模式。如果接通電源後沒來得及按住RECOVERY鍵,在按住RECOVERY鍵的同時,再按下復位鍵即可。注意,使用

第二步:打開第二個串口終端,進入out/release目錄;

第三步:在out/release目錄下敲擊如下指令,燒寫相應的映像。


sudo upgrade_tool  di  –k  <nowiki>kernel.img(烧写内核)

sudo upgrade_tool  di  –s  system.img(烧写文件系统)

sudo upgrade_tool  di  resource  resource.img(烧写资源文件)

sudo upgrade_tool  di  –r recovery.img(烧写急救文件)

sudo upgrade_tool  ul  RK3288UbootLoader_V2.30.10.bin(烧写bootloader)

sudo upgrade_tool  uf  update.img(烧写统一固件) </nowiki>

使用Rkflashkit燒寫映像

rkflashkit 有圖形界面,後加了命令行支持,更是好用。


work@ubuntu:~/rktool$ sudo apt-get install build-essential fakeroot

work@ubuntu:~/rktool$ git clone <nowiki>https://github.com/linuxerwang/rkflashkit

work@ubuntu:~/rktool$ cd rkflashkit

work@ubuntu:~/rktool$ ./waf debian

work@ubuntu:~/rktool$ sudo apt-get install python-gtk2

work@ubuntu:~/rktool$ sudo dpkg -i rkflashkit_0.1.4_all.deb  </nowiki>

注意:rkflashkit_0.1.4_all.deb會因版本更新,版本數字可能會有所變化,如果執行失敗,執行ls命令查看下即可。

work@ubuntu:~/rktool/$ sudo rkflashkit 

如下是圖形界面,在Devices下選擇設備,選擇要燒寫的分區和對應的映像文件,點擊Flash image即可。

Rkflashkit.png

該工具也支持命令行,使用help命令查看使用方法

work@ubuntu:~/rktool/rkflashkit$ rkflashkit --help

<nowiki>Usage: <cmd> [args] [<cmd> [args]...] 



part                              List partition

flash @<PARTITION> <IMAGE FILE>   Flash partition with image file

cmp @<PARTITION> <IMAGE FILE>     Compare partition with image file

backup @<PARTITION> <IMAGE FILE>  Backup partition to image file

erase  @<PARTITION>               Erase partition

reboot                            Reboot device



For example, flash device with boot.img and kernel.img, then reboot:



  sudo rkflashkit flash @boot boot.img @kernel.img kernel.img reboot

work@ubuntu:~/rktool/rkflashkit$  </nowiki>

使用TF卡升級固件

功能說明

SD Card Boot功能是主控在上電時,優先從SD卡上查找啟動代碼,然後加載引導,從而實現特定功能。目前SD Card Boot已經實現兩個功能:SD卡升級和SD卡運行。

SD卡升級功能,將SD卡啟動代碼寫到SD卡的保留區,然後將固件拷貝到SD卡可見分區上,主控從SD卡啟動時,SD卡啟動代碼和升級代碼將固件升級到本地主存儲中,並支持PCBA測試和Demo文件的拷貝。可以完全做到脫離PC機進行固件升級,提高生產效率。

SD卡運行功能,將固件升級到SD卡保留區中,把SD卡當作主存儲使用。主控從SD 卡啟動時,固件已經存放在SD卡上,有沒有本地主存儲都可以正常工作。目前主要應用是板卡廠做PCBA測試,而不會破壞flash數據。

軟體說明

工具目錄有如下文件:

SD_Fireware_Tool.png

SD_Firmware_Tool.exe:制卡工具

Config.ini:配置文件

SDBoot.bin:SDRK2926、RK2928、RK3166和RK3188使用SDBoot.bin支持SD卡升級和啟動功能;RK3288使用RK3288Loader_uboot_V2.16.bin及以後版本。

製作前軟體配置

編輯config.ini配置文件以下項目設置為TRUE

 * #当值为TRUE时,新卡格式适用3288项目
 * USE_FW_LOADER=TRUE

工具界面如下:

SD_Fireware_Tool-interface.png

製作

注意:製作啟動卡會格式化SD卡,用戶需要注意備份重要數據,防止誤刪。

第一步,選擇對應的可移動磁碟設備;

第二步,選擇功能模式:固件升級、PCBA測試、SD啟動;

 * 默认会勾选“固件升级”,即只升级固件。
 * 如果在升级固件前需要做 “PCBA 测试”,则同时勾选“固件升级”、“PCBA测试”。
 * 如果不升级固件,只需要测试PCBA,则单选“PCBA测试”,不选择“固件升级”。
 * “SD启动”会把固件烧写到SD中,所有分区都分配在SD卡上,运行时不会修改内部存储的数据(相当于SD卡做主存储设备)。

注意:SD卡運行模式,對kernel的編譯有要求,需要把kernel的SD卡驅動配置去掉,不參與編譯。

SD-runMode.png

修改為:

SD-runMode-change.png

第三步,選擇對應平台的update.img固件;

第四步(可選),如果需要拷貝demo文件到用戶盤根目錄,點擊選擇Demo按鈕,選擇需要拷貝的文件目錄。選擇的目錄下所有文件會拷貝到SD根目錄下的Demo目錄中,在SD引導固件升級後,Demo目錄下的文件會拷貝到樣機用戶盤的根目錄下。

第五步,點擊開始創建即可。













android開發指南

命令終端

將串口連接開發板上調試串口,進入android系統後,會自動進入android終端,如下圖所示:

Command.png

播放mp3

android命令行播放mp3

在android的在命令行下,可以使用強大的am指令做很多事情。在android終端輸入am,正常情況下會有如下提示信息:

# am

usage: am [subcommand] [options]



    start an Activity: am start [-D] [-W] <INTENT>

        -D: enable debugging

        -W: wait for launch to complete



    start a Service: am startservice <INTENT>



    send a broadcast Intent: am broadcast <INTENT>



    start an Instrumentation: am instrument [flags] <COMPONENT>

        -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)

        -e <NAME><VALUE>: set argument <NAME> to <VALUE>

        -p <FILE>: write profiling data to <FILE>

        -w: wait for instrumentation to finish before returning



    start profiling: am profile <PROCESS> start <FILE>

    stop profiling: am profile <PROCESS> stop



<INTENT> specifications include these flags:

        [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]

        [-c <CATEGORY> [-c <CATEGORY>] ...]

        [-e|--es <EXTRA_KEY><EXTRA_STRING_VALUE> ...]

        [--esn <EXTRA_KEY> ...]

        [--ez <EXTRA_KEY><EXTRA_BOOLEAN_VALUE> ...]

        [-e|--ei <EXTRA_KEY><EXTRA_INT_VALUE> ...]

        [-n <COMPONENT>] [-f <FLAGS>]

        [--grant-read-uri-permission] [--grant-write-uri-permission]

        [--debug-log-resolution]

        [--activity-brought-to-front] [--activity-clear-top]

        [--activity-clear-when-task-reset] [--activity-exclude-from-recents]

        [--activity-launched-from-history] [--activity-multiple-task]

        [--activity-no-animation] [--activity-no-history]

        [--activity-no-user-action] [--activity-previous-is-top]

        [--activity-reorder-to-front] [--activity-reset-task-if-needed]

        [--activity-single-top]

        [--receiver-registered-only] [--receiver-replace-pending]

        [<URI>] </nowiki>

啟動的方法為:

<nowiki># am start -n 包(package)名/包名.活动(activity)名称 </nowiki>

啟動的方法可以從每個應用的AndroidManifest.xml的文件中得到,以計算器(calculator)為例,

<?xml version="1.0" encoding=""?>



<manifestxmlns:android="<nowiki>http://schemas.android.com/apk/res/android"



package="com.android.calculator2">



<applicationandroid:label="@string/app_name"android:icon="@drawable/icon">



<activity android:name="Calculator"



android:theme="@android:style/Theme.Black">



<intent-filter>



<action android:name="android.intent.action.MAIN" />



<categoryandroid:name="android.intent.category.LAUNCHER"/>



</intent-filter>



</activity>



</application>



</manifest> </nowiki>

由此計算器(calculator)的啟動方法為:

<nowiki># am start-ncom.android.calculator2/com.android.calculator2.Calculator</nowiki>

Music的啟動方法為:

<nowiki># am start-ncom.android.music/com.android.music.MusicBrowserActivity</nowiki>

這時,螢幕上會有music的播放列表,但是並沒有播放。如果需要播放,得執行下面的指令:

am start -n <nowiki>com.android.music/com.android.music.MediaPlaybackActivity -d /mnt/extsd/liangliangxianwang.mp3 </nowiki>

使用android默認音頻播放器

確保外置的SD卡中存在mp3文件,點擊音樂,播放器會自動識別音頻文件,如下圖:

Mp3.png

點擊相應的音頻文件即可播放。播放時界面如下:

Mp3-1.png

播放視頻

  android自帶視頻處理功能,在android應用界面顯示為圖庫。點擊圖庫按鈕,會在外置SD卡中自動尋找能夠識別的視頻和圖片文件,如下圖:

Mp4.png

點擊中間的按鈕:

Mp4-1.png

上圖中,帶有播放符號的即為視頻文件,不帶的為圖片文件。點擊帶播放符號的文件:

Mp4-2.png

再點擊播放按鈕:

Mp4-3.png

X3288 android5.1系統還帶一款4k視頻播放器,播放器會自動關聯視頻文件,點擊需要播放的視頻即可播放

Mp4-4.png


Mp4-5.png

如果遇到圖庫無法支持的視頻文件,可以採用第三方播放器如RockPlayer進行播放,如網絡上最為流行的rmvb和rm文件。這時,機器儼然成為了一個具有支持rm/rmvb等格式視頻的超強mp4了。如對螢幕尺寸有更高要求,可以使用VGA或HDMI方式,直接將視頻文件顯示到顯示器或電視機上。

使用RockPlayer播放視頻時,會彈出一個硬解和軟解的對話框,如果屬於3288硬解碼的視頻文件,選擇硬解模式,否則選擇軟解模式。如播放rm/rmvb文件,選擇軟解模式才能播放,如下圖所示:

Mp4-6.png

圖片瀏覽

瀏覽圖片時,同樣使用上面的圖庫瀏覽。點擊圖庫圖標,點擊要瀏覽的圖片即可瀏覽。滑動可以瀏覽下一張圖片,如下圖所示:

Image-view.png

語言設置

點擊設置中的語言和輸入法一欄,再點擊選擇語言,會彈出多種語言,選擇需要的語言即可,如下圖:

Language.png

使用WIFI上網

X3288開發板自帶wifi/BT二合一模組,無需額外USBwifi即可無線上網。啟動開發板,點擊設置,在Wi-Fi一欄的方框中有個關閉按鈕,將他撥到右邊,即打開狀態,如下圖:

Wifi-default.png

再點擊Wi-Fi一欄,進入wifi界面,找到屬於自己的無線網絡信號並點擊,輸入密碼後,點擊連接即可上網。

Wifi-default1.png

使用藍牙傳輸數據

x3288開發板支持AP6335晶片的WIFI/BT二合一模塊。點擊設置->藍牙,將藍牙開關打開,如下圖所示:

Blutooth.png

點擊藍牙,進入設置界面,找到一個支持藍牙設備的安卓手機,並打開藍牙,且可被發現。在x3288開發板的藍牙設置界面的右上腳點擊搜索設備,在可用設備一欄中將會顯示出所有找到的藍牙設備。找到需要匹配的藍牙設備並點擊,在開發板上彈出配對請求:

Blutooth1.png

點擊配對,同時,在手機端也會彈出類似的畫面,也點擊配對即可。成功配對後的界面如下:

Blutooth2.png

這時,配對的設備間就可以通過藍牙共享文件了。點擊開發板的圖庫,找到一張圖片並選中: Blutooth3.png

點擊右上腳的分享按鈕,選擇藍牙,彈出如下界面:

Blutooth4.png

選擇配對成功的藍牙設備,這時在配對設備上將會彈出一個接收文件的對話框,點擊接收即可。

使用藍牙播放音樂

x3288開發板可支持通過藍牙連接藍牙音箱,並播放音樂。準備一個藍牙音箱,並切換到藍牙模式,進入開發板的藍牙界面並打開,點擊右上腳的搜索設備,將會找到藍牙音箱,下圖中的GS805即是藍牙音箱:

Blutooth-mp3.png

點擊GS805,稍等幾秒,將會配對成功,無需任何確認動作。這時,隨意在開發板上播放音視頻,音樂將會通過藍牙音箱播放出來。

使用USB滑鼠鍵盤

啟動開發板,將USB滑鼠或者USB無線滑鼠鍵盤接到USB HOST接口,即可使用滑鼠鍵盤操作android界面了。

APK應用安裝

Android系統下有很多種APK的安裝方法,這裡介紹四種。

使用SD卡安裝

將拷貝有APK安裝包的SD卡插到開發板,打開開發板的「文件管理」應用程式,界面如下:

SD-APK.png

可以看到,安裝包一欄找到了3個安裝包。點擊進去,會列出安裝列表:

點擊要安裝的APK文件:

SD-APK1.png

依次點擊下一步,直到安裝完成即可。

使用ApkInstaller安裝

使用ApkInstaller安裝APK,需要將開發板與PC機同步起來。

第一步:啟動開發板,並進入android系統。

第二步:將光碟中的ApkInstaller.rar解壓到PC機的任意目錄,如D盤;

第三步:雙擊ApkInstaller.exe應用程式,如下圖所示:

Apkinstaller.png

在解壓目錄下默認有一個名為mVideoPlayer.apk的APK文件,安裝軟體已經將它列出來了。我們需要將安裝的APK軟體放在該目錄。

第四步:點擊安裝->開始安裝,或者點擊快捷方式http://x.9tripod.com/wiki/zh/images/b/b0/Triangle-Shortcuts.png開始安裝。安裝完成後,界面上會有相應提示。

說明:此方法適合批量安裝APK文件。

使用adb工具安裝

在上一章節,ApkInstaller.rar的解壓目錄中已經存在有adb工具了,我們在命令行下進入該目錄,執行如下指令安裝APK:

adb  install  *.apk 

正常安裝的界面如下:

Adb-apk.png

在線安裝

用戶可以通過91助手,百度應用中心、360手機助手等第三方軟體直接在線安裝,這裡就不詳細說明了。

螢幕抓圖

使用eclipse抓圖

android有很多截圖工具,但是很多都需要root權限,在平時做開發時,我們可以使用eclipse自帶的插件進行截圖,非常的方便。

啟動開發板,並進入android系統。使用USB延長線將x3288開發板與PC機連接,第一次連接時會提示需要安裝軟體,如下圖:

Android-driver1.png

選擇否,點下一步:

Android-driver2.png

選擇自動安裝軟體,點下一步,直至安裝完成。

Android-driver3.png

安裝完成之後,打開eclipse軟體,如果沒有安裝,需先安裝該軟體。然後點擊Window->Show view->Devices,如下圖:

Eclipse-device.png

確保機器處於開機狀態,這時Devices會找到機器的設備號,如下圖:

Eclipse-device1.png

點擊上圖右上腳的攝相頭標誌,就會彈出要保存的圖像,點擊save保存即可,如下圖所示:

Camera-save.png

使用360手機助手抓圖

在PC機上安裝360手機助手手,啟動開發板,通過USB延長線將開發板連接到PC機的USB口,打開360手機助手,360手機助手將會找到x3288開發板。如果找不到,將USB線撥掉重插,在開發板上會彈出一個授權界面,點擊確認即可。正常連接後的360手機助手界面如下:

360-screenshot.png

點擊左下腳的截屏按鈕即可。

掛載TF卡

系統啟動後,會自動掛載右側卡槽中的TF卡到/mnt/external_sd/目錄,如下圖所示:

Mount-tf.png


掛載U盤

啟動開發板,並進入android系統。插入U盤後,系統會將U盤自動掛載到/mnt/usb_storage*(*表示0到4)目錄。

計算器

點擊android應用的計算器即可使用計算器功能,如下圖所示:

Counter.png

輸入法

推薦安裝訊飛輸入法,測試界面如下:

Xunfei-input.png

瀏覽器

android默認自帶一個瀏覽器,該瀏覽器功能已經非常完善了,如果用戶仍然覺得不夠要求,可以下載安裝第三方瀏覽器,如UC瀏覽器等。

Brower.png

螢幕旋轉

重力傳感器已經集成到開發板上,將開發板移動到四周任一方向,界面會隨之改變。當然並不是所有應用程式都會隨之改變,有部分應用程式不支持螢幕旋轉。旋轉後示例圖片如下:

Screen-rotation.png

Screen-rotation1.png

時間設置

點擊android應用中的設置,可以看到有日期和時間一欄,點擊進去,選擇相應的欄目設置即可。

Date-set.png

拍照攝相

點擊android應用中的相機,會進入圖像預覽模式。點擊右下腳的拍照按鈕即可拍照,如下圖所示:

Shot-picture.png

右下腳可以切換拍照和錄像功能。

使用有線乙太網上網

將可以正常上網的網線連接到開發板的網口座上,網口座的指示燈會正常閃爍,正常上網界面如下:

Wired-internet.png

優酷

將優酷的APK軟體安裝到開發板,連接網線就可以看視頻了。

Youku.png

播放電視

安裝龍龍直播,泰捷視頻等網絡播放器,插上網線即可播放。

Live-tv.png

使用遙控器操作開發板

默認x3288開發板硬體支持紅外遙控器,我們可以通過遙控器操作android界面,在泰捷視頻等電視界面通過遙控器操作,開發板就完全變成了一個機頂盒。

1080P視頻播放

3288相對4412,支持更多種全高清視頻的硬解碼,可以流暢的播放這些格式的1080P視頻文件。

通常情況下,使用RockPlayer或者自帶的播放器都可播放。如果遇到自帶播放器無法播放,可選擇RockPlayer。播放界面如下:

RockPlayer.png

QQ

使用91助手或從QQ官網下載針對android版本的QQ軟體,安裝到x3288開發板,即可使用QQ了。

Qq-login.png

Qq-login1.png

QQ鬥地主

用戶可自己下載安裝測試。

憤怒的小鳥

用戶可自己下載安裝測試。

賽車

用戶可自己下載安裝測試。

VGA顯示

注意,x3288開發板本身不帶VGA電路,如需使用VGA,需另加VGA轉接板。

HDMI顯示

HDMI顯示支持直接將LCD上顯示的視頻還原到帶有HDMI接口的電視機上,支持1080P高清視頻,兼容720P,576P以及480P的視頻。同時還將音頻也一併傳送到電視機上。

HDMIshow.jpg

開關機

x3288開發板使用了PMU進行電源管理。當外接上5V的電源適配器後,x3288開發板將會被自動點亮,進入系統後,長按開機鍵,會彈出一個選擇對話框,點擊關機按鈕將會彈出確認關機的對話框,點擊確認即可關機。

ON-OFF.png


休眠喚醒

進入android文件系統後,輕按開關機鍵,螢幕將會熄滅,然後進入深度休眠狀態。可以通過串口查看進入休眠的列印信息。再次輕按開關機鍵,開發板將會喚醒。

Android測試程序

我們在x4418,x6818開發板上開發了強大的安卓測試軟體,基本上可以測試開發板的所有硬體功能,它在產品量產,程序開發上有很大的參考價值。在x3288開發平台上,我們將儘快提供。在APP界面點擊安卓測試,即可進入測試界面,使用觸控螢幕左右滑動,或者用滑鼠滑動可切換測試的硬體。

液晶屏測試

Lcd-test.png

在液晶屏測試界面,點擊中間的任意純色位置,會有不同的顏色變化,我們可以觀察LCD是否有丟色,壞點等。

觸控螢幕測試

Touch-test.png

在觸控螢幕測試界面,點擊開始測試,即可在螢幕上任意手寫,在批量生產時,我們通常通過畫對角線測試觸摸電路是否正常。

發光二極體測試

Led-test.png

點擊圖片上任意的燈,為紅色時,對應開發板上的LED燈亮,為灰色時,對應LED燈滅。

蜂鳴器測試

Beep-test.png

按住開始測試鍵,蜂鳴器會鳴叫,鬆開開始測試鍵,蜂鳴器停止鳴叫。

背光測試

Backlight-test.png

划動中間的圓圈,背光亮度會隨之發生變化。

按鍵測試

Key-test.png

按下或抬起開發板上四個獨立按鍵的任意一個,界面上將會提示對應的按鍵的按下和抬起動作。

電池測試

Battery-test.png

該界面反應了接在開發板上的電池電量信息。

數模轉換測試

Adc-test.png

監測四路ADC的電壓。我們可以通過調節開發板上的精密可調電位器,觀察上面對應通道的電壓是否變化。

重力傳感器測試

Gsensor-test.png

旋轉開發板時,上面的X,Y,Z軸的值會隨之發生變化。

音頻測試

Audio-test.png

點擊開始測試,會聽到有清脆的聲音出來。

攝像頭測試

Camera-test.png

裝上攝相頭,點擊開始測試,會看到攝像頭抓到的預覽界面顯示出來。

無線網絡測試

Wireless-test.png

使用WIFI連上無線網絡後,無線網絡測試界面會搜索到附近的網絡並列出來。

網絡連接測試

Internet-test.png

當有線或無線網絡正常連接時,網絡連接測試界面可以瀏覽網頁。

串口測試

TtyAMA-test.png

將需要測試的串口的TXD和RXD短路,再點擊開始測試,界面上會提示對應串口會自發自收0123456789。如果不能自發自收,說明對應的串口硬體有問題。

外部存儲器測試

Sdcard-test.png

將TF卡插到開發板上,點擊開始測試,界面上會顯示TF卡的相關信息。

優盤測試

Udisk-test.png

將U盤插到開發板上,點擊開始測試,界面上會顯示U盤的相關信息。


android內核驅動

G-sensor驅動

路徑:
kernel/drivers/input/sensors/accel/mma8452.c

      hardware/rockchip/sensor/st 

文件:mma8452.c及st目录

電容觸控螢幕驅動

路径:kernel/drivers/input/touchscreen/
源码:gslX680.c

液晶屏驅動

路径:kernel/drivers/video/rockchip/lcdc/
源码:rk3288_lcdc.c

按鍵驅動

路径:kernel/drivers/input/keyboard
源码:rk_keys.c

WIFI/BT模塊驅動

路径:kernel/drivers/net/wireless/rockchip_wlan
源码:该目录下所有源码文件

攝像頭驅動

路径:hardware/rockchip/camera/SiliconImage/isi/drv
源码:该目录下

VGA驅動

路径:kernel/drivers/video/rockchip

HDMI驅動

路径:kernel/drivers/video/rockchip/hdmi

proc文件系統

啟動環境變量查詢

使用如下指令查詢啟動環境變量配置:

cat  /proc/cmdline 

會有如下類似列印信息:

vmalloc=496M console=ttyFIQ0 <nowiki>androidboot.selinux=permissive androidboot.hardware=rk30board androidboot.console=ttyFIQ0 init=/init  mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00008000@0x00006000(resource),0x00008000@0x0000e000(kernel),0x00010000@0x00016000(boot),0x00010000@0x00026000(recovery),0x0001a000@0x00036000(backup),0x00040000@0x00050000(cache),0x00002000@0x00090000(kpanic),0x00300000@0x00092000(system),0x00008000@0x00392000(metadata),0x00200000@0x0039A000(userdata),0x00020000@0x0059A000(radical_update),-@0x005BA000(user) storagemedia=emmc uboot_logo=0x02000000@0x7dc00000:0x01000000 loader.timestamp=2016-02-19_17:53:13 androidboot.mode=emmc
</nowiki>

CPU信息查詢

使用如下指令查詢CPU信息:

cat  /proc/cpuinfo 

會有如下類似列印信息:

shell@rk3288:/ # cat /proc/cpuinfo

Processor       : ARMv7 Processor rev 1 (v7l)

processor       : 0

model name      : ARMv7 Processor rev 1 (v7l)

BogoMIPS        : 48.00

Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 evtstrm 

CPU implementer : 0x41

CPU architecture: 7

CPU variant     : 0x0

CPU part        : 0xc0d

CPU revision    : 1



processor       : 1

model name      : ARMv7 Processor rev 1 (v7l)

BogoMIPS        : 48.00

Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 evtstrm 

CPU implementer : 0x41

CPU architecture: 7

CPU variant     : 0x0

CPU part        : 0xc0d

CPU revision    : 1



processor       : 2

model name      : ARMv7 Processor rev 1 (v7l)

BogoMIPS        : 48.00

Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 evtstrm 

CPU implementer : 0x41

CPU architecture: 7

CPU variant     : 0x0

CPU part        : 0xc0d

CPU revision    : 1



processor       : 3

model name      : ARMv7 Processor rev 1 (v7l)

BogoMIPS        : 48.00

Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 evtstrm 

CPU implementer : 0x41

CPU architecture: 7

CPU variant     : 0x0

CPU part        : 0xc0d

CPU revision    : 1



Hardware        : Rockchip RK3288 (Flattened Device Tree)

Revision        : 0000

Serial          : e3d650362e219fe2 

內存信息查詢

使用如下指令查詢內存使用信息:

 cat  /proc/meminfo

會有如下類似列印信息:

shell@rk3288:/ # cat  /proc/meminfo 

MemTotal:        2062080 kB

MemFree:         1573408 kB

Buffers:           11140 kB

Cached:           206416 kB

SwapCached:            0 kB

Active:           165880 kB

Inactive:         156828 kB

Active(anon):     105176 kB

Inactive(anon):      268 kB

Active(file):      60704 kB

Inactive(file):   156560 kB

Unevictable:           0 kB

Mlocked:               0 kB

HighTotal:       1540096 kB

HighFree:        1141180 kB

LowTotal:         521984 kB

LowFree:          432228 kB

SwapTotal:             0 kB

SwapFree:              0 kB

Dirty:                 0 kB

Writeback:             0 kB

AnonPages:        105152 kB

Mapped:            58948 kB

Shmem:               308 kB

Slab:              24800 kB

SReclaimable:      12056 kB

SUnreclaim:        12744 kB

KernelStack:        4160 kB

PageTables:         5844 kB

NFS_Unstable:          0 kB

Bounce:                0 kB

WritebackTmp:          0 kB

CommitLimit:     1031040 kB

Committed_AS:   19085052 kB

VmallocTotal:     499712 kB

VmallocUsed:       45004 kB

VmallocChunk:     361448 kB 

磁碟分區信息查詢

使用如下命令查詢磁碟分區信息:

cat  /proc/partitions 

會有如下類似列印信息:

shell@rk3288:/ # cat  /proc/partitions

major minor  #blocks  name



254        0     520912 zram0

 179        0   15267840 mmcblk0

 179        1       4096 mmcblk0p1

 179        2       4096 mmcblk0p2

 179        3      16384 mmcblk0p3

 179        4      16384 mmcblk0p4

 179        5      32768 mmcblk0p5

 179        6      32768 mmcblk0p6

 179        7      53248 mmcblk0p7

 179        8     131072 mmcblk0p8

 179        9       4096 mmcblk0p9

 179       10    1572864 mmcblk0p10

 179       11      16384 mmcblk0p11

 179       12    1048576 mmcblk0p12

 179       13      65536 mmcblk0p13

 179       14   12261376 mmcblk0p14          

內核版本查詢

使用如下命令查詢內核版本:

cat  /proc/version 

會有如下類似列印信息:

shell@rk3288:/ # cat  /proc/version

Linux version 3.10.0 (lqm@lqm) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #42 SMP PREEMPT Fri May 27 11:50:10 CST 2016 

網絡設備查詢

使用如下命令查詢網絡設備信息:

cat  /proc/net/dev 

會有如下類似列印信息:

shell@rk3288:/ #  cat /proc/net/dev 

Inter-|   Receive                                                |  Transmit

 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed

  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

    lo:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

  eth0:       0       0    0    0    0     0          0         0      992       6    0    0    0     0       0          0 

查看內核啟動信息

使用如下命令查詢內核啟動信息:

cat  /proc/kmsg 

android開發項目實戰

說明:以下為實際項目實例,用戶可參考x210開發文檔練習,後續我們會陸續發布。在進行下面的任一個實驗之前,請確保前面的環境已經搭建完畢。

實戰1:創建hello x3288工程

參考《x4418 android平台用戶手冊》。

實戰2:在x3288開發板上運行hello x3288測試程序

參考《x4418 android平台用戶手冊》。

實戰3:從零開始編寫LED測試程序

參考《x4418 android平台用戶手冊》。

實戰4:建立第一個APK應用程式,通過JNI+NDK調用底層驅動

參考《x4418 android平台用戶手冊》。

實戰5:修改VGA解析度

參考《x4418 android平台用戶手冊》。

實戰6:如何修改init.rc文件

永久修改

 system/core/rootdir

目錄下找到init.rc文件,修改後執行

 ./mk –s,

將會生成新的system.img文件,重新燒寫system.img即可更新init.rc。注意,在編譯時,首先需要先將out目錄下的

 init.rc

刪除後再編譯,否則可能不會生效。

臨時修改

默認init.rc在ramdisk.img中,ramdisk.img又被打包到boot.img中,因此,如果我們需要臨時修改boot.img,首先需要解壓boot.img,再手動修改我們需要修改的內容,再打包即可。為此,我們特別編寫了解壓和壓縮的腳本文件。

在android根目錄下,新建腳本文件ramdisk.sh,編輯內容如下:

<nowiki>#!/bin/bash

# create: liuqiming

# date:   2016-11-22

# mail:   liuqiming@9tripod.com



echo "Modify boot.img"

echo "1.unzip boot.img"

echo "2.Create boot.img"

echo "3.delete cache files"

echo "4.exit"



#准备工作,环境变量的声明

SOURCE_DIR=$(cd `dirname $0` ; pwd)

TOOLS_DIR=${SOURCE_DIR}/tools

TARGET_DIR=${SOURCE_DIR}/out/release

OUT=${SOURCE_DIR}/out/target/product/rk3288



PATH=${SOURCE_DIR}/out/host/linux-x86/bin:$PATH;



#读取要执行的操作索引

read -p "Choose:" CHOOSE



#解压boot.img

if [ "1" = ${CHOOSE} ];then

    echo "unzip boot.img"

    cd $TARGET_DIR

#第一步:新建ramdisk目录

    [ -e "ramdisk" ] ||{ echo "mkdir ramdisk"; mkdir ramdisk;}

#第二步:判断是否存在boot.img文件

    [ -f "$TARGET_DIR/boot.img" ] || { echo "error! can't find boot.img!"; rm -rf ramdisk;exit; }

    cd ramdisk

#第三步:拷贝boot.img

        cp ../boot.img .

#第四步:解压boot.img文件,得到boot.img-ramdisk.gz文件

    [ -f "/bin/split_bootimg.pl" ] || { cp $TOOLS_DIR/split_bootimg.pl /bin; }

        split_bootimg.pl boot.img

    rm -f boot.img

#第五步:解压boot.img-ramdisk.gz文件

    gzip -dc boot.img-ramdisk.gz | cpio -i

    echo "^_^ unzip boot.img finished!"

    rm -f boot.img-ramdisk.gz

    rm -f boot.img-second.gz

    rm -f boot.img-kernel

    exit



#打包boot.img

elif [ "2" = ${CHOOSE} ];then

    echo "create boot.img with kernel..."

#第一步:判断是否存在ramdisk目录

    [ -e "$TARGET_DIR/ramdisk" ] || { echo "can't find [ramdisk],please unzip boot.img first!"; exit; }

#第二步:去除默认的root.img文件

    rm -f $TARGET_DIR/boot.img

    cd $TARGET_DIR

#第三步:将当前目录所有文件打包到boot.img

    [ -d $TARGET_DIR/ramdisk ] && \

    mkbootfs $TARGET_DIR/ramdisk | minigzip > $TARGET_DIR/ramdisk.img && \

    truncate -s "%4" $OUT/ramdisk.img && \

    mkbootimg --kernel ${OUT}/kernel --ramdisk ${OUT}/ramdisk.img --second $TARGET_DIR/resource.img --output $TARGET_DIR/boot.img

    rm -rf ramdisk

    exit



#清除残余文件

elif [ "3" = ${CHOOSE} ];then

    cd ${TARGET_DIR}

    rm -rf ramdisk

    echo "^_^ delete cache files ok!" 



#退出脚本

elif [ "4" = ${CHOOSE} ];then

    exit

fi

    执行./ramdisk.sh,输入1,回车,将会自动解压out/release目录下的boot.img,并存放到out/release/ramdisk目录。

    执行./ramdisk.sh,输入2,回车,将会自动将out/release/ramdisk目录下的文件打包成boot.img。
</nowiki>

實戰7:如何修改開機動畫

默認android啟動時,會有android的英文字母不斷高亮滾動顯示,構成了一幅美麗的開機動畫。其實這個開機動畫是可以定製的,有興趣的讀者可以自行嘗試。

瑞芯微官方提供的uboot會讀取kernel根目錄下的logo.bmp和logo_kernel.bmp兩個文件,分別用於做uboot和內核的開機LOGO,uboot和內核的LOGO顯示全部是由uboot完成的。其中logo.bmp用作uboot的開機LOGO,logo_kernel.bmp用作內核的開機LOGO。值得注意的是,如果我們要將uboot和內核顯示的LOGO設置得相同,並不能簡單的複製,因為他們的圖片格式是有區別的。logo.bmp支持8b的bmp格式圖片,而logo_kernel.bmp只支持壓縮後的8b的bmp格式圖片,因此logo_kernel.bmp實際上要比logo.bmp的尺寸要小得多。而且在實際顯示時,很明顯的看到顯示內核LOGO時,如果顏色比較豐富,就會失真。為了只顯示一幅圖片,我們直接將kernel目錄下的logo_kernel.bmp刪除即可。

如果我們需要換uboot的開機LOGO,找一張解析度不是太大的圖片,轉換成BMP格式,然後使用WINDOWS的圖庫編輯功能,轉換成8b模式,保存並替換kernel目錄下的logo.bmp即可。注意,如果LOGO的解析度設置得過大,也可能導致無法顯示。如果需要全屏開機LOGO,默認的uboot代碼就不適用了,需要重新移植。

同上,找一張解析度不是太大的圖片,轉換成BMP格式,在WINDOWS的圖片編輯軟體下轉換成8b模式後,還需要藉助於linux下強大的gimp工具,將圖片壓縮,內核LOGO才能顯示出來。默認瑞芯微提供的這套方案,內核LOGO解析度不夠大,而且會明顯失真,無法顯示真彩圖片,如果開發的工程師一定要顯示完美的內核LOGO,建議使用linux下標準的開機LOGO方案。

實戰11:使用git管理原始碼

在我們最開始編碼時,就應該養成使用git等工具管理源碼的好習慣。這裡簡單介紹git的一些常用操作,具體更深入的學習,需要讀者深入研究。

git指令

1).初始化倉庫

 git init

2).查看版本庫的狀態

 git status

3).查看版本庫的狀態

 git log

4).提交文件到倉庫索引中

 git add .                                 ---提交当前目录所有修改
 git add hello.c example.c                 ---提交两个文件到仓库索引

5).提交內容到倉庫:

 git commit -a -m "yx modify some files"

6).比較當前的工作目錄和倉庫資料庫中的差異

 git diff                                  ---建议使用windows 客户端

7).恢復到某個版本

 git reset --hard 8f097e                   ---恢复到某个历史版本

8).打標籤

 git tag V1.01 8f097e -m "20100101发布"    ---给某个版本打上标签
 git tag -d V1.01                          ---删除标签

9).clone倉庫

 git clone git@172.18.0.198:boot          ---clone仓库到当前目录
 git clone git@172.18.0.198:boot temp         ---clone仓库到temp目录

10)伺服器倉庫同步到本地

 git pull                                   ---将服务器最新内容同步到本地

11).將本地倉庫中的內容同步到伺服器中

 git push                                   ---提交当前目录修改记录到服务器(服务器已存在此目录)
 git push git@172.18.0.198:FCR/K660/app master  ---提交当前目录修改到服务器(服务器不存在此目录)
12).查看项目版本更新细节
 git show 18183e                            ---显示当前分支的最新版本的更新细节

初始化git倉庫

在第一次解壓android源碼後,進入android根目錄,更新本地Git倉庫:

 cd android_gingerbread     #进入工作目录
 git init-db        #初始化工作目录
 git add .        #将工作目录的所有文件添加进来以便跟踪管理
 git commit -a        #将所监视的文件提交到仓库
 sudo apt-get install qgit

第一次建立倉庫後,給出第一次提交:

 git commit -m "初始化工程"

否則,輸入git log時,會提示如下錯誤:

 fatal: bad default revision 'HEAD'

恢復到上一版本

首先,使用git log命令查詢修改記錄:

lqm@lqm:~/android_gingerbread$ git log

commit d5fd5223fd354c0a9c63057a7b8fe9a6870bdd7e

Author: lqm <lqm@lqm.(none)>

Date:   Wed Dec 14 10:34:34 2011 +0800 

刪除不必要的處理器文件

commit 1af4b99d582bf33cc2f37a0529554426b30a168d

Author: lqm <lqm@lqm.(none)>

Date:   Wed Dec 14 10:14:39 2011 +0800 

初始化工程

 lqm@lqm:~/android_gingerbread$

再使用git reset指令恢復到某個提交狀態:

 lqm@lqm:~/android_gingerbread$ git reset --hard 1af4b
Checking out files: 100% (12517/12517), done.
HEAD is now at 1af4b99 初始化工程
lqm@lqm:~/android_gingerbread$

修改源碼後,提交修改記錄

修改了某些文件,需要提交到伺服器,具體操作如下:

第一步:使用git pull將伺服器倉庫提交到本地

Git-pull.png

提示出錯,有兩種解決辦法,第一種,先將drivers/mtd/nand/nand_base.c備份,比如:mv drivers/mtd/nand/nand_base.c drivers/mtd/nand/nand_base.c.bak

然後再執行git pull。第二種,執行git checkout –f,然後再執行git pull。

正常的操作如下: Git-pull-ok.png

上面的提示文件為伺服器上已經更新的文件,執行git pull後,已經同步到本地了。

第二步:使用git status,查看修改的文件:

Git-status.png

上圖表示本地修改了build/mk和common/env_common.c兩個文件。

第三步:使用git add指令將指定的文件提交到倉庫索引

 git  add  .  #将当前目录所有修改的文件提交到仓库索引

或者使用下面的指令:

 git  add  build/mk  #将指定的文件提交到仓库索引,env_common.c并未提交。

第四步:使用

 git commit #命令注释修改的内容到仓库

Git-commit.png

第五步:使用

 git push   #指令将修改的文件提交到服务器

Git-push.png

說明:如果源碼保存在本機上,不用操作第一步和第五步。

實戰13:如何打包整個android bsp包

這裡推薦兩種常用的打包方法。

使用tar指令

通常在編譯完android源碼包後,在android源碼目錄中會生成各種釋放文件,它統統被匯集到源碼根目錄的out目錄,打包時我們需要將它排除在外。另外,使用git管理工具管理源碼時,在android源碼根目錄會生成.git目錄,隨著修改次數的增加,該目錄內容會越來越多,打包時也需要將它排除在外。

由於在整個android源碼中,存在其他的out目錄,為了在使用tar指令打包時,防止將這些目錄也排除在外,因此我們可以首先將源碼根目錄的out目錄重命名,如out_x3288,再執行打包指令。打包完成後,再將out_x3288還原成out即可。

另外,如果編譯了uboot,內核等,在源碼包中會存在很多*.o,*.cmd的臨時文件,這些也是我們所不需要的,在打包時也一併排除在外。

在android源碼總目錄的同級目錄下執行如下指令完成打包:

 mv     x3288_kitkat\out     x3288_kitkat\out_x3288
 tar  jcvf  x3288_kitkat.tar.bz2  x3288_kitkat  –exclude=”.git” –exclude=”out_x3288” –exclude=”*.o” –exclude=”*.cmd”
 mv x3288_kitkat \out_x3288  x3288_kitkat\out

使用git指令

使用git指令打包源碼的前提是整個android源碼包已經由git管理起來。在android源碼包的根目錄下(包含有uboot,kernel等目錄的同一級目錄)使用如下指令打包整個源碼包:

 git  archive  --format=tar  HEAD  >  x3288_kitkat.tar
 bzip2  x3288_kitkat.tar

實戰15:android調試技巧之mm指令

在Android SDK源碼工程下,如果編譯整個工程可能需要兩三個小時,即使二次編譯也要二十多分鐘。如果只想單獨編譯某個APK應用,那麼可以這樣做:

1)在build目錄下執行

   . envsetup.sh  (注意,命令前面有一个点,然后接一个“空格”键)

執行完後,就會多出以下幾個命令:

- croot:   Changes directory to the top of the tree.

- m:       Makes from the top of the tree.

- mm:      Builds all of the modules in the current directory.

- mmm:     Builds all of the modules in the supplied directories.

- cgrep:   Greps on all local C/C++ files.

- jgrep:   Greps on all local Java files.

- resgrep: Greps on all local res/*.xml files.    /*???*/

- godir:   Go to the directory containing a file.

- printconfig: 当前build的配置情况

2)mm命令

用於當前目錄下的工程

3)mmm命令

用於編譯指定目錄,如:mmm Settings 表示編譯Settings這個目錄,之後會生成新的apk


實戰16:ubuntu下minicom的設置

在做項目開發時,串口調試已經成為我們開發的必備工具。但是現在很多主板,或是筆記本上都已經省掉了串口,這對我們開發人員來說,無疑會帶來些不必要的麻煩。為此,我們可能會通過PCI轉串口,USB轉串口等來開發。值得慶幸的是,在windows下使用的人多,我們很容易就能夠安裝PCI轉串口驅動或是USB轉串口驅動。如果我們使用純的linux系統開發,安裝驅動可能就沒這麼簡單了。因此,這裡分享一些我們實際開發中總結的一些經驗,避免新人多走彎路。

通用串口的minicom設置方法

通常情況下,PC機上自帶的串口,在windows和ubuntu下都自帶驅動了,這時安裝就比較簡單了。

第一步:安裝minicom

 sudo apt-get install minicom

第二步:設置minicom的埠

 sudo minicom -s

界面如下:

<nowiki> +-----[configuration]------+

            | Filenames and paths      |

            | File transfer protocols  |

            | Serial port setup        |

            | Modem and dialing        |

            | Screen and keyboard      |

            | Save setup as dfl        |

            | Save setup as..          |

            | Exit                     |

            | Exit from Minicom        |

            +--------------------------+ </nowiki>

通過鍵盤的上下鍵盤選擇到Serial port setup,回車

+-----------------------------------------------------------------------+

    | A -    Serial Device      : /dev/ttyWCH1                              |

    | B - Lockfile Location     : /var/lock                                 |

    | C -   Callin Program      :                                           |

    | D -  Callout Program      :                                           |

    | E -    Bps/Par/Bits       : 115200 8N1                                |

    | F - Hardware Flow Control : No                                        |

    | G - Software Flow Control : No                                        |

    |                                                                       |

    |    Change which setting?                                              |

    +-----------------------------------------------------------------------+ 

輸入A,光標會停留到Serial Device的界面,將設備節點設置為/dev/ttyS0;輸入F,關閉硬流控;再回車,退出當前設置,回到上一界面,選擇Save setup as dfl,再選擇Exit退出設置。到此,minicom安裝完成。

USB轉串口安裝方法

這裡以PL2303的驅動IC為例。默認ubuntu10.10系統已經自帶有PL2303的驅動了。因此,這個安裝比較簡單。

第一步:將USB轉串口延長線連接到PC機的USB口,啟動ubuntu系統;

第二步:執行如下指令檢查是否有USB轉串口的設備節點:

 lqm@lqm:~$ ls /dev/ttyU*
 /dev/ttyUSB0

第三步:重新設置minicom的設備節點,方法同上;

第四步:打開minicom,測試USB轉串口是否能正常使用。

PCI轉串口安裝方法

PCI轉串口的晶片比較多,這裡以CH35X為例,講述在ubuntu下的安裝方法。

第一步:下載最新的安裝包CH35XDRV.ZIP,或者從光碟裡面獲得;

第二步:將CH35XDRV.ZIP拷貝到ubuntu的任意目錄並解壓,得到CH35XDRV目錄,使用命令終端進入該目錄,示例如下:

lqm@lqm:~/下载/CH35XDRV/CH35XDRV$ pwd

/home/lqm/下载/CH35XDRV/CH35XDRV

lqm@lqm:~/下载/CH35XDRV/CH35XDRV$ ls

CH35X??-???+?-??+-?+?.chm  DRV_16S  DRV_1P  DRV_1S  DRV_1S1P  DRV_2S  DRV_2S1P  DRV_2S1P_RA  DRV_4S  DRV_4S1P  DRV_6S  DRV_8S  <nowiki>PCISETUP.exe  README.TXT  SETUPX64  TOOLS

lqm@lqm:~/下载/CH35XDRV/CH35XDRV$ cd DRV_2S

lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S$ ls

DOS  LINUX  WINDOWS

lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S$ cd LINUX/

lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ ls

driver  Makefile  README  wchdump  wchmknod  wchterm

lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ </nowiki>

第三步:在LINUX目錄下執行如下命令安裝:

 sudo make clean
 sudo make install

實際操作時發現有如下錯誤提示:

cd wchmknod;\

    ./wchmknod

/bin/sh: line 1: ./wchmknod: 权限不够

<nowiki>make: *** [wchmknod_install] 错误 126

root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX#

进入./wchmknod目录,更改wchmknod文件权限,再编译即可:

root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX# cd wchmknod/

root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX/wchmknod# ls

wchmknod

root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX/wchmknod# ls -la

总计 12

drwxrwxrwx 2 lqm lqm 4096 2011-04-29 16:55 .

drwxrwxrwx 6 lqm lqm 4096 2011-04-29 16:55 ..

-r--r--r-- 1 lqm lqm  936 2010-09-20 04:48 wchmknod

root@lqm:/home/lqm/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX/wchmknod# chmod 777 wchmknod </nowiki>

 make install

即可安裝成功。

第四步:執行如下指令加載驅動

 modprobe wch

或者

 insmod driver/wch.ko

第五步:使用如下指令查詢驅動是否正常加載:

 lsmod | grep wch

示例如下:

 lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ lsmod |grep wch
 wch                    58933  1 
 lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ 

這裡查找到了已經加載的驅動,表明驅動加載成功。

第六步:查看/dev下生成的相關節點:

 lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$ ls /dev/ttyWCH*
 /dev/ttyWCH0   /dev/ttyWCH11  /dev/ttyWCH14  /dev/ttyWCH17  /dev/ttyWCH2   /dev/ttyWCH22  /dev/ttyWCH25  /dev/ttyWCH28  /dev/ttyWCH30  /dev/ttyWCH4  /dev/ttyWCH7
 /dev/ttyWCH1   /dev/ttyWCH12  /dev/ttyWCH15  /dev/ttyWCH18  /dev/ttyWCH20  /dev/ttyWCH23  /dev/ttyWCH26  /dev/ttyWCH29  /dev/ttyWCH31  /dev/ttyWCH5  /dev/ttyWCH8
 /dev/ttyWCH10  /dev/ttyWCH13  /dev/ttyWCH16  /dev/ttyWCH19  /dev/ttyWCH21  /dev/ttyWCH24  /dev/ttyWCH27  /dev/ttyWCH3   /dev/ttyWCH32  /dev/ttyWCH6  /dev/ttyWCH9
 lqm@lqm:~/下载/CH35XDRV/CH35XDRV/DRV_2S/LINUX$

表明節點已經成功生成。

第七步:使用minicom設置節點

 sudo minicom -s

選擇Serial port setup,回車,再選擇A,將設備節點設置為/dev/ttyWCH0或/dev/ttyWCH1

保存退出,再開啟minicom:

Welcome to minicom 2.4



OPTIONS: I18n                                                                

Compiled on Jun  3 2010, 13:46:31.                                           

Port /dev/ttyWCH1                                                            



Press CTRL-A Z for help on special keys                                                              



OK                                                                                                   



U-Boot 1.3.4-dirty (Apr 20 2012 - 09:02:38) for SMDKV210                                             





CPU:  S5PV210@1000MHz(OK)               

        APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz

        MPLL = 667MHz, EPLL = 96MHz     

                       HclkDsys = 166MHz, PclkDsys = 83MHz

                       HclkPsys = 133MHz, PclkPsys = 66MHz

                       SCLKA2M  = 200MHz 

可見,PCI轉串口驅動已經能夠正常使用了。

第八步:以上步驟,僅僅是臨時加載了驅動,ubuntu系統重啟後,wch.ko文件並沒有自動加載。因此,需要在ubuntu的啟動腳本裡面添加自動加載的命令。

編輯/etc/rc.d/rc.local文件,在最末尾添加如下語句:

 modprobe wch

第九步:重啟ubuntu系統,再次嘗試串口是否能正常使用。