快速瀏覽

BPI-M5 入門


介紹

Banana Pi M5 是新一代單板計算機設計,採用 Amlogic S905X3 四核 Cortex-A55 (2.0xxGHz) 處理器。Mali-G31 MP2 GPU,帶有 4 個執行引擎 (650Mhz)。支持 4GB LPDDR4 和 16G eMMC 閃存。它有 4 個 USB 3.0 端口,1GbE LAN 端口。

規格

  • SoC – Amlogic S905X3 四核 Cortex-A55 處理器 @ 高達 2.0 GHz
  • Mali-G31 MP2 GPU @ 650Mhz
  • 系統內存 – 4GB LPDDR4
  • 存儲 – 16GB eMMC 閃存(選項高達 64GB),MicroSD 插槽高達 2TB
  • 視頻輸出 – HDMI 2.1 高達 4Kp60,帶 HDR、CEC、EDID
  • 音頻 – 3.5 毫米音頻插孔,數字 HDMI 音頻
  • 連接性 – 千兆以太網
  • USB – 4x USB 3.0 端口,通過 VL817 集線器控制器,1x USB-C 端口(僅用於電源?)
  • 擴展 – 40 針 Raspberry Pi 接頭,帶有 28x GPIO、UART、I2C、SPI、PWM 和電源信號(+5V、+3.3V、GND)。
  • 調試 – 3 針調試頭
  • Misc – 重置、電源和 U-boot 按鈕;電源和活動 LED;紅外線接收器
  • 電源 – 5V @3A 通過 USB Type-C 端口
  • 尺寸 – 92x60mm(與 Raspberry Pi PCB 尺寸不同,但在測量過程中可能包括連接器)
  • 重量 – 48 克

發展


準備

  1. 準備一根usb-串口線,一個5V/3A適配器type-c電源。串口線用於控制台調試,type-c線用於安卓鏡像下載和ADB調試。
  2. 為linux開發準備至少8GB的SD卡,android只支持emmc啟動。
  3. SOC rom 的第一個啟動介質是 emmc,所以如果 emmc 可以從 SDcard 啟動,如果 emmc 可以啟動任何鏡像,更多信息請參閱板啟動順序。
  4. 在Android SDcard是mmc0,emmc是mmc1,但在Linux SDcard是mmc1,emmc是mmc0。
安卓

準備
  1. 下載並安裝AML Usb 刻錄工具,用於通過type-c下載android鏡像,僅支持windows。
  2. 下載最新的android鏡像,並確認md5校驗和正確。
使用 Usb 刻錄工具安裝映像
  1. 打開USB_Burning_Tool.exe,選擇菜單File->Import image,選擇android鏡像文件aml_upgrade_package.img。
M5安卓安裝1.png

2. M5板斷電,按住40pin接頭旁邊的SW4按鈕,插入type-c usb線到PC

M5安卓安裝2.png

3. 單擊開始按鈕並等待升級完成。

M5安卓安裝3.png

4. 燒錄成功後,拔下type-c usb,連接電源適配器啟動。

M5安卓安裝4.png

5.  單擊停止按鈕取消升級過程並關閉 USB 刻錄工具。

使用 Aml Flash 工具安裝映像

aml-flash-tool是用於 Amlogic android 映像的 linux 平台開源閃存工具。

構建 Android 源代碼

1.獲取Android 9.0源代碼

2.構建Android 9.0源代碼

請閱讀源代碼README.md

Android DTB 疊加

Bananapi M5 DTBO idx 值表,發布鏡像中默認 idx 值為 0。

Bananapi M5 DTBO idx值表
idx 值設備樹覆蓋描述
0android_p_overlay默認 dtbo,沒用
1wifi_bt_rtl8822cs啟用 bpi rtl8822cs wifi/bt 模塊
2i2c2啟用 i2c 2
3i2c3啟用 i2c 3
4錄音室啟用sdio
5串口1啟用 2 針 UART 1
6uart1_cts_rts啟用 4 針 UART 1
7串口啟用 2 針 UART 2
8hifi_pcm5122啟用 i2s pcm5122 HiFi DAC

如何申請新的 dtbo

