2022年6月23日 星期四

[Android] Android TV開發流程簡敘 (4) - 送測3PL

 轉貼本網站文章請註明出處 from Awaysu
https://awaysu-programming.blogspot.com

1. 提供Project Tracker link


2. 3PL提供的WelcomeEmail_ATV.xlsx要填寫回覆

3. 確認3PL提供的ATV_Application_information.xlsx裡的項目,確認以下property內容格式正確
  ro.build.version.security_patch
  ro.com.google.gmsversion
  ro.product.first_api_level
  ro.com.google.clientidbase
  ro.build.version.incremental
  ro.oem.key1

4. 提供上一版approved的fingerprint

5. 提供user-debug & user build的OTA image,並提供如何更新文件

6. xTS Procedure
如果xTS有特別手法的測試方式,可以寫一份文件告知,避免信件來來回回
有些項目測試手法會影響結果,例如有些需要透過VPN,甚至IPV6要關掉才能PASS。

7. All xTS pretest report link
請上傳到Google drive並按照3PL規定取名和放置

8. Waiver的文件或mail和WaiverID

9. 提供BTS 上傳到Google drive的url

10. 提供遙控器的設計文件 (需要求廠商提供)

11. 提供產品的User Manual (需要求客戶提供)


一般沒意外3PL應該1~2周測試
測試完上傳報告至APFE等候1~2周Google給approved

[Android] Android TV開發流程簡敘 (3) - xTS測試項目

轉貼本網站文章請註明出處 from Awaysu
https://awaysu-programming.blogspot.com


Android TV Certification主要為下面測試項目:

1. CTS (Compatibility Test Suite)
自動測試測試,檢查Android實現的各個元素之間的兼容性,確保與Google定義的函式行為一致。

2. GTS (Google Mobile Services Test Suite)
自動測試測試,驗證GTVS跑起來沒有問題。

3. VTS (Vendor Test Suite)
自動測試測試,確保硬體相關的函式與Google定義行為一致。

4. STS (Security Test Suite)
自動測試測試,驗證是否已正確應用並修復相應的安全漏洞補丁。

5. BTS (Build Test Suite)
自動測試測試,上傳映像檔至APFE檢查是否有惡意軟件和其他潛在有害應用程序。

6. TVTS
自動測試測試,通過運行一系列特定於電視的性能測試來衡量 Android TV 設備的性能。

7. GSI (Generic System Image)
自動測試測試,通用系統映像的兼容性測試套件測試

8. CTS Verifier
一份test plan excel檔案,CTS驗證的手動測試。

9. Somke test
一份test plan excel檔案,提供的各種手動測試,以及與CTS和其他自動化測試套件一起使用。

10. Youtube test
一份test plan excel檔案,YouTube手動測試,驗證對YouTube影片格式播放是否正常。


流程是你需要先自己pretest過,確認無誤後將所需資料交給3PL來幫忙驗證。自己pretest過的報告不要自己上傳到APFE,3PL會上傳他們測試完的report。如果有failed需要waiver,3PL會提供你一個文件敘述,完成後他們會幫你上傳到Google issue tracker,此ticket ID就是waiver ID,到時候可以填在APFE裡的報告中,目前要waiver變的嚴苛Goole要求one patch one waiver。


2022年6月22日 星期三

[Android] Android TV開發流程簡敘 (2) - 產生映像檔與加密簽名

轉貼本網站文章請註明出處 from Awaysu
https://awaysu-programming.blogspot.com


在Android裡預設是有一個預設的test key (build/target/product/security/testkey),我們必須去產生屬於自己的release key,當別人也有source code時,才能避免裝置被置換成他的映像檔。

1. Android有二個地方需要加密簽名:
1) image裡面所有的apk
2) OTA image


2. 建構自己release key
請使用下面指令,請將下續換成自己的資訊
subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in testkey releasekey platform shared media networkstack; do \
    ./development/tools/make_key ~/.android-certs/$x "$subject"; \
done
C ---> Country Name (2 letter code)
ST ---> State or Province Name (full name)
L ---> Locality Name (eg, city)
O ---> Organization Name (eg, company)
OU ---> Organizational Unit Name (eg, section)
CN ---> Common Name (eg, your name or your server’s hostname)
emailAddress ---> Contact email address

產生後可以得到公鑰 (X509)和私鑰 (PK8):
media.pk8              networkstack.pk8       platform.pk8           releasekey.pk8         shared.pk8
media.x509.pem         networkstack.x509.pem  platform.x509.pem      releasekey.x509.pem    shared.x509.pem         testkey.pk8         testkey.x509.pem


3. 加入或修改下列到.mk中
ifeq ($(TARGET_BUILD_VARIANT),user)
PRODUCT_DEFAULT_DEV_CERTIFICATE := ~/.android-certs/releasekey
else
PRODUCT_DEFAULT_DEV_CERTIFICATE := build/target/product/security/testkey
PRODUCT_EXTRA_RECOVERY_KEYS := ~/.android-certs/releasekey
endif
PRODUCT_EXTRA_RECOVERY_KEYS會把key包到recovery image裡面。
當你使用recovery mode更新時,裝置就可以檢查該key來決定是否可以從userdebug build的軟體更新user build的image。


