發表文章

Khadas VIM3 開發板Android的源碼編譯

圖片
 續上篇, 完成源碼的下載後, 如何編譯呢? 首先要把相關的工具準備好, 官網有文章 install-toolchains 說明, 有2個方法, 第一個方法是直接在ubuntu下一些指令, 另一個方法是利用Docker, 把預先弄好的Docker Image抓下來, 再跑起來, 就可以在裡面進行編譯Android源碼的動作。 因為我之前在電腦上已經裝過編譯Orange Pi的Android 12的工具, 不想2個開發板的環境混在一起, 加上想試一下Docker怎麼使用, 所以選擇了第二個方法。 基本上依文件的指令下就可以, 但裝Docker的部份, 若要取得最新的版本, 可能要去查一下Docker的文件。接著取得 wesion / khadas_android:v0.6 這個Image, 然後把它跑起來。 文件上寫下這個指令: sudo docker run --privileged -i -t -v / home / you_name: / home / android wesion / khadas_android:v0.6 bash 全部照抄就可以, 但是/home/you_name:/home/android這個部份要改一下, 前面我們下載Android源碼時, 文件有叫我們建一個工作目錄, 我使用/home/ops/work這個目錄名稱, 所以整個Android源碼的程式都放置在這個目錄下。為了讓Docker跑起來後, 可以存取到Android源碼目錄, 指令的這個部份我改為/home/ops/work:/work (用來取代前面提到的/home/you_name:/home/android)。改成這樣, 下指令, 會看到命令提示字元變成類似: root@3458795s8df812:/work# 這樣就進去Docker這個環境了, 如果要離開, 只要下exit指令就可, 同樣命令提示字元會回到原來的樣子。在這個環境裡下df指令, 就可以看到可以存取的目錄有那些, 我們只要關心是不是有/work這個目錄就可以了。有的話, cd進去, 然後照著官網的 build-android 文件做就可以。 以編譯Android 9 64位元為例: 分為2個步驟: 1. 先編譯bootloader $ cd /home $ cd bootloader / ubo...

Khadas VIM3 開發板的Android源碼下載

 最近在學習Khadas VIM3這個開發板, 特別是跑Android, 第一個問題就是要先下載源碼。官網有文件 download-android-source-code 說明。以下記錄依文件操作所碰到的問題和思考如何解決, 但可能我的想法也不見得是最好的! 1. 先安裝git-lfs工具 查了一下, git-lfs是git的擴充套件, 針對大型檔案儲存對git造成的問題提供解法, 主要是大型檔案就放在雲端, 本地端就放指標就好。看了git-lfs官網說明, 建議要升到3.6.1版本。Khadas的文件仍叫我們安裝2.3.4的版本。如果要試安裝3.6.1版, 可以使用以下網址連結。 https://github.com/git-lfs/git-lfs/releases/download/v3.6.1/git-lfs-linux-amd64-v3.6.1.tar.gz 下載並解壓縮, 下 sudo ./install.sh 指令, 會出現錯誤訊息, 就下git init指令, 再重下 sudo ./install.sh 就不會有錯誤訊息了。 2. 建立工作目錄, 並下載manifest, 為什麼要下載這個檔案呢? 我問了ChatGPT, 他提到在同步特定Android設備的源碼時, 有些部份是特定廠商的Git Repo(也就是該設備特有的檔案物件), 不同的設備使用不同的manifest檔案來區別要同步的源碼。Khadas VIM3維護了3個不同的Android版本, 我先試用主要維護版本Android 9 64位元版。 下以下指令: $ repo init -u https: // github.com / khadas / android_manifest.git -b khadas-vim3-p-64bit 3. 開始同步源碼, 下 repo sync -c -j4, 這裡我才想到, 為什麼不是用git, 而是用repo呢? 同樣問ChatGPT, 他說repo是Google開發的一種git repo管理工具, 主要用於管理多個git repo的Android源碼。它是git的一個封裝工具, 簡化管理多個git repo的操作。這樣我就理解了, 主要是Android源碼太大, 分散放在不同的git repo, 所以要同步所有源碼時, 總不能每個git r...

Orange Pi Zero 2W開發板, 自行編譯好的Android 12映像檔, 如何燒到SD卡, 才能成功開機?