1. 通過 sysfs 的 ADB 命令

 root@dangku-desktop:/tmp# adb root
 restarting adbd as root
 root@dangku-desktop:/tmp# adb remount
 remount succeeded
 root@dangku-desktop:/tmp# adb shell
 bananapi_m5:/ # echo dtbo > /sys/class/unifykeys/name                                                
 bananapi_m5:/ # echo "1" > /sys/class/unifykeys/write                                                
 bananapi_m5:/ # reboot

2. 通過 sysfs 的 Uart 控制台命令

 console:/ $ 
 console:/ $ su
 console:/ # echo dtbo > /sys/class/unifykeys/name                              
 [  115.702781@0] unifykey: name_store() 1302, name dtbo, 4
 [  115.702856@0] unifykey: name_store() 1311
 console:/ #
 console:/ # echo "1" > /sys/class/unifykeys/write                              
 [  129.262659@0] unifykey: write_store()  is a string
 [  129.262733@0] unifykey: dtbo, 1, 1
 [  129.265312@0] unifykey: amlkey_write 393
 [  129.292347@1] emmc_key_write:149, write ok
 console:/ # 
 console:/ # reboot

3.設置應用(待辦事項)

檢查啟動uart調試信息並確認實際加載的是哪個dtbo,這裡“1”表示設置idx=1應用wifi_bt_rtl8822cs dtbo。

 load dtb from 0x1000000 ......
       Amlogic multi-dtb tool
       Single dtb detected
 find 2 dtbos
 dtbos to be applied: 1
 Apply dtbo 1

Unifykeys 存儲在特定的 emmc 部分,在 USB_Burning_Tool 中選擇“正常擦除”不會擦除此數據以備下次更新,如果您希望圖像下載後應用默認的 dtbo idx,則必須選擇“全部擦除”。

M5 android 擦除所有.png

使用特定的 DTBO 默認構建 Android 映像。

1.默認的內建overlay在device/amlogic/bananapi_m5/Kernel.mk中定義,你可以在這裡添加一個新的overlay dtbo。

 DTBO_DEVICETREE := android_p_overlay wifi_bt_rtl8822cs i2c2 i2c3 sdio uart1 uart1_cts_rts uart2 hifi_pcm5122

2.默認應用DTBO idx在device/amlogic/bananapi_m5/BoardConfig.mk中定義,您可以更改idx值來設置默認應用哪個覆蓋dtbo。

 BOARD_KERNEL_CMDLINE += androidboot.dtbo_idx=0

3.DTS文件在common/arch/arm/boot/dts/amlogic/overlay/bananapi_m5/

有關 android 設備樹覆蓋的更多信息,請參閱google android 官方網站

安裝 OpenGapps

1. 從OpenGapps下載安裝包,Android 發布鏡像是 arm/android 9.0 變體。

Opengapps.PNG

2. 下載device_id.apk

3. 將 OpenGapp 包複製到 udisk 或 sdcard 根目錄。

4. 在udisk或sdcard根目錄下創建一個名為factory_update_param.aml的txt文件,內容如下android恢復參數內容,文件名替換為實際下載的包。

磁盤:

 --wipe_cache
 --update_package=/udisk/open_gapps-arm-9.0-pico-20210327.zip

SD卡:

 --wipe_cache
 --update_package=/sdcard/open_gapps-arm-9.0-pico-20210327.zip
5. 將 udisk 或 sdcard 插入開發板並通電。
6. OpenGapps 安裝和認證。
紅外遙控定制
在開始這項工作之前,需要了解一些android基本概念和知識。
  • Linux 內核輸入鍵事件。
  • 安卓鍵碼。
  • Linux 鍵碼映射到 android 鍵碼。
  • Android Adb 功能可在您的 PC 上運行

1. 從設備中拉取遠程文件

 # adb pull /vendor/etc/remote.cfg
 # adb pull /vendor/etc/remote.tab 

2.修改remote.cfg,開啟遠程調試信息

遠程配置文件

推回 remote.cfg

 # adb root
 # adb remount
 # adb push remote.cfg /vendor/etc/
 # adb shell
 m5_mbox:/ # chmod 644 /vendor/etc/remote.cfg
 m5_mbox:/ # remotecfg -c /vendor/etc/remote.cfg -d                                                  
 cfgdir = /vendor/etc/remote.cfg
 work_mode = 1
 repeat_enable = 0
 debug_enable = 1
 max_frame_time = 1000