4. fingerprint和build number
xTS中會檢查fingerprint和build number
我寫一個script來讓他們一致
#NEW_NUMBER=y
if [ "$NEW_NUMBER" == "y" ] || [ ! -f "${ANDROID_BUILD_TOP}/build_number.txt" ]; then
    echo ${USER}${INCREMENTAL_NUMBER} > ${ANDROID_BUILD_TOP}/build_number.txt
else
    INCREMENTAL_NUMBER=`cat build_number.txt  | cut -c5-12`
fi

export DISPLAY_BUILD_NUMBER=true
export BUILD_NUMBER=${USER}${INCREMENTAL_NUMBER}


5. 建構映像檔
下載code請參考   Android Open Source Project
在下載完AOSP/晶片廠商SDK和建構好release key後,就可以利用下列指令來產生image。
source build/envsetup.sh
lunch {project name}-userdebug
make -j8
make -j8 otapackage
-j的數量是你要用幾個tread去build,當然越多的話越短時間build好,但這也是取決於你CPU的核心數,可以使用nprocx指令來查詢。
make是產生每個partition的image出來,make otapackage則是產生出OTA image和target file。target file是包含了所有image和所需檔案,在後續sign的時候會用到。


6. 置換簽章image裡所有的apk指令
build/tools/releasetools/sign_target_files_apks -o -d \ 
~/.android-certs \
out/target/product/{project name}/obj/PACKAGING/target_files_intermediates/{project name}-target_files-root06061605.zip \
out/target/product/{project name}/obj/PACKAGING/target_files_intermediates/{project name}-target_files-signed-root06061605.zip 


7. 產生出簽章過的OTA image,最終生成的映像檔
build/tools/releasetools/ota_from_target_files -v --block -p /out/host/linux-x86 -k \ ~/.android-certs \ 
out/target/product/{project name}/obj/PACKAGING/target_files_intermediates/{project name}-target_files-signed-root06061605.zip  \
{project name}-ota-signed-06061605.zip


8. fingerprint名稱的變化
1) userdebug build 用AOSP預設key
google/redfin/redfin:11/RQ3A.210905.001/7511028:userdebug/test-keys

2) user build 用自己的key
google/redfin/redfin:11/RQ3A.210905.001/7511028:user/dev-keys

3) user build 用自己的key然後經過自己的key加密簽證
google/redfin/redfin:11/RQ3A.210905.001/7511028:user/release-keys

只要用AOSP預設key出來就是test-keys
如果用自己key就是dev-keys
只要有做加密簽證就會變成release-key


可參考:
https://source.android.com/devices/tech/ota/sign_builds

2022年6月21日 星期二

[Android] Android TV開發流程簡敘 (1) - 申請

轉貼本網站文章請註明出處 from Awaysu
https://awaysu-programming.blogspot.com


1. 簽完NDA後你需要用公司名稱來建構Google帳號。

2. 帳號開通後可以進入Android Partner網站。這網站很重要,裡面包含了教學、說明、認證所需資訊等。

3. AOSP & GTVS 可以從Google Git 下載GTVS是Google服務的集合app,像是Android TV Launcher, Google PlayYouTube...等,和Google簽約後才能下載放入產品,這時產品才能稱為Android TV

4. 裡面有Android TV 啟動所需表格,包含遙控器部分須提交給GoogleAndroid 兼容性定義文檔 (CDD)等

5. 建立Android TV Project Tracker
 1) Project Tracker : 這裡會有要做的事項,並提醒是GOOGLE還是PARTNER做,後續都會以這來檢查進度。
 2) Partner Data : 需填寫產品和軟體資訊。
 3) Hardware Matrix : 需填寫硬體資訊。

6. 完成後需要二台以上DUT給3PL,以後3PL認證需要 (註2)。 寄送越多台可以減少3PL測試時間

其實Android產品開通很繁瑣,我這邊補充是以RD所知道的寫出來,所以可能會有遺漏給大家參考。



註1:沒有申請GTVS的產品,Widevine key需要自己去Widevine網站申請。

註2:剛開始我們是直接面對Google TAM (Technical Account Manager),後來因為Android TV產品眾多,Google改由指定第三分公司3PL(Third-Party Laboratories)協助認證。目前3PL為大陸的Harman和台灣的Pegatron,要注意的是3PL協助認證是要費用的。



2022年6月6日 星期一

[Linux] 實作Bootloader, kernel & rootfs開機流程 (下) 使用Buildroot

轉貼本網站文章請註明出處 from Awaysu
https://awaysu-programming.blogspot.com

Buildroot是一個將Bootloader, kernel, rootfs和常用tool整合的一套軟體
他會自動下載和編譯生成所需要檔案
目前實作開機流程軟體大多使用這套

1. 下載buildroot 
https://buildroot.org/download.html


2. 解壓縮及編譯
tar zxvf source/buildroot-2022.02.2.tar.gz
cd buildroot-2022.02.2
make pc_x86_64_bios_defconfig
make menuconfig
make -j8