圖片
 Orange Pi官方網站, 可以找到Orange Pi Zero 2W的使用手冊, 一個370頁的PDF檔案, 其中有一個章節提到如何編譯Android 12的原始檔, 如下圖: 第一步是下載原始檔, 由官網給定的Google Drive:  H618_Android12_Source , 將原始檔下載下來, 因為原始檔太大, 被壓縮後還要分成多個檔案。約40GB的大小, 用100mbps的網速, 也花了半小時以上的時間才完成。接下來依手冊說明操作, 先檢查MD5, 確認檔案沒有缺損問題。就可以把多個檔案合併回一個壓縮檔了。然後解壓縮成一個原始檔目錄, 再將Orange Pi Zero 2W特定的修改碼(opizero2w_android12_patches.tar.gz)解壓縮後, 複製到原始檔的目錄去。  第二步是編譯原始碼, 如下圖, 手冊是說, 需要一台跑Ubuntu 22.04的電腦, 16GB以上的記憶體, 以及200GB以上的硬碟空間, CPU當然是愈快愈好。 因為我之前剛裝好一台Ubuntu 24.04的電腦, 雖然版本比較新, 可能會碰到一些問題, 但還是先嘗試一下, 看可不可以。果不期然, 在安裝編譯所需的套件時, 就有兩個套件找不到無法安裝: lib32ncurses5-dev和  libncurses5。就先試著安裝libncurses6, 想可能版本有更新, 也許就可以用了。但其實後面就碰到困難, 編譯會失敗! 如下圖, 在 make -j8 這行指令下下去之後, 就出現錯誤。 錯誤訊息是libncurses.so.5檔案不存在之類的, Google了一下, 發現 libncurses-so-5-library-missing-in-ubuntu-22-04-installation-for-arm64-rapsberr 這個討論串, 看來似乎是發問者, 最後自己找到答案, 回來留下了解法。因為他的文字說明, 沒操作過的, 一開始不太能看得懂。我解釋一下: 1. 如果是64位元的Ubuntu, 需先設定i386外國架構(foreight architecture)。 ----> $ sudo dpkg --add-architecture i386 2. 要修改/etc/apt/so...

QNAP TR-004, TR-002使用感想

圖片
 最近有儲存空間的需求, 買了QNAP的TR-004和TR-002, 這不是NAS, 是DAS, 簡單的說可以看成是有硬體RAID功能的"大"型隨身碟或外接硬碟。 因為重視的是資料保存安全, 所以使用RAID 1或5, 這樣硬碟若有一顆故障, 只要更換就可以。這種外接RAID都是熱插拔, 也不會中斷系統的使用。試過硬碟有問題時, 機器會發出異常聲響, 燈號會閃爍。只是若機器放在機房, 可能不會聽到! 監控軟體就很重要, 管理員從監控軟體可以看到硬碟狀況, 或者主動寄電子郵件通知, 就比較可以掌握實際情況。 QNAP External RAID Manager可以由官網下載使用, 用來查看機器和個別硬碟的情況, 其實是簡單明瞭, 够用了。但可惜的是, 這個官方提供的工具只有Windows和Mac版本, 沒有Linux版本!  針對Linux, 我在網路上找了一下, 發現:  Tr-004 Drive Health Status Linux  這討論文, 有人提到可以下這個指令:   smartctl -d jmb39x-q,0 -a /dev/sdb1 試了一下是可以用的, 在ubuntu要有安裝smartmontools套件: sudo apt install smartmontools  而因為TR-004是使用JMicron晶片, 所以要下-d jmb39x-q參數, 後面加上第幾顆硬碟的參數(0代表第一顆, 1代表第二顆, ...) 指令執行結果, 如下: $ sudo smartctl -d jmb39x-q,0 -H /dev/sda1 smartctl 7.4 2023-08-01 r5530 [x86_64-linux-6.8.0-53-generic] (local build) Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org === START OF READ SMART DATA SECTION === SMART Status not supported: NO DATA ATA commands not implemented [JMB39x] SMART overall-healt...

安裝ubuntu server 24.04, 含RAID 1, GUI 紀錄

