BBB/BBG(W) - 第一次開機(可能)要做的事情

這裡整理並記錄幾件 BBB/BBG(W) 開機後(可能)要做的事,剛拿到其它的 Embedded Linux 開發板要做的事情也蠻雷同的,或許本文也可以作為參考。
  • 如果您覺得還有任何值得一做的事,麻煩請告訴我,我會繼續補充在本文之中。
  • 這裡也有一份我自己整理較常用的 Linux 指令彙整

目錄

1. 遠端/本地登入
2. 登入並修改/新增帳號密碼
3. 將新增帳號加入 sudoers
4. 資訊查看類
  • 看 pre-built image, kernel, node, npm,  gcc, make 等版本
  • 看記憶體用量
  • 看磁碟用量/分割區資訊
  • 看 ip
  • BBB 與 BBG(W) 兩者在硬體介面上最大的差異是,BBG 將 HDMI 給拿掉,BBGW 又將 Ethernet 介面再拿掉。對 BBG(W) 而言,沒辦法在本地接上螢幕/鍵鼠登入。
  • 若使用 BBGW,第一次開機後可以先將 BBGW 的對外網路連結設成你家的 WiFi Router,官網有提供使用手機來設定 BBGW 連外網的方法。(或把 PC 無線網路接到 BBGW,瀏覽器會跳出設定視窗)
  • BBB/BBG(W) 的 ip 以及遠端登入說明
    • 192.168.7.2
      • USB 模擬,將 BBB 插上電腦 USB 後,你就可以透過這個 ip 或 beaglebone.local 遠端登入進入。可以在作業系統透過一些設定,讓 BBB 的對外連線是透過共享你的電腦(host)的網路
      • 以瀏覽器進入 http://192.168.7.2 可看到 Bone101 說明頁面
    • 192.168.8.1
      • BBGW 才有,這是 BBGW 的 Soft AP,你電腦的無線網路可以接到這台 AP,然後以此 ip 登入 BBGW
    • xxx.xxx.xxx.xxx
      • BBB/BBG 透過乙太網路或 BGGW 透過 WiFi 上網,你家的 Router 配發給它的 ip,例如 192.168.1.18、10.1.1.27 (ifconfig 看 eth0 或 wlan0)
    • 可以用 ssh root@beaglebone.local 登入
      • 若 host name beaglebone.local 不能用,你需要安裝 windows 的 Bonjour Print Services,或者直接直接用 IP 來 ssh 進去吧!
    • BBB/BBG(W) 預設系統內建有 Clould9 IDE,可用瀏覽器登入
      • 登入後,IDE 最下方也有 terminal 可以使用 (以 root 登入)
      • 網址:<BBB_ip>:3000
        • 範例:192.168.7.2:3000 或 192.168.1.18:3000
  • 本地端登入 - 接上螢幕、鍵鼠
  • 本地端登入 - 使用實體 UART 登入 BBB/BBG(W)
    • 接法請見下圖
    • UART 設定:115200/8N1 (Handshake None)
    • 要接觸到 bootloader,就要用此方式連接 BBB (其他登入方式都已經是開機完後的事了)

  • 以 ssh root 登入
    • host:~$ ssh root@xxx.xxx.xxx.xxx  (ip 如 192.168.7.2, 192.168.1.18 等,見第 1 節說明)
  • 以預設帳號 debian 登入
    • host:~$ ssh debain@xxx.xxx.xxx.xxx (密碼是 temppwd)
  • 變更密碼
    • bbb:~# passwd (依指示鍵入新密碼)
  • 新增帳戶 (以 root 登入進行新增)
    • bbb:~# adduser simen (依指示鍵入資料,主要是輸入密碼,其他可 Enter 跳過)
  • 以新建帳號登入試試 (請將 simen 換成你自己的帳戶名稱)
    • host:~$ ssh simen@xxx.xxx.xxx.xxx 

3. 將新增帳號加入 sudoers

  • 新的帳號沒有超級使用者權限,也無法使用 sudo 執行受限指令。你可以把新的帳戶加入 sudoers
  • 先以 root 登入
  • 執行 visudo
    • bbb:~# visudo (接著會進入 vi 編輯器)
    • 在檔案內新增以下內容 (紅色處。新增完後 Ctrl + o  存檔離開)
      • #includedir /etc/sudoers.d
        %admin  ALL=(ALL) ALL
        debian  ALL=NOPASSWD: ALL
        simen  ALL=NOPASSWD: ALL