3. 獲取遠程鍵碼

一個接一個按下你的遙控鑰匙,然後打印dmesg得到遙控custom_code和每個遙控鑰匙代碼。

 # adb shell dmesg | grep framecode=

Keycode.png

自定義代碼 = 0xfe01鍵碼 = 0x00, 0x01, 0x09, 0x02, 0x0a, 0x05, 0x04 0x06, 0x03, 0x0b, 0x40, 0x48, 0x44

4.修改remote.tab,將scancode映射到android keycode

遠程標籤.png

按下 remote.tab 並測試每個鍵是否有效

 # adb root
 # adb remount
 # adb push remote.tab1 /vendor/etc/
 # adb shell
 m5_mbox:/ # chmod 644 /vendor/etc/remote.tab
 m5_mbox:/ # remotecfg -c /vendor/etc/remote.cfg -t /vendor/etc/remote.tab -d                                                                                                                               
 cfgdir = /vendor/etc/remote.cfg
 work_mode = 1
 repeat_enable = 0
 debug_enable = 1
 max_frame_time = 1000
 tabdir = /vendor/etc/remote.tab
 custom_name = nec-test
 fn_key_scancode = 0xffff
 cursor_left_scancode = 0xffff
 cursor_right_scancode = 0xffff
 cursor_up_scancode = 0xffff
 cursor_down_scancode = 0xffff
 cursor_ok_scancode = 0xffff
 custom_code = 0xfe01
 release_delay = 80
 map_size = 13
 key[0] = 0x74
 key[1] = 0x1008b
 key[2] = 0x90066
 key[3] = 0x20069
 key[4] = 0xa006a
 key[5] = 0x50067
 key[6] = 0x4006c
 key[7] = 0x6001c
 key[8] = 0x30072
 key[9] = 0xb0073
 key[10] = 0x40009e
 key[11] = 0x4800a4
 key[12] = 0x440071

5. 重啟板子

Linux

準備
1. Linux 鏡像支持 SDcard 或 EMMC 啟動,但您應該首先閱讀啟動順序
2. 如果您想從 SD 卡啟動,請確保可啟動 EMMC 已格式化,更多信息請參閱擦除 EMMC 以進行 SD 卡啟動
3. 如果您想從 EMMC 啟動並使用 Sdcard 作為存儲空間,請確保 SDcard 已格式化且未刷入 Linux 映像。
4. 在你的 Linux PC 上安裝 bpi-tools。如果您無法訪問此 URL 或任何其他安裝問題,請轉到bpi-tools源代碼庫,手動下載並安裝此工具。
 $ apt-get install pv
 $ curl -sL https://github.com/BPI-SINOVOIP/bpi-tools/raw/master/bpi-tools | sudo -E bash
5、下載Linux最新的Linux Image,確認md5校驗和正確。
6. 默認登錄:pi/bananapi 或 root/bananapi
將映像安裝到 SD 卡

1.在Linux上用bpi-tools安裝鏡像,將SD卡插到Linux PC上運行

 $ sudo bpi-copy xxx-bpi-m5-xxx.img.zip /dev/sdX

2、Linux下用dd命令安裝Image,如果自動掛載,則卸載SDcard設備/dev/sdX分區。實際上 bpi-copy 與此 dd 命令相同。

 $ sudo apt-get install pv
 $ sudo unzip -p xxx-bpi-m5-xxx.img.zip | pv | dd of=/dev/sdX bs=10M status=noxfer

3. 在 Windows、Linux 和 MacOS 上使用 Etcher 安裝 Image。

Balena EtcherBalena的一個開源項目,將閃存 OS 映像複製到 SD 卡和 USB 驅動器
將映像安裝到 EMMC
1. 準備一張已刷入 Linux 映像的 SD 卡和帶有此 SD 卡的啟動板。
2、將Linux鏡像複製到udisk,將udisk插到板子上掛載。
3. 使用 bpi-tools 命令安裝
 $ sudo bpi-copy xxx-bpi-m5-xxx.img.zip /dev/mmcblk0
4. 用dd命令安裝,如果自動掛載,則umount mmcblk0p1和mmcblk0p2分區。實際上 bpi-copy 與此 dd 命令相同。
 $ sudo apt-get install pv
 $ sudo unzip -p xxx-bpi-m5-xxx.img.zip | pv | dd of=/dev/mmcblk0 bs=10M status=noxfer
