發表文章

在Gerrit新開一個issue

研究很久,才對repo比較孰悉一點 這次是遇到前一個issue merged上去後要新開一個issue 簡單說就是commit可能之前會累積很多個,要清除掉只剩一個最新的就好 基本上就適用repo sync把commit拉到最新 再把新的source code放上去就好 但因為要新開issue,commit需要包含的格式如下     AVer firmware updater for CAM520, CAM540, VB342 and CAM340     This CL adds AVer firmware updater to handle CAM520, CAM540, VB342     and CAM340 camera firmware update     Refer to CL: 1385964: aver-updater: Add aver-updater firmware ebuild     BUG=None     TEST=we test our device in developer mode on ASUS chromebox.     Main test is hotplug CAM520 CAM540, VB342 or CAM340 to chromebox,     and the firmware automatically download from google local mirror.     Then device update the firmware by aver-updater successfully.     Change-Id: I820920e538b14198e51aafec30b9b312e1da7a31 Cahnge-Id拿掉,才會產生新的issue,不然會繼續上傳到舊的issue去

Google Chrome OS ebuild上傳流程

圖片
還是經常會被ebuild上傳流程給打敗 這邊跟firmware-updater的方式不一樣 每次做都會遇到不一樣的狀況 最好的方式就是做個詳細的解說 當你使用git add或是其他git指令加完要上傳或是修改的檔案後輸入git commit -a 要先去參考一下git log 上面除了敘述之外還有三個欄位TEST、BUG、Change-Id。如果今天是想創建一個新的ebuild project,那就不用Change-Id。TEST與BUG其實填入你做了甚麼測試跟修了甚麼BUG。如果今天只是要修改ebuild後上傳,那就加入之前的Change-Id,Gerrit系統自然會分辨你要上傳的project是哪個。 然後改完之後使用"repo upload ."上傳,這代表上傳這個目錄下的東西就好。 如果通過應該會顯示下面的字眼 如果有問題會出現下面的狀況 老實說這每次都覺得很難搞 第一段是說要增加一個-r1的symlink或是改ebuild版號 第二段是要解決空白鍵的問題 但一直改不過 最後發現下"repo upload . --no-verify" 在這個選項再選NO,就可以建立出新的project Run hook scripts from https://chromium.googlesource.com/chromiumos/manifest.git (yes/always/NO)? NO 一點小經驗: 這次要改ebuild裡面的東西,似乎就需要進版號 說實在頗麻煩,我到現在還是不太懂他的規則 這邊可能還需要去詳讀一下ebuild的上傳規則 目前又遇到問題是新修改的ebuild要上傳被說有空白鍵要消除 如果使用"repo upload . --no-verify" 會跳出Squash the commits with the same Change-Id or ensure Change-Ids are unique for each commit) 這表示有不同的Change-Id在不同的branch裡面 結果再使用git re...

解決ccache: error: execv of /opt/toolchains/oecore-x86_64/sysroots/x86_64-oesdk-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-gcc failed: No such file or directory

*為了解決ccache: error: execv of /opt/toolchains/oecore-x86_64/sysroots/x86_64-oesdk-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-gcc failed: No such file or directory  有toolchains但是編譯一直失敗,想說直接執行gcc看看,但也失敗 可以使用下面的cmd去看看動態函式庫是否有少東西  https://stackoverflow.com/questions/43412649/cross-compilation-for-arm-error-no-such-file-or-directory-command-not-found  readelf -l /bin/ls | grep 'program interpreter'  bin/ls可置換成自己想要的執行檔  範例:  readelf -l /opt/toolchains/oecore-x86_64/sysroots/x86_64-oesdk-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-gcc | grep 'program interpreter'  [Requesting program interpreter:  /usr/local/oecore-x86_64/sysroots/x86_64-oesdk-linux/lib/ld-linux-x86-64.so.2]

Google C++ coding style一點心得

最近開始跟google的工程師做code review 真的是被電得一蹋糊塗阿 對方看得非常仔細,而且提出了很多我程式邏輯不太通順的地方 雖然很多起因是我照之前sample code的邏輯硬是下去改 但的確後續我就沒有特別思考前後是否功能有重複或是多餘的部分 這邊被對方找出非常多問題出來 可以感覺google對沒有用的程式碼非常在意 當然也有可能是這個reviewer自己本身很討厭多餘的東西放在code裡面 除了註解要寫得盡量清楚之外 程式本身可以越精簡越好 我本身對C++並不是很熟悉,常會用C語言的方式硬幹 但是的確對用C++的人來說是很笨的做法 有幾個點特別被點出來,紀錄一下以免以後忘記 1.Google C++不使用#define,改用const 原因是似乎是要預先pre-compile,會多耗資源 2.傳引數使用call by reference而不使用call by value http://wp.mlab.tw/?p=176 原因是會浪費很多記憶體空間 尤其我笨笨的傳struct進去函數裡面,非常糟糕 call by reference就是變數的address跟value在上層跟下層函數都會是一樣的 就不會浪費多餘的空間去記憶 3.class裡private的變數後面要多加"_"做為區別 4.函數名稱使用大寫例如PerformUpdate() 5.區域變數使用小寫加"_",例如video_image_version 6.const前面要多加"k",後面用大寫,例如kDefaultVideoDeviceMountPoint 7.行尾空白鍵要去除

打通新板子上uboot & kernel的網路IC

這次新版子回來有遇到網路不太通的狀況 老闆在kernel做了一些rgmii phy clock delay的調整 主要是透過delay對clock做一些校正 讓icplus ip1001這顆IC的clock可以對準一點 另外uboot應該也是做了同樣的事 這樣網路才可以正常運作 這是一個好的經驗學習,下次要記得有這些東西可以調整

如何建立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 ${P...

在嵌入式linux系統中使用android adbd,PC可直接透過USB對console下指令

可以參考這一篇 http://www.cnblogs.com/zengjfgit/p/6289873.html /* ************************************************************************ * android-tools adb for ARM Linux * 说明: * 有时候还真是系统通过USB线直接连接到ARM主板,这样就不一定需要网络才 * 能传输文件,在做系统更新的时候,有时候也是不错的。 * * 2017-1-16 深圳 南山平山村 曾剑锋 *********************************************************************** */ 一、参考文档: 1 . [Buildroot] [PATCH v4] android-tools: add new package http: // lists.busybox.net/pipermail/buildroot/2015-November/145112.html 2 . Linux modules install http: // www.cnblogs.com/helloworldtoyou/p/6180404.html 二、内核配置: .config - Linux/arm 3.0 . 35 Kernel Configuration ────────────────────────────────────────────────────────────────────────────── ┌────────────────────────── USB Gadget Support ───────────────────────────┐ │ Arrow keys navigate the menu. <Enter> selects submenus ---> . │ │ Highlig...