4. 資訊查看類

  • Pre-built image 版本 (以下 2 種皆可)
    • bbb:~# cat /etc/dogtag
    • bbb:~# cat /ID.txt
      • BeagleBoard.org Debian Image 2016-05-27
  • Linux kernel 版本 (以下 2 種皆可)
    • bbb:~# uname -a
      • Linux beaglebone 4.4.9-ti-r25 #1 SMP Thu May 5 23:08:13 UTC 2016 armv7l GNU/Linux
    • bbb:~# cat /proc/version
      • Linux version 4.4.9-ti-r25 (root@b3-jetson-tk1-2gb) (gcc version 4.9.2 (Debian 4.9.2-10) ) #1 SMP Thu May 5 23:08:13 UTC 2016
  • 看 node 與 npm 版本
    • bbb:~# node -v
      • v0.12.13
    • bbb:~# npm --version
      • 3.8.2
  • 看 gcc 與 make 版本
    • bbb:~# gcc --version
      • gcc (Debian 4.9.2-10) 4.9.2... (略)
    • bbb:~# gcc -v
      • Using built-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.9/lto-wrapperTarget: arm-linux-gnueabihf... (略)gcc version 4.9.2 (Debian 4.9.2-10)
    • bbb:~# make --version
      • GNU Make 4.0
        Built for arm-unknown-linux-gnueabihf
        ... (略)
  • 看記憶體用量
    • bbb:~# free


  • 看磁碟用量/分割區資訊 (以下為常用指令,若非 root ,有些指令需要以 sudo 執行)
    • bbb:~# df -h
    • bbb:~# lsblk -l
    • bbb:~# fdisk -l
    • bbb:~# fdisk -l /dev/mmcblk1p1
    • bbb:~# cat /proc/partitions
      • 資訊雷同,就不列執行範例了,自己試試看吧!!
  • 看 ip
    • bbb:~# ifconfig
    • bbb:~# iwconfig

  • 使用 Debain 內建指令 connmanctl
    • bbb:~# connmanctl scan wifi
    • bbb:~# connmanctl services
    • bbb:~# connmanctl services wifi_xxx_managed_psk
    • bbb:~# cat << EOF > /var/lib/connman/<SSID>-psk.config
      [
      service_wifi_xxx_managed_psk]
      Type = wifi
      Name =
      <SSID>
      Passphrase = <passphrase>
      EOF
    • bbb:~# connmanctl connect wifi_xxx_managed_psk
  • 使用 wicd-curses (圖形化選單介面, 若無此工具要先安裝, 建議用上面的 connmanctl 就好)
    • bbb:~$ wicd-curses
    • 有點難說明,但用起來不會很難,請參考下圖(由左至右),或 google 一下用法



  • 先 update 再 upgrade
    • bbb:~$ sudo apt-get update
    • bbb:~$ sudo apt-get upgrade
  • 注意:更新完之後,WiFi 設定若跑掉,請從 192.168.7.2 登入後,再 connmanctl 一次
  • 查看系統時間
    • bbb:~$ date
  • 設定時區,以下兩種方式都可以 (若一個不行,就試試另外一個吧!)
    • bbb:~$ sudo dpkg-reconfigure tzdata ( 設定選: "Asia/Taipei" )
    • bbb:~$ sudo timedatectl set-timezone Asia/Taipei
  • 若系統時間不對,安裝 ntp 網路對時
    • bbb:~$ sudo apt-get install ntp
    • 裝完後應該用 date 指令查看一下,時間應該就對了
  • 預設的 hostname 為 beaglebone
    • bbb:~# cat /etc/hostname
  • 方式 1
    • bbb:~# echo 'your-hostname' > /etc/hostname
    • 若不是用 root,需要 sudo 開新 shell 來執行
      • bbb:~$ sudo sh -c "echo 'your-hostname' > /etc/hostname"
  • 方式 2 (編輯 /etc/hosts 檔)
    • bbb:~# vi /etc/hosts
    • 進去後編輯 127.0.0.1 beaglebone 那一行,把 beaglebone 字樣換成你想要的hostname 即可
  • 改完重開機後登入,原本 console 提示字符會:
    • 從 simen@beaglebone:~$ 變為  simen@your_hostname:~$ 
    • 可登入你家的 WiFi Router 看一下區網中裝置連線的資訊,應該也會發現變更

9. 試試原生編譯

  • 準備一支 hello.c,內容如下
    • #include <stdio.h>
      int main()
      {
          printf("Hello World! BBGW!\n");
          return 0;
      }
  • 編譯 (以下你要用 make 或 gcc 都可以)
    • bbb:~$ make hello
    • bbb:~$ gcc hello.c -o hello
  • 查看編好的 hello 執行檔
    • bbb:~$ file hello
      • hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=(略), not stripped
  • 執行看看
    • bbb:~$ ./hello
      • Hello World! BBGW!
  • 在 Host PC 安裝交叉工具鏈
    • host:~$ sudo apt-get install gcc-arm-linux-gnueabihf make
  • 準備一支 cross-hello.c,內容同第 9 節的 hello.c
  • 編譯
      • host:~$ make CC=arm-linux-gnueabihf-gcc CFLAGS="-Wall -O2" cross-hello
      • host:~$ file cross-hello
        • hello-cross: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, (略), not stripped
    • 使用 scp 複製到 BBB/BBG(W) 後執行看看 (這裡用 ssh 遠端執行,或遠端登入再過去執行亦可)
      • host:~$ scp cross-hello debian@192.168.1.18:~/
      • host:~$ ssh debian@192.168.1.18 ./cross-hello
     
     
    **************************************
    [2016/8/14] 謝謝 Dennis Kuo 在 EE 狂想曲粉絲專頁跟讀者們的分享:

    以下不是第一次開機就要做的事,但是要紮實掌握每片嵌入式系統板可能需要會的地方。

    1. 懂得如何燒錄 bootloader(e.g. uboot),甚至更早啟動主晶片(MCU/CPU)獨有的initial loader code,也就是整個板子上面如果外掛 Flash/ROM 是空的沒放 Linux 或損毀,甚至處理晶片內建的 Flash/ROM 啟動程式壞了,都要能夠知道用哪些工具處理及救援。
    2. 最早空板時,網路還不通時該怎麼針對系統晶片下指令或填 register,以及上傳bootloader/kernel/file system? 是使用 Uart 還是 i2c 去溝通?這些可能每種板子作法大同小異,但是可能還是需要知道。
    (以上淺見,其實文不對題,因為文章前提是 Linux 系統已經 ready。:P)

    • 對了,如果板子要連外上 Internet 或透過 smtp server 發送 email 等等,要再多注意 DNS的設定,還有 gateway 設定,就要看整個網路架構規劃如何。
     
     
     
     
     

    simen

    An enthusiastic engineer with a passion for learning. After completing my academic journey, I worked as an engineer in Hsinchu Science Park. Later, I ventured into academia to teach at a university. However, I have now returned to the industry as an engineer, again.

    Post a Comment (0)
    Previous Post Next Post