5. 下載完成後,安全斷電並彈出SD卡。
構建 Linux 源代碼

1.獲取Linux bsp源代碼

2.構建bsp源代碼
請閱讀源代碼README.md
3.如果你想建立的uboot和內核分開,請下載UBOOT內核而已,得到的工具鏈,啟動腳本和其他配置文件BPI-M5-BSP
DTB 疊加

1、DTB覆蓋用於40pin gpios多功能配置,安裝在vfat引導分區,可以用mount命令查看掛載點。

 root@bananapi:~# ls /boot/firmware/overlays/
 custom_ir.dtbo      pwm_b-backlight.dtbo  spi0.dtbo
 ds3231.dtbo         pwm_c-beeper.dtbo     uart1_cts_rts.dtbo
 hifi_pcm5102a.dtbo  pwm_cd-c.dtbo         uart1.dtbo
 hifi_pcm5122.dtbo   pwm_cd.dtbo           uart2.dtbo
 i2c0.dtbo           pwm_ef.dtbo           waveshare_tft24_lcd.dtbo
 i2c1.dtbo           pwm_ef-f.dtbo         waveshare_tft35c_lcd.dtbo
 pwm_ab.dtbo         sdio.dtbo             waveshare_tft35c_rtp.dtbo

2. 更新 vfat BPI-BOOT/boot.ini 中的覆蓋環境以啟用您想要的。默認啟用 i2c0、spi0 和 uart1。

 # Overlays to load
 # Example combinations:
 #   spi0 i2c0 i2c1 uart0
 #   hktft32
 #   hktft35
 setenv overlays "i2c0 spi0 uart1"

3. 必須重新啟動板子才能加載覆蓋 dtb。

WiringPi
注意:本WiringPi僅支持設置40pin gpio為輸出、輸入或軟件pwm,對於io功能如i2c、spi、pwm…,必須在boot.ini中啟用dtb覆蓋
1. 搭建和安裝wiringPi
 $ git clone https://github.com/BPI-SINOVOIP/amlogic-wiringPi
 $ cd amlogic-wiringPi
 $ chmod a+x build
 $ sudo ./build

2. 運行gpio readall以顯示所有 40 引腳狀態。

M5 wiringpi.png

3. BPI GPIO 擴展板和amlogic-wiringPi/examples 中的示例
閃爍所有,閃爍所有針頭 gpios,沒有擴展板。
lcd-bpi, BPI LCD 1602 顯示模塊示例。
52pi-bpi,BPI OLED 顯示模塊示例。
matrixled-bpi、BPI RGB LED 矩陣擴展模塊示例。
berryclip-bpi,BPI BerryClip 模塊
其他開發

自定義 Linux 啟動標誌
Linux uboot 限制啟動標誌 fb 大小默認為 1080p60hz/1920×1080,所以默認圖像不支持超大分辨率,但您可以修改 uboot 源代碼以支持它。
1.準備一個24bit的bmp文件,命名為boot-logo.bmp
2.將bmp文件壓縮為boot-logo.bmp.gz
 $ gzip boot-logo.bmp

3.複製目標文件到linux鏡像的BPI-BOOT分區

 $ cp boot-logo.bmp.gz /media/xxx/BPI-BOOT/
自定義 Android 啟動標誌

Android bootloader 限制開機logo fb 顯示大小默認為1080p60hz/1920×1080,android 內核dtb 分區表限制開機logo 分區大小默認為16MB。

1.準備一個24bit的bmp文件,命名為boot-logo.bmp
2.將bmp文件壓縮為boot-logo.bmp.gz
 $ gzip boot-logo.bmp
