2017年4月4日 星期二

BeagleBone Black 筆記: toolchain, kernel build...

因為過程允長繁瑣,這邊做個筆記,有需要的請自取

開發環境

  • Win7 64bit 家用進階版
  • CPU: i5
  • RAM: 6G
  • VirtualBox 5.0.20

1. 安裝 debian

113 mirror 下載 debian-8.0.0-amd64-DVD-1.iso,...DVD-2.iso、...DVD-3.iso 不用下載,雖然安裝過程中會問你要不要 scan 其他的 CD/DVD,但把另外兩個 iso 放進去也沒什麼反應(可能要請其他先進解釋)。

一般來說我會準備 2G RAM 給虛擬機器,有些人認為只要 1G,這方面就看各位高興,至於怎麼安裝我想這部份大家都會就跳過。

2. 修改桌面

2.1 快速開啟 terminal

因為筆者之前幾乎都是使用 Ubuntu,習慣使用 ctrl+alt+t 叫出 terminal,debian 需要花點功夫:
  1. 點選左上角 Activities
  2. "Type to search..." 輸入 settings
  3. 選擇 Settings > Keyboard > Shortcuts > Custom Shortcuts
  4. 點選 "+" > name 輸入 terminal,command 輸入 gnome-terminal
  5. 點選 Add 後會發現這一條 shortcut 仍然是 Disable,點選 Disable 後輸入熱鍵 ctrl+alt+t。
如果您跟筆者一樣對 terminal 的顏色不滿意,打開 terminal:
  1. Edit
  2. Profile Preferences
  3. Colors

2.2 致能 root login

預設 Desktop 不允許以 root 登入,但我們只是要拿此虛擬機器做開發用,在那邊 su or sudo 太囉唆了,按照以下步驟解除封印:
  1. su 切換成 root
  2. vim /etc/gdm3/daemon.conf
  3. 找到 [security],在下面新增一行 AllowRoot=true
  4. vim /etc/pam.d/gdm-password
  5. #auth required pam_succeed_if.so user != root quiet_success
  6. reboot

3. Step 1: Initial configuration for a brand-new Debian Jessie image

Step 1-5 參考自 Exploring BeagleBone Chapter 7: Cross-Compilation and the Eclipse IDE,因為筆者照這個 url 安裝還是碰到不少麻煩,這邊算是做個整理補充。

本以為直接 apt-get install screenfetch 就好了,不過卻發現找不到這個 package,如果你碰到跟我一樣的問題,打開 /etc/apt/sources.list,在最下方增加:
deb http://ftp.debian.org/debian jessie main non-free contrib
deb-src http://ftp.debian.org/debian jessie main non-free contrib
deb http://ftp.debian.org/debian jessie-updates main contrib non-free
deb-src http://ftp.debian.org/debian jessie-updates main contrib non-free
註解掉 "deb cdrom..."
#deb cdrom:[Debian GNU/Linux 8.0.0 _Jessie_ - Official amd64 DVD Binary-1 20150425-12:54]/ jessie contrib main
這樣就能以 apt-get install 安裝 screenfetch 了。

4. Step 2: Update the sources lists

這個步驟中會先要求你安裝 curl,可能會碰到錯誤訊息告訴你 /var/lib/dpkg/lock 鎖住了,reboot 再安裝一次 curl,Google 很多答案是叫你把這個檔案刪了,個人不建議。

5. Step 3-5

這幾個步驟沒有什麼意外,記得不要打錯字就好,如果有遺漏請留言。

6. 設定共用資料夾

筆者的習慣是 Windows 與虛擬機器共用資料夾,如果是 Ubuntu 把 VBoxGuestAdditions_5.0.20.iso 插入會自動安裝,但 debian 就需要一些功夫:
  1. apt-get update
  2. apt-get install build-essential module-assistant
  3. m-a > "PREPARE Configure the system to compile modules"
  4. 插入 VBoxGuestAdditions_5.0.20.iso
  5. cd /media/cdrom
  6. sh VBoxLinuxAdditions.run

7. "Manual Kernel Build for the BBB" 補充說明

Exploring BeagleBone Chapter 7: Cross-Compilation and the Eclipse IDE 中有一節 "Manual Kernel Build for the BBB",筆者實驗時碰到一些問題,以下是解決方法。

7.1 ./build_kernel.sh 無法下載 gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz

這是因為 Linaro 改變了 url,您需要修改 bb-kernel/scripts/gcc.sh:
#...
gcc_toolchain () {
#before:
#   site="https://releases.linaro.org"
#after:
    site="https://releases.linaro.org/archive"
}
#...