3. 編譯完後修改kernel支援AHCI SATA讓VirtualBox開機
make linux-menuconfig
Device Drivers  --->    
<*> Serial ATA and Parallel ATA drivers (libata)  --->   
<*>   AHCI SATA support   


4. 再make一次
make


5. 編譯完成後可以找到以下檔案
 1) Bootloader => output/images/grub.img
 2) Kernel => output/images/bzImage
 3) File system image => output/images/rootfs.ext4
 4) File system path => output/target/
 5) Full image => buildroot-2022.02.2/output/images/disk.img
這邊我們直接使用Full image
將buildroot-2022.02.2/output/images/disk.img拷貝至tftp


6. 下載一個可以開機的Linux CD
我選Tiny Core Linux因為只有18M又有基本的linux指令
http://www.tinycorelinux.net/13.x/x86_64/release/CorePure64-13.1.iso


7. 建立VirtualBox虛擬電腦
開啟VirtualBox,新增一台類型為Linux,版本為Arch Linux (64-bit)的虛擬電腦
裝置=>光碟機=>設定CorePure64-13.1.iso並開機

 



8. 重開機

開機後看見boot:按下Enter會看到tc@box:~$表示可以下指令



9. 下載disk.img並寫到硬碟
cd /var
sudo tftp -l disk.img -r disk.img -g 10.118.96.20
sudo dd if=disk.img of=/dev/sda

10. 移除Linux CD後重開機


11. 開機會先進到GRUB,五秒後會自動進入Kernel

12. Login輸入root後就進到file system


[Linux] 實作Bootloader, kernel & rootfs開機流程 (上)

轉貼本網站文章請註明出處 from Awaysu
https://awaysu-programming.blogspot.com


一個系統開機的流程基本上是Bootloader=> kernel=> filesystem
這裡我用VirtualBox模擬一台x86電腦來驗證了解
當然如果你手上有其他平台像是樹梅派也是一樣做法
只是cross compiler原本是x86的gcc改成arm的arm-linux-gcc


1. 下載Bootloader
這邊我選一個x86簡單的bootloader - extlinux

apt-get install uuid-dev
git clone https://github.com/geneC/syslinux.git
make
extlinux會產生在./bios/extlinux/extlinux拷貝至tftp下
但如果是embedded system,大多使用uboot.


2. 下載Kernel

wget http://ftp.ntu.edu.tw/linux/kernel/v4.x/linux-4.19.104.tar.gz
tar zxvf linux-4.19.104.tar.gz
cd linux-4.19.104
make
kernel image會產生在./arch/x86_64/boot/bzImage拷貝至tftp下
如果需要.config,可以參考此檔


3. 創建file system下的進入點init
這裡我們只是印出訊息The is init test !!!迴圈等待
init.c

#include <stdio.h>

int main()
{
    printf("\n\n The is init test !!! \n\n");
    while(1)
    {}
    return 0;
}
build成init 
gcc -static -o init init.c
init拷貝至tftp下


4. 下載一個可以開機的Linux CD
我選Tiny Core Linux因為只有18M又有基本的linux指令
http://www.tinycorelinux.net/13.x/x86_64/release/CorePure64-13.1.iso


5. 建立VirtualBox虛擬電腦
開啟VirtualBox,新增一台類型為Linux,版本為Arch Linux (64-bit)的虛擬電腦
裝置=>光碟機=>設定CorePure64-13.1.iso並開機

 


5. 重開機
開機後看見boot:按下Enter會看到tc@box:~$表示可以下指令



6. 寫入所需檔案

# extlinux 需要此lib link
sudo mkdir /lib64
sudo ln -s /lib/ld-linux-x86.so.2 /lib64/ld-linux-x86.so.2

#格式化硬碟並mount
sudo mkfs.ext4 /dev/sda 
sudo mount -t ext4 /dev/sda /mnt
sudo cd /mnt

#下載kernel
sudo tftp -l bzImage -r bzImage -g 10.118.96.20

#下載rootfs進入的init
sudo tftp -l init -r init -g 10.118.96.20
sudo chmod 777 init

#下載bootloader並寫入
sudo tftp -l extlinux -r extlinux -g 10.118.96.20
sudo chmod 777 extlinux
sudo ./extlinux -i /mnt

#產生所需的dev node
sudo mkdir dev
sudo mknod dev/console c 5 1
sudo mknod dev/ram b 1 0


7. 建立檔案/mnt/extlinux.conf
sudo vi /mnt/extlinux.conf

DEFAULT emblinux
timeout 10
prompt 0
label emblinux
  kernel bzImage
  append noinitrd root=/dev/sda rw init=/init ide=nodma

此檔案為開機指令, kennel為bzImage, rootfs為/dev/sda,init是我們編譯出來的init
Bootloader extlinux 開完後就會按照此設定開機


8. 移除Linux CD後重開機


9. 開機後就可以看見系統最後進到我們寫的 The is init test !!!


如果想要自己建構出更詳細的file system可以參考 [Linux Porting] 建立基本可開機的filesystem