3.下載m5_android_bootlogo_tool.zip
4. 解壓這個工具
 $ unzip m5_android_bootlogo_tool.zip
 $ cd m5_android_bootlogo_tool/
 $ cp -a logo_img_files logo               //logo_img_files is the origin bootlogo resource in android source and copy from <android-source-dir>/devices/amlogic/bananapi_m5/log_img_files
 $ ls -l logo/
 -rwxr--r-- 1 dangku dangku 525054 Sep 25 16:54 bootup.bmp
 -rwxr--r-- 1 dangku dangku 525054 Sep 25 16:54 bootup_X3.bmp
 -rwxr--r-- 1 dangku dangku    184 May 19  2020 upgrade_bar.bmp
 -rwxr--r-- 1 dangku dangku 180072 May 19  2020 upgrade_error.bmp
 -rwxr--r-- 1 dangku dangku 180072 May 19  2020 upgrade_fail.bmp
 -rwxr--r-- 1 dangku dangku 180072 May 19  2020 upgrade_logo.bmp
 -rwxr--r-- 1 dangku dangku 180072 May 19  2020 upgrade_success.bmp
 -rwxr--r-- 1 dangku dangku    184 May 19  2020 upgrade_unfocus.bmp
 -rwxr--r-- 1 dangku dangku 180072 May 19  2020 upgrade_upgrading.bmp

5.複製boot-logo.bmp.gz

 $ cp boot-logo.bmp.gz logo/bootup.bmp
 $ cp boot-logo.bmp.gz logo/bootup_X3.bmp

6. 使用img pack工具創建目標logo.img,m5_android_bootlogo_tool的二進制和相關libs複製自<android-source-dir>/out/host/linux-x86

 $ ./logo_img_packer -r logo logo.img

7. 使用 fastboot 刷入啟動標誌

 $ adb root
 $ adb remount
 $ adb reboot fastboot

等待幾秒鐘並檢查 fastboot 是否已連接

 $ fastboot device
 1234567890      fastboot
 $ fastboot flashing unlock_critical
 $ fastboot flashing unlock
 $ fastboot flash logo logo.img
 $ fastboot reboot
啟動順序
M5 linux開機程序.png
在控制台調試消息的開頭檢查從 SDcard 或 EMMC 加載的引導加載程序
1. 從 SDcard ROM 加載引導程序(Linux 日誌示例)
 ...
 
 BL2 Built : 15:21:42, Mar 26 2020. g12a g486bc38 - gongwei.chen@droid11-sz
 
 Board ID = 1
 Set cpu clk to 24M
 Set clk81 to 24M
 Use GP1_pll as DSU clk.
 DSU clk: 1200 Mhz
 CPU clk: 1200 MHz
 Set clk81 to 166.6M
 board id: 1
 Load FIP HDR DDR from SD, src: 0x00010200, des: 0xfffd0000, size: 0x00004000, part: 0
 fw parse done
 PIEI prepare done
 fastboot data verify
 result: 255
 Cfg max: 12, cur: 1. Board id: 255. Force loop cfg
 DDR4 probe
 
 ...

2. 從 EMMC ROM 加載引導程序(Android 日誌示例)

...
 
 Board ID = 1
 Set cpu clk to 24M
 Set clk81 to 24M
 Use GP1_pll as DSU clk.
 DSU clk: 1200 Mhz
 CPU clk: 1200 MHz
 Set clk81 to 166.6M
 eMMC boot @ 0
 sw8 s
 board id: 1
 Load FIP HDR DDR from eMMC, src: 0x00010200, des: 0xfffd0000, size: 0x00004000, part: 0
 fw parse done
 PIEI prepare done
 00000000
 emmc switch 1 ok
 ddr saved addr:00016000
 Load ddr parameter from eMMC, src: 0x02c00000, des: 0xfffd0000, size: 0x00001000, part: 0
 00000000
 
 ...
擦除 EMMC 以啟動 SD 卡

有四種可能的情況需要注意,EMMC已經刷過Android鏡像,EMMC已經刷過Linux鏡像,BL2啟動過程掛掉,EMMC為空。

1. 帶有 Android 映像的可啟動 EMMC
A)使用usb燒錄工具,在7%格式化下載過程中拔掉type-c usb線

M5安卓格式.png

B)使用 Android Fastboot 工具,在執行此操作之前,請確保 adb/fastboot 工具在您的 PC 上運行。

   root@dangku-desktop:/tmp# adb root
   adbd is already running as root
   root@dangku-desktop:/tmp# adb remount
   remount succeeded
   root@dangku-desktop:/tmp# adb shell
   bananapi_m5:/ # reboot fastboot

