2017年8月22日 星期二

BeagleBone - Auto Boot from micro SD

解決客製Linux 放到micro SD卡時,不需要按S2按鈕即可啟動該Linux
BeagleBone Black 開機簡易流程

簡單說,ROM code一開始會依照S2按鈕按下與否產生的電位差,來決定讀取哪邊的MLO檔案
但是我們沒辦法改ROM code來強迫讀取micro SD,所以網路上的方法幾乎是從MLO下手

方法1:修改eMMC內的MLO檔名,讓他讀取失敗,就會轉向micro SD卡的MLO

BBB插入電腦的時候,eMMC的partition 1 變成隨身碟,如果裡面有MLO檔案,將他改名成任意名稱即可
但是我這邊這張BBB裡面找不到MLO檔案,所以此方法對我不適用...(似乎是不同版本debian Image會有差別,我的image已經包含MLO)


方法2:將eMMC內的資料全部洗掉

先用SD卡按S2按鈕boot進入BBB後,輸入指令洗掉eMMC,此方法較暴力...
所以開機時,ROM code進到eMMC找MLO和 u-boot失敗 (eMMC裡面沒有任何東西),就會轉向micro SD卡
#mmcblk1為eMMC位置
dd if=/dev/zero of=/dev/mmcblk1 bs=1024 count=1024
#以防萬一可用以下指令確認eMMC,其結果如下圖,mmc-MMCxxxxx即eMMC,mmc-SDxxxx為micro SD卡
ls -al /dev/disk/by-id


方法3:改變SYSBOOT的電位值 

因為按下S2扭時,SYSBOOT2變成低電位,所以在P8 pin43外接一個小電阻到地(如下圖SYSBOOT2是LCD_DATA2,為P8 pin43),即可等效模擬按下S2按鈕,此方法驗證是可行的
『Building a removable jumper wire for connecting pin 43 on connector P8
to ground (pin 1) with a 1k resistor』




方法4:將micro SD卡的 MLO和u-image放到eMMC的partition1內

因為我的eMMC 的partition1內沒有MLO檔案,所以我自己嘗試將我的MLO與u-boot.img放過去,結果就跳過去micro SD卡開機了..
推測流程變成下圖,u-boot在make時,有寫上位址指向micro SD卡 (以刪除micro SD卡的MLO做驗證)


BeagleBone - How to copy Gentoo into emmc from micro sd card

以下內容,不分Beaglebone Green / Beaglebone Black

前置步驟

  1. 準備一個可以SD卡開機的Gentoo linux
  2. 用SD卡開機後,確認emmc的磁區如下,若不是則要先format emmc磁區

當用SD卡開機時,SD卡磁區為/dev/mmcblk0、emmc則為/dev/mmcblk1
若用emmc開機,則與上述相反

format emmc磁區

  1. fdisk /dev/mmcblk1
  2. 用d刪光現有磁區
  3. 建立mmcblk1p1 (記得要改成FAT16及 boot flag)
  4. 建立mmcblk1p2
相關步驟見下圖

Copy to emmc

mkfs.vfat 預設gentoo沒裝,但busybox有支援
同理mkfs.ext4,busybox 以mke2fs支援
/usr/portage 可以刪掉,不用copy
#!/bin/bash
echo "make filesystem"
/bin/busybox mkfs.vfat -F 16 /dev/mmcblk1p1
/bin/busybox mke2fs -T ext4 /dev/mmcblk1p2
echo "mount"
mount /dev/mmcblk1p2 /mnt
mkdir -p /mnt/boot/uboot
mount /dev/mmcblk1p1 /mnt/boot/uboot
echo "copy file"
cd /
cp -a bin boot etc home lib media opt root run sbin tmp var usr /mnt/
echo "create missing device node"
cd /mnt
mkdir proc sys dev
cd /mnt/dev
mknod console c 5 1
mknod null c 1 3
mknod zero c 1 5
echo "umount"
cd ~
sync
umount /dev/mmcblk1*
echo "done"

NoSQL Redis intro

Redis是一個使用ANSI C編寫的開源、支援網路、基於記憶體、可選永續性的鍵值對儲存資料庫。 支援rdb 及aof 兩種儲存方式 From  https://zh.wikipedia.org/wiki/Redis Redis 目前擁有兩種資料...