圖片
 1. 組裝好PC後, 記得先更新主機板的firmware!  以ASUS主機板來說, 到官網找到對應板子的BIOS下載, 會拿到一個ZIP檔, 解開後, 放到格式化為FAT32的USB隨身碟, 開機按F1或DEL進入BIOS。找到更新firmware的地方, 插入USB隨身碟, 選取新的firmware檔案。(以我的例子來說, 是TUF-GAMING-Z790-PLUS-WIFI-ASUS-1805.CAP的檔案, 更新時間並不快, 要等一下!) 2. 到ubuntu官網取得ubuntu server 24.04的ISO檔。(我拿到的是ubuntu-24.04.1-live-server-amd64.iso) 3. 將ISO檔燒錄到USB隨身碟去, 一般使用balenaEtcher。用該USB隨身碟開機, 依螢幕指示, 輸入帳號等資訊, 然後要設定二個硬碟做成RAID 1(Mirror), 這個部份可以參考以下文章:  https://kifarunix.com/install-ubuntu-24-04-with-uefi-and-software-raid-1/ 。大致上是要先設定二個硬碟為開機碟(boot device), 此時安裝程式會在硬碟上劃分出一個約1GB大小的分區; 然後剩下的空間再分割成一個GPT分區(GPT Partition), 記得要指定為未格式化(unformatted)。然後就可以選取 Create Software RAID (md) 的選項, 將分別位於2個硬碟上的分區組成一個md0的raid 1磁碟並格式化為EXT4格式且mount到/根目錄後, 就可以往後進行將ubuntu server裝到這個目錄。 到這裡還沒完! 重開機後, 檢查RAID 1是否正常運作。記得將開機分區, 由運作中的那個, 複製到另一個去。這樣就完成了! 之後可以拔掉任何一個硬碟, 看可不可以正常開機。 4. Ubuntu server沒有GUI, 所以登入都只有指令列可以使用。但有些工具, 就是需要GUI, 其實GUI還是比較人性化的。可以參考這篇文章:  https://phoenixnap.com/kb/how-to-install-a-gui-on-ubuntu , 大致上來說, 就是先裝一個Display Man...

實體主機轉成虛擬機器後, 原網路卡被隱藏並佔用了之前指定的固定IP (考古文)

圖片
 將老舊的Windows 2003實體主機, 利用VMWare Converter轉成虛擬機器後, 因原主機為固定ip; 打開虛擬機器後, 網路卡變成VMWare的虛擬網卡, 而且自動設為DHCP, 我就將它改為原來的固定ip。結果Windows 2003跑出訊息說這個ip和隱藏的Broadcom NetXtreme GigabitEthernet網卡的ip相同, 可能會造成問題, 要不要改設另一個ip?  我才了解到, 原來Converter會將原來實體網路卡隱藏起來, 並給一張新的虛擬網卡, 而且預設為DHCP。這樣當我將新的虛擬網卡設成原來固定IP時, 二張網卡的IP就會相衝突。合理的解決是將那張隱藏實體網路卡移除。2012年8月的社群討論  Hidden Network Card configurations (Spiceworks Community)  就已經有這個問題的解法。 因為原文是單純文字描述解法, 我將其實際操作畫面附上, 可以更快了解其意: 大意如下: 1. 打開命令提示字元視窗 2. 打指令: set devmgr_show_nonpresent_devices=1 3. 打指令: Start DEVMGMT.MSC 4. 出現裝置管理員, 選'檢視'-> '顯示隱藏裝置'; 然後展開'網路介面卡', 就會看到如上圖的多張隱藏網卡, 選取要移除的, 按右鍵, 選'解除安裝'即可。 -------------------------------------------------------------------

sendmail routing: virtusertable, mailertable, smarttable

圖片
 公司老闆對信件的管制都會有一些要求, sendmail的routing機制, 其實都可以應付的來, 其中3個主要設定表格應該就可以處理大部份狀況: virtusertable, mailertable, smarttable, 分別討論如下。 1. virtusertable   這個表格原本用來做主機代管, 一台主機要host 10家公司(網域)的email, 必然會收到10個不同網域的信件, 但實際上這主機的名稱只有一個; 這時, 就用這個表格來將對應虛擬email address到實際的位址。例如: sales@example.com            jill info@book.org                    sara@writer.com 2. mailertable  這個表格用來決定特定收件者網域的信要用什麼協定轉寄到那台主機(或網域), 它不管寄信者是誰。所以如果你想要設定的規則是"由誰寄來的都如何....", 那麼這個表格無法處理。它可以處理的是"寄到某網域的信都轉到那裡..."這樣的要求, 例如: book.org                  smtp:writer.com 這樣的設定, 會將要寄到book.org這個網域的信都轉寄到writer.com這個網域, 而且改用smtp這個協定來傳送, 現在一般都使用esmtp這個比較新的協定, 如果有比較老舊的主機無法處理新的協定, 利用這個mailertable, 也是一個方式。 writer.com               local:pat 這個設定可以將所有要寄到writer.com網域的信, 都轉寄給本機上的pat這個使用者。  writer.net                 esmtp:[192.16...