等待幾秒鐘讓電路板重新啟動到快速啟動模式

 root@dangku-desktop:/tmp# fastboot devices
   1234567890	fastboot
   root@dangku-desktop:/tmp# fastboot flashing unlock_critical
   ...
   OKAY [  0.044s]
   finished. total time: 0.044s
   root@dangku-desktop:/tmp# fastboot flashing unlock
   ...
   OKAY [  0.047s]
   finished. total time: 0.047s
   root@dangku-desktop:/tmp# fastboot erase bootloader
   erasing 'bootloader'...
   OKAY [  0.059s]
   finished. total time: 0.059s
   root@dangku-desktop:/tmp# fastboot erase bootloader-boot0
   erasing 'bootloader-boot0'...
   OKAY [  0.036s]
   finished. total time: 0.036s
   root@dangku-desktop:/tmp# fastboot erase bootloader-boot1
   erasing 'bootloader-boot1'...
   OKAY [  0.035s]
   finished. total time: 0.035s

C)使用uboot命令,連接調試控制台線,開機按ESC進入uboot命令行

bananapi_m5_v1#amlmmc erase 1
   emmckey_is_protected(): protect
   start = 0,end = 57343
   start = 221184,end = 30535679
   Erasing blocks 0 to 8192 @ boot0
   start = 0,end = 8191
   Erasing blocks 0 to 8192 @ boot1
   start = 0,end = 8191
   bananapi_m5_v1#reset
   resetting ...
   SM1:BL:511f6b:81ca2f;FEAT:A0F83180:20282000;POC:F;RCY:0;EMMC:0;READ:0;CHK:1F;READ:0;CHK:1F;READ:0;CHK;

這兩種方式實際上是擦除了 EMMC android 的 bootloader 部分,從 SDcard Linux 啟動後,您最好通過 dd 命令格式化整個 EMMC

D)使用uboot reboot命令從SD卡重啟一次,但EMMC中的Android仍然完全存在。連接調試控制台線,開機按ESC進入uboot命令行,輸入“rebo​​ot sdboot”命令,從SDcard Linux重啟後,可以通過dd命令格式化整個EMMC,然後將Linux鏡像刷入EMMC。

   bananapi_m5_v1#

現在插入帶有 Linux 映像的 SD 卡。

 bananapi_m5_v1#reboot sdboot
   reboot mode: sdboot
   reboot dev: sd
   BPI: set rom boot from sdcard after reset
   before value = 0!
   after value = 4f5244c0!
   resetting ...
   SM1:BL:511f6b:81ca2f;FEAT:A0F83180:20282000;POC:F;RCY:0;OVD:2;SD?:0;SD:0;READ:0;0.0;CHK:0;
   bl2_stage_init 0x01
   ...
   board id: 1
   Load FIP HDR DDR from SD, src: 0x00010200, des: 0xfffd0000, size: 0x00004000, part: 0
   ...

E)最簡單的方法是在開機前插入刷有Linux鏡像的SDcard,Android bootloader會檢查SDcard vfat分區中是否存在boot.ini文件,這樣SDcard Linux就會啟動。啟動後,您可以通過 dd 命令格式化整個 EMMC,然後將 Linux 映像閃存到 EMMC。

 ...
   BPI: try boot from sdcard
   reading boot.ini
   5699 bytes read in 3 ms (1.8 MiB/s)
   ## Executing script at 01b00000
   ...
   reading Image.gz
   9143358 bytes read in 510 ms (17.1 MiB/s)
   reading meson64_bananapi_m5.dtb
   70850 bytes read in 8 ms (8.4 MiB/s)
   reading uInitrd
   11704481 bytes read in 655 ms (17 MiB/s)
   reading overlays/i2c0.dtbo
   223 bytes read in 6 ms (36.1 KiB/s)
   reading overlays/spi0.dtbo
   516 bytes read in 6 ms (84 KiB/s)
   reading overlays/uart1.dtbo
   225 bytes read in 5 ms (43.9 KiB/s)

2. 帶有 Linux 映像的可啟動 EMMC

A)使用uboot命令,連接調試控制台線,開機按ESC進入uboot命令行

   bananapi_m5# mmc erase 0 1000

B)Linux u-boot 還會檢查 SDcard vfat 分區中是否存在 boot.ini 文件,以便 SDcard Linux 啟動。啟動後,您可以通過 dd 命令格式化整個 EMMC 或直接將 Linux 映像閃存到 EMMC。