7.2 無法下載 root file system

"Downloading a Root File System" 這一小節的 http://rcn-ee.net/deb/minfs/jessie/debian-jessie-minimal-armhf-2014-11-10.tar.xz 已經失效,請改用:
https://rcn-ee.net/rootfs/eewiki/minfs/debian-7.8-minimal-armhf-2015-01-20.tar.xz

7.3 /etc/fstab

分隔用的空白只能有一個,多一個少一個都不行:


7.4 sfdisk 參數

網站上的參數亂掉無法使用,請改用以下方式(來源):
 sfdisk --in-order --Linux --unit M ${DISK} <<-__EOF__
1,48,0xE,*
,,,-
__EOF__
這段指令的意思是第一個分區從 1MB 開始,大小 48MB,分區格式為WIN95: DOS 16-bit FAT, LBA-mapped(0xE),bootable(*),剩餘則全部分割為 Linux(0x83),not-bootable(-)。

7.5 uEnv.txt

網站上提供的 uEnv.txt 行不通,u-boot 會報錯找不到 loadzimage (但是有 loadimage):

但改成 loadimage 也行不通,這裡有一份 uEnv.txt 經實驗可行

7.6 apt-get update 失敗

"6.10 Flashing the BBB eMMC with this Image" 第一個步驟是執行 apt-get update,但是筆者碰到以下錯誤:


依下圖修正(來源)


在燒錄 eMMC 前記得參考這篇文章修改 uEnv.txt,否則 u-boot 仍然從 MicroSD 開機。

心得

過程中花最多時間的地方是 uEnv.txt,裡面的語法完全看不懂,只能說運氣好矇對了,看來路還長著呢...

10 則留言:

  1. Hi~
    DigiKey維護的eewiki(Linux on ARM)上有比較簡單kernel的編譯方法,
    另外kernel也有不同版本可以選擇
    https://eewiki.net/display/linuxonarm/BeagleBone+Black

    回覆刪除
  2. 感謝回應

    我比對了一下kernel build的部份,您提供的url上面的範例使用的branch比較新,但過程其實一樣,不過其他細節目前還搞不懂(例如uEnv.txt語法)...看看能不能從您提供的網站挖到一點東西

    回覆刪除
  3. Hi~
    DigiKey的Robert Nelson有在定期維護script,不用自己動手改路徑
    向Robert Nelson提問也可以得到回應

    另外armbian也是一個很好參考對象(中國的便宜方案為主)
    https://github.com/igorpecovnik/lib
    我都拿armbian的kernel+u-boot裡面的資料(ex patch,script,uEvn ..)來兜自己的buildroot

    回覆刪除
    回覆
    1. 請問您使用的是哪一版呢?我這邊使用 origin/am33x-v3.18, 當然我相信 4.x 的版本一定修正了這個問題

      armbian很棒,可惜沒有支援am335x

      刪除
  4. 我使用Processor SDK似乎沒這麼多問題
    http://www.ti.com/tool/PROCESSOR-SDK-AM335X

    回覆刪除
  5. Hi~
    平時都是跟著eewiki的最新版走,因為偶爾會有u-boot和kernel兜不起來的問題,每次都直接換成新
    不過某次kernel更新後就無法對應我的初代白色BeableBone了
    會造成PMIC突然shutdown,就算是外接power也會(用公司BeableBone Black 2g版則不會)
    之後就把BeableBone除役了(當server用)
    其他時間都是拿中國的便宜方案在玩,armbian就成了我的參考對象(=^_^=)

    回覆刪除
    回覆
    1. 一般應該是穩定後不會一直更新kernel吧,再說這類SDK常常對支援的主脈的其各硬體版本都不是很相容了,更何況拿到支系的白BB上去用。
      所以我也一直不敢買其他BB green,BBB wifi,感覺要擦不少屁股啊…
      說到底,玩這種板子,到最後就是要各憑本事了…

      刪除
    2. 強者我朋友用了對岸設計的ARM SoC,說運作起來很燙,不知道樓樓上的先進有碰過嗎?

      個人淺見玩板子就是練解決功力,如果都弄好了那還要玩什麼?^^"

      刪除
    3. Hi~
      全志嗎?用過舊的A13和H3,舊的單核不會燙,但是多核心的H3就會燙
      CPU滿載全速執行5x~60度之間,這是貼了RPI散熱片的後的溫度
      ARM進入多核心後都溫度都高
      Rk3288也是要加大片的散熱片降溫
      wandboard的i.mx6也是一大片的散熱片

      刪除