如何建立chromium firmware updater測試環境
最近都在搞chromium的firmware updater
雖然在https://www.chromium.org/chromium-os/developer-guide
算是寫得蠻詳盡的
但是實際上測試環境要搞起來還是花了一番功夫
chromeOS為了不讓人隨便埋一些code進去駭客
還是需要做一番設定才可以把你的source code丟到目標機台上
不像一般linux環境只要可以cross compile就可以把程式丟到目標版上去執行
1.下載depot_tools
(裡面有bootstrap的設定要做,不然後面檢查檔案時會出現permission denied)
2.下載chromium OS(使用repo而非git,相關的套件可以透過apt-get取得)
3.export depot_tools,這樣才可以使用cros_sdk進入chormiumOS的compile環境
4.執行cros_sdk後可以看到~/trunk/src/script$,目的是確保每一份chromiumOS都是在相
同的環境下被compile出來
5.build image,一定要是test版本的,這樣後續才有SSH功能可以上傳檔案,會產生一個
chromiumos_test_image.bin
(做之前做好確定一下空間有4GB以上,而且需要兩三個小時的時間)
(參考https://www.chromium.org/chromium-os/developer-guide "Building
ChromiumOS"的順序一步一步來即可)
6.製作USB開機碟,在windows上可用chrome下載Chromebook Recovery Utility
將image給燒錄進去USB隨身碟
7.使用USB開機碟開機(chromiumOS主機需打開這個功能,須進入developer mode)
(default帳號是chronos,密碼是test0000)
8.package要cros_workon --board=${BOARD} start ${PACKAGE_NAME}然後再
cros_workon_make --board=${BOARD} ${PACKAGE_NAME} --install
這樣才真正有載入chroot(root file system)內,才有辦法透過cros deploy傳送進去
9.以logitech-updater為例,進到~/trunk/src/third_party/logittech-updater
利用"emerge-${BOARD} logitech-updater"將package給compile起來
10.再透過cros deploy,利用ssh將修改過的package傳進chromiumOS裡面來debug
11.建立自己的檔案夾,例如叫xxx-updater
12.偷懶一點就把logitech-updater的東西通通copy進去吧,再慢慢來改
13.把~/trunk/src/third_party/chromiumos-overlay/sys-apps/logitech-updater裡面的
ebuild同樣的copy一分到你自己的xxx-updater裡面,請把名稱跟裡面的路徑都改成你自
己的檔案夾路徑
14. 8~10的步驟再做一次,如果成功就會在自己的機台上的/usr/sbin看到執行檔
補充一下之後的開發過程
因為我們必須上傳兩個ebuild檔案
一個是在sys-apps,另一個是在sys-firmware
sys-firmware裡的ebuild雖然寫了firmware的下載位置
但實際上還是需要透過google的工程師幫你上傳到google的local mirror位置
chromebox才可以下載到firmware
所以一般要自己試試的人到這邊就會卡住了
還有usb device在插進去chromebox時
會遇到device的user跟group無法被認定為cfm-firmware-updaters
因此就無法進行FW更新
這邊我自己的克服方法是自己手動增加
還有udev的rule也要注意執行順序
像我自己遇到hidraw的rule比我們設定的rule更晚執行
因此造成hidraw裝置先被認定為是屬於root的group與user
在這邊卡了非常久才發現這個問題...Orz
基本上要使用root帳號去修改/dev/video0的user/group
下指令"chown cfm-firmware-updateers:cfm-firmware-updaters video0"
改完之後下"su cfm-firmware-updaters"將帳號轉成cfm-firmware-updaters
應該就可以模擬udev trigger起來後使用cfm-firmware-updaters帳號
去呼叫aver-updater的狀況
PS:要手動增加user/group(cfm-firmware-updaters/cfm-firmware-updaters),請用root帳號"sudo su" "useradd username"
PPS:另外補充一下上傳動作,也是搞了一陣子才清楚
1. git add your_fires
2. git commit -a(與一般的git commit略為不同,但也是寫些note而已)
3. git cl upload
此時會跳出一堆文字
Credentials for the following hosts are required:
chromium.googlesource.com
These are read from /home/tzaumin/.gitcookies (or legacy /home/tzaumin/.netrc)
You can (re)generate your credentials by visiting https://chromium-review.googlesource.com/new-password
基本上就是去那個網址
如果你是linux環境就把下面一整段的文字(非windows user)
copy後貼在工作站console上去取得認證的
當然你還要去登入google gerrit的帳號之類的,參考這個網址即可
https://www.chromium.org/developers/contributing-code
設定完後再一次git cl upload即可,但我曾經上傳錯位置
這有時候真的搞不太懂為什麼
不過還好google reviewer直接幫我設一個新的folder上傳,顆顆
PPS:最近又因為上傳失敗亂搞造成環境需要重建,卻發現要emerge自己已內建在新版本的firmware updater也失敗。後來仔細一看發現不能跳過build image的過程,不然在單獨build自己的firmware updater時會遭遇不預期的相依性問題。這真的是有點討厭,很容易被人忽略。
PPPS:這次重建環境花費很多時間,因為直接下載source code後馬上使用make或是emerge都會出現undefined reference:brillo的問題(還是有稍微修改過的,似乎C++的compiler對int to uint有更嚴格的規則,會需要修改)。目前在amd64-generic底下有編譯成功,似乎是要把第8項給做完才有辦法編譯成功。可是我們是要在ASUS Chromebox上執行,BOARD必須設定為panther。
補充:整理一下我覺得對的流程,其實guide寫得沒錯,但是我一直以為要先emerge-${BOARD}成功再做cros_workon。但事實上應該就是做完cros_workon再emerge-${BOARD},這樣編譯出來才不會因為lib找不到出現一堆error。
1.(outside)sudo apt-get install git-core gitk git-gui curl lvm2 thin-provisioning-tools \
python-pkg-resources python-virtualenv python-oauth2client
2.(outside)
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
3.(outside) umask 022
4.(outside) mkdir -p ${HOME}/chromiumos
5.(outside)
mkdir -p /usr/local/path/to/source/chromiumos
ln -s /usr/local/path/to/source/chromiumos ${HOME}/chromiumos
6.
(outside)
cd ${HOME}/chromiumos
repo init -u https://chromium.googlesource.com/chromiumos/manifest.git --repo-url https://chromium.googlesource.com/external/repo.git
repo sync -j4
7.(outside) cros_sdk
8.(inside) export BOARD=panther
9.(inside) ./setup_board --board=${BOARD}
10.(inside) ./build_packages --board=${BOARD}
11.(inside) ./build_image --board=${BOARD} --noenable_rootfs_verification test
12.(inside) cros_workon --board=${BOARD} start ${PACKAGE_NAME}
13.(inside) cros_workon_make --board=${BOARD} ${PACKAGE_NAME}
這樣emerge-${BOARD} ${PACKAGE_NAME}就會正確
另外千萬不要進去folder底下做make clean,LD會很莫名其妙地出現一些找不到library的問題
pppps:最近被xxx-firmware搞到生氣,因為他的上傳方式跟xxx-updater不一樣。
https://chromium.googlesource.com/chromiumos/docs/+/master/contributing.md
這邊算是OS的部分,所以要使用"repo upload . -cbr"的方式上傳code
但我完全忘記要回到/m/master這個branch去上傳我的code
一直在用我自己創建出來的branch在上傳,難怪一直打槍我
還好某天午覺睡起來突然發現自己耍笨,就merge回master後再上傳即可
ppppps:
終於發覺為何我一直上firmware都錯誤, 因為repo要看log裡面的Change-ID後才會上傳
雖然在https://www.chromium.org/chromium-os/developer-guide
算是寫得蠻詳盡的
但是實際上測試環境要搞起來還是花了一番功夫
chromeOS為了不讓人隨便埋一些code進去駭客
還是需要做一番設定才可以把你的source code丟到目標機台上
不像一般linux環境只要可以cross compile就可以把程式丟到目標版上去執行
1.下載depot_tools
(裡面有bootstrap的設定要做,不然後面檢查檔案時會出現permission denied)
2.下載chromium OS(使用repo而非git,相關的套件可以透過apt-get取得)
3.export depot_tools,這樣才可以使用cros_sdk進入chormiumOS的compile環境
4.執行cros_sdk後可以看到~/trunk/src/script$,目的是確保每一份chromiumOS都是在相
同的環境下被compile出來
5.build image,一定要是test版本的,這樣後續才有SSH功能可以上傳檔案,會產生一個
chromiumos_test_image.bin
(做之前做好確定一下空間有4GB以上,而且需要兩三個小時的時間)
(參考https://www.chromium.org/chromium-os/developer-guide "Building
ChromiumOS"的順序一步一步來即可)
6.製作USB開機碟,在windows上可用chrome下載Chromebook Recovery Utility
將image給燒錄進去USB隨身碟
7.使用USB開機碟開機(chromiumOS主機需打開這個功能,須進入developer mode)
(default帳號是chronos,密碼是test0000)
8.package要cros_workon --board=${BOARD} start ${PACKAGE_NAME}然後再
cros_workon_make --board=${BOARD} ${PACKAGE_NAME} --install
這樣才真正有載入chroot(root file system)內,才有辦法透過cros deploy傳送進去
9.以logitech-updater為例,進到~/trunk/src/third_party/logittech-updater
利用"emerge-${BOARD} logitech-updater"將package給compile起來
10.再透過cros deploy,利用ssh將修改過的package傳進chromiumOS裡面來debug
11.建立自己的檔案夾,例如叫xxx-updater
12.偷懶一點就把logitech-updater的東西通通copy進去吧,再慢慢來改
13.把~/trunk/src/third_party/chromiumos-overlay/sys-apps/logitech-updater裡面的
ebuild同樣的copy一分到你自己的xxx-updater裡面,請把名稱跟裡面的路徑都改成你自
己的檔案夾路徑
14. 8~10的步驟再做一次,如果成功就會在自己的機台上的/usr/sbin看到執行檔
補充一下之後的開發過程
因為我們必須上傳兩個ebuild檔案
一個是在sys-apps,另一個是在sys-firmware
sys-firmware裡的ebuild雖然寫了firmware的下載位置
但實際上還是需要透過google的工程師幫你上傳到google的local mirror位置
chromebox才可以下載到firmware
所以一般要自己試試的人到這邊就會卡住了
還有usb device在插進去chromebox時
會遇到device的user跟group無法被認定為cfm-firmware-updaters
因此就無法進行FW更新
這邊我自己的克服方法是自己手動增加
還有udev的rule也要注意執行順序
像我自己遇到hidraw的rule比我們設定的rule更晚執行
因此造成hidraw裝置先被認定為是屬於root的group與user
在這邊卡了非常久才發現這個問題...Orz
基本上要使用root帳號去修改/dev/video0的user/group
下指令"chown cfm-firmware-updateers:cfm-firmware-updaters video0"
改完之後下"su cfm-firmware-updaters"將帳號轉成cfm-firmware-updaters
應該就可以模擬udev trigger起來後使用cfm-firmware-updaters帳號
去呼叫aver-updater的狀況
PS:要手動增加user/group(cfm-firmware-updaters/cfm-firmware-updaters),請用root帳號"sudo su" "useradd username"
PPS:另外補充一下上傳動作,也是搞了一陣子才清楚
1. git add your_fires
2. git commit -a(與一般的git commit略為不同,但也是寫些note而已)
3. git cl upload
此時會跳出一堆文字
Credentials for the following hosts are required:
chromium.googlesource.com
These are read from /home/tzaumin/.gitcookies (or legacy /home/tzaumin/.netrc)
You can (re)generate your credentials by visiting https://chromium-review.googlesource.com/new-password
基本上就是去那個網址
如果你是linux環境就把下面一整段的文字(非windows user)
copy後貼在工作站console上去取得認證的
當然你還要去登入google gerrit的帳號之類的,參考這個網址即可
https://www.chromium.org/developers/contributing-code
設定完後再一次git cl upload即可,但我曾經上傳錯位置
這有時候真的搞不太懂為什麼
不過還好google reviewer直接幫我設一個新的folder上傳,顆顆
PPS:最近又因為上傳失敗亂搞造成環境需要重建,卻發現要emerge自己已內建在新版本的firmware updater也失敗。後來仔細一看發現不能跳過build image的過程,不然在單獨build自己的firmware updater時會遭遇不預期的相依性問題。這真的是有點討厭,很容易被人忽略。
PPPS:這次重建環境花費很多時間,因為直接下載source code後馬上使用make或是emerge都會出現undefined reference:brillo的問題(還是有稍微修改過的,似乎C++的compiler對int to uint有更嚴格的規則,會需要修改)。目前在amd64-generic底下有編譯成功,似乎是要把第8項給做完才有辦法編譯成功。可是我們是要在ASUS Chromebox上執行,BOARD必須設定為panther。
補充:整理一下我覺得對的流程,其實guide寫得沒錯,但是我一直以為要先emerge-${BOARD}成功再做cros_workon。但事實上應該就是做完cros_workon再emerge-${BOARD},這樣編譯出來才不會因為lib找不到出現一堆error。
1.(outside)sudo apt-get install git-core gitk git-gui curl lvm2 thin-provisioning-tools \
python-pkg-resources python-virtualenv python-oauth2client
2.(outside)
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
3.(outside) umask 022
4.(outside) mkdir -p ${HOME}/chromiumos
5.(outside)
mkdir -p /usr/local/path/to/source/chromiumos
ln -s /usr/local/path/to/source/chromiumos ${HOME}/chromiumos
6.
(outside)
cd ${HOME}/chromiumos
repo init -u https://chromium.googlesource.com/chromiumos/manifest.git --repo-url https://chromium.googlesource.com/external/repo.git
repo sync -j4
7.(outside) cros_sdk
8.(inside) export BOARD=panther
9.(inside) ./setup_board --board=${BOARD}
10.(inside) ./build_packages --board=${BOARD}
11.(inside) ./build_image --board=${BOARD} --noenable_rootfs_verification test
12.(inside) cros_workon --board=${BOARD} start ${PACKAGE_NAME}
13.(inside) cros_workon_make --board=${BOARD} ${PACKAGE_NAME}
這樣emerge-${BOARD} ${PACKAGE_NAME}就會正確
另外千萬不要進去folder底下做make clean,LD會很莫名其妙地出現一些找不到library的問題
pppps:最近被xxx-firmware搞到生氣,因為他的上傳方式跟xxx-updater不一樣。
https://chromium.googlesource.com/chromiumos/docs/+/master/contributing.md
這邊算是OS的部分,所以要使用"repo upload . -cbr"的方式上傳code
但我完全忘記要回到/m/master這個branch去上傳我的code
還好某天午覺睡起來突然發現自己耍笨,就merge回master後再上傳即可
ppppps:
終於發覺為何我一直上firmware都錯誤, 因為repo要看log裡面的Change-ID後才會上傳
Change-Id
It is important to note that repo uses the Change-Id in your git commit message to track code reviews. So if you want to make a change to an existing CL, you'll want to use
git commit --amend
rather than making an entirely new commit.
This allows you to follow the standard git flow by making multiple changes in a single branch and uploading them together.
真的文件要好好看,但是真的很容易忽略掉.....
pppppppS:
幹,終於發現早就可以上傳,只是遇到Uncomment Upload時我一直沒去追究為什麼
原來只要把要上傳的branch前面的#號拿掉,就可以上傳了
真他媽的搞了太久了
pppppppS:
幹,終於發現早就可以上傳,只是遇到Uncomment Upload時我一直沒去追究為什麼
原來只要把要上傳的branch前面的#號拿掉,就可以上傳了
真他媽的搞了太久了
留言
張貼留言