3. 極端的情況是bootloader或者uboot損壞了,從EMMC加載ROM但是在u-boot或者BL2掛掉,比如dram init失敗,啟動過程會掛在EMMC的BL2,唯一的辦法就是用usb格式化EMMC燒錄工具,或者完整下載Android鏡像,然後嘗試其他方式擦除EMMC或將Linux鏡像刷入EMMC。
4. 如果 EMMC 為空,Rom 將嘗試直接從 SD 卡加載 bootloader。
通過 dd 命令擦除 Emmc Android

如果板子之前刷過 android,如果你想用 SDcard Linux 映像啟動它,必須通過這些命令擦除整個 emmc。

 $ sudo dd if=/dev/zero of=/dev/mmcblk0boot0 bs=1M status=noxfer 
 $ sudo dd if=/dev/zero of=/dev/mmcblk0boot1 bs=1M status=noxfer
 $ sudo dd if=/dev/zero of=/dev/mmcblk0 bs=1M status=noxfer 
$ sync
無線/藍牙支持

1.安卓測試與支持。

 rtl8723bu wifi/bt(usb)
 rtl8188eu wifi(usb)
 rtl8821cu wifi/bt(usb)
 rtl8822cs wifi/bt(sdio/uart)
 rtl8814au wifi(usb), please get the aircrack-ng driver and install.
  • 如何啟用 Android Wifi/BT
    • USB類型:將USB加密狗插入USB主機端口並重新啟動系統,啟動後,您可以在設置應用程序中啟用或禁用wifi和藍牙。
    • SDIO/UART 類型:將硬件模塊正確連接到 40pin 接頭並配置 Android DTB 覆蓋以啟用它。
注意:Android 不支持以太網和 wifi 同時連接,以太網的優先級高於 wifi,這意味著如果以太網已經連接,wifi 無法連接網絡,如果以太網電纜插件,wifi 將斷開連接。

2、Linux測試與支持。

rtl8188eu wifi(usb)
 rtl8192eu wifi(usb)
 rtl8723bu wifi/bt(usb)
 rtl8811au wifi(usb)
 rtl8812au wifi(usb)
 rtl8812bu wifi(usb)
 rtl8821cu wifi/bt(usb)
 rtl8822cs wifi/bt(sdio/uart)
  • 如何啟用 Linux Wifi
Wifi 模塊驅動程序已經在發布映像中預構建。
USB 類型:將 USB 加密狗插入 USB 主機端口,驅動程序將自動加載。

SDIO/UART 類型:

1)將硬件模塊正確連接到 40pin 接頭。
2)配置dtb 覆蓋
  # Overlays to load
  # Example combinations:
  #   spi0 i2c0 i2c1 uart0
  #   hktft32
  #   hktft35
  setenv overlays "wifi_bt_rtl8822cs"

3)將 wifi 模塊名稱添加到 /etc/modules 以便下次啟動時自動加載。

  • 如何啟用 Linux 藍牙

1)請下載rtk-linux-bt-driver源代碼,構建並安裝 usb 或 uart rtk linux 藍牙驅動程序/固件到您的映像。

2)對於 USB 類型,將 USB 加密狗插入 USB 主機端口並自動加載驅動程序。

3)對於 UART 類型,在安裝藍牙驅動程序/固件之前,將 dtb 覆蓋配置為與 wifi 相同。hci_uart 驅動會在 rtk-hciuart.service 啟動時加載。

Linux 服務器鏡像網絡配置
Linux Wifi STA模式

示例 wifi sta 模式 netplan 配置文件,01-wlan0-sta.yaml

network:
  version: 2
  renderer: networkd
  wifis:
    wlan0:
      dhcp4: true
      access-points:
        "bananapi":
           password: "123456789"
Linux Wifi AP模式
1.正確準備設置wifi適配器
2.獲取wifi適配器Band、Frequencies、Channel、HT Capability、VHT Capability或其他屬性
$ iw list
3. 使用Netplan和 Network-Manager管理 wifi 接入點模式。
安裝 NetworkManager 因為 ap 僅支持 NetworkManager 渲染器
$ sudo apt install network-manager

示例 2.4G wifi ap 模式 netplan 配置文件,01-wlan0-ap-2.4g.yaml

network:
version: 2
renderer: NetworkManager
wifis:
  wlan0:
    dhcp4: no
    access-points:
      "bananapi":
         mode: ap
         band: 2.4GHz
         channel: 6
         auth:
           key-management: psk
           password: "123456789"

示例 5G wifi ap 模式 netplan 配置文件,01-wlan0-ap-5g.yaml

network:
version: 2
renderer: NetworkManager
wifis:
  wlan0:
    dhcp4: no
    access-points:
      "bananapi":
         mode: ap
         band: 5GHz
         channel: 36
         auth:
           key-management: psk
           password: "123456789"
4.使用Netplan和Hostapd管理wifi接入點模式。
1)創建一個netplan配置文件,01-wlan0-ap-hostapd.yaml
network:
version: 2
renderer: networkd
ethernets:
  wlan0:
    dhcp4: no
    addresses:
      - 192.168.11.1/24

2)安裝hostapd

$ sudo apt install hostapd

創建hostapd配置文件/etc/hostapd/hostapd.conf,例如

interface=wlan0
ssid=bananapi

driver=nl80211

auth_algs=1
wpa=2
wpa_passphrase=123456789
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

#bridge=br0
beacon_int=500
#SSID not hidden
ignore_broadcast_ssid=0

hw_mode=a
channel=36
max_num_sta=8

### IEEE 802.11n
ieee80211n=1
#require_vht=0
ht_capab=[HT20][HT40+][SHORT-GI-20][SHORT-GI-40][SHORT-GI-80][DSSS_CCK-40]

### IEEE 802.11ac
ieee80211ac=1
#require_vht=0
#vht_capab=[MAX-MPDU-3895][SHORT-GI-80][SU-BEAMFORMEE]
#vht_oper_chwidth=1
#vht_oper_centr_freq_seg0_idx=42

### WMM
wmm_enabled=1

3)要支持 80MHz 通道寬度,您需要使用rtw_vht_enable=2選項加載驅動程序,或者您可以使用內容創建 /etc/modprobe.d/8822cs.conf

options 88x2cs rtw_vht_enable=2

4)安裝和配置 dhcp 服務器服務,例如使用 isc-dhcp-server

$ sudo apt install isc-dhcp-server

在 /etc/default/isc-dhcp-server 中配置 dhcp 服務器接口

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="wlan0"

在/etc/dhcp/dhcpd.conf中配置dhcp子網和dns

...
option domain-name "example.org";
option domain-name-servers 8.8.8.8, 114.114.114.114;
...
# No service will be given on this subnet, but declaring it helps the 
# DHCP server to understand the network topology.
subnet 192.168.11.0 netmask 255.255.255.0 {
  range dynamic-bootp 192.168.11.1 192.168.11.100;
  option broadcast-address 192.168.11.255;
  option routers 192.168.11.1;
}

5)啟動服務

$ sudo hostapd /etc/hostapd/hostapd.conf -B
$ sudo systemctl restart isc-dhcp-server

6)路由配置。

sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 192.168.11.0/24 -o eth0 -j MASQUERADE
Cloud-init&Snap
Cloud-init 和 Snap 服務默認啟用,您可以禁用或刪除它們。
1. 禁用或刪除 cloud-init
 $ sudo touch /etc/cloud/cloud-init.disabled

或者

 $ sudo apt purge cloud-init

2.禁用或刪除快照

 $ sudo apt purge snapd
安裝 Docker 引擎
在 Ubuntu 20.04 服務器上安裝 Docker 引擎
1. 設置存儲庫
更新 apt 包索引並安裝包以允許 apt 通過 HTTPS 使用存儲庫:
 $ sudo apt-get update
 $ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

添加Docker官方的GPG密鑰:

 $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

設置穩定存儲庫

$  echo \
    "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

2. 安裝 Docker 引擎

 $ sudo apt-get update
 $ sudo apt-get install docker-ce docker-ce-cli containerd.io

3. 通過運行 hello-world 鏡像驗證 Docker Engine 是否正確安裝。

 $ sudo docker run hello-world

Docker-test.png

使用簡單的命令安裝 docker

 $ curl -sSL get.docker.com | sudo sh
快速瀏覽

ODROID-C4

四核ARM CORTEX-A55 |4GB RAM |4 USB3 PORTS