bc10

概要

2010/10/19

bc10の起動時の動作について説明します。
説明する範囲はbc10への電源投入から、OSの起動開始までになります。

ブートシーケンス

2010/06/29

bc10(omap3530)でLinuxを動作させる場合、電源の投入後、一般に以下のような順番で実行されます。

  1. BootROM code
  2. X-Loader
  3. U-Boot
  4. Linux kernel(uImage)

BootROM code

2010/06/29

omap3530には、電源投入時の動作コードが書き込まれたブート用のROM(BootROM)が内蔵されています。
ここではBootROMに書き込まれた動作コードをBootROMコードと呼ぶことにします。
BootROMコードは工場出荷状態で既に書きこまれていて、外部から書き換えることはできません。

BootROMコードの役割は、周辺デバイスからブートローダを読み込んで実行する、というただ一点にしぼられています。
起動可能なブートローダをさがすために、ROMコードは以下のデバイスに直接アクセスすることが可能です。

ブートローダを探索するデバイスの順序は、omap3530のピン設定で変更可能になっています。

ブートローダ探索順序

起動時にBootROMがブートローダを探索するデバイスの順序について、bc10はBeagleBoardと同様の設定になっており、以下の2パターンを選択することができます。

探索先のデバイスでブートローダが見つからなかった場合は、スキップして次のデバイスを探索します。

通常動作時は、NANDに書き込まれたブートローダを使用することが多いので、USERボタンは押さずに電源を投入します。
新しいブートローダの動作を確認する場合などは、ブートローダを書き込んだSDカードを挿入した上で、USERボタンを押しながら電源を投入することになります。
この仕様のおかげで、NANDに書き込まれたブートローダの動作がおかしい場合や、工場出荷状態でNANDに書き込みがされていない場合にも、SDカードからブートローダを読み込んで動作させることが可能になります。

X-Loader

2010/06/29

X-Loaderは1段目のブートローダとして、2段目のブートローダであるU-Bootを探索して起動します。
U-Bootイメージをさがすために、X-Loaderは以下の順序でデバイスにアクセスします。

  1. MMC/SD card
  2. NAND Flash

X-Loaderをソースコードからビルドする方法はbc10/x-loaderを参照してください。

U-Boot

2010/06/29

U-Bootは2段目のブートローダとして、OSの起動やハードウェアの初期化などをおこなう多機能ブートローダです。
コマンドラインインターフェースを備えており、MMC/SDファイルシステムへのアクセスや、NANDへの読み書きもできるので、これが起動すればブート用のセットアップは大抵のことができるようになります。
U-Bootをソースコードからビルドする方法はbc10/u-bootを参照してください。

Linux kernel

2010/12/24

Linux kernelのイメージファイルはuImageという名前になります。
OpenEmbedded環境でもAndroid環境でも、どちらでも使用できるようになっています。
Linux kernel(uImage)をソースコードからビルドする方法はbc10/kernel-2.6.32 を参照してください。

起動用SDカードの作成

2010/12/24

X-LoaderやU-Bootを起動できるSDカードを作ります。
bc10は、出荷状態ではNAND Flashに何も書き込まれていません。
そのため、起動用のSDカードを用意することが、bc10を起動させるもっとも簡単な方法となります。

ただし、bc10は設計上、SDカードスロット(J6)からの起動しかサポートしていません。
マイクロSDカードスロット(J5)から起動することはできないので注意してください。

U-Bootから起動するOSとしてLinuxを使用することを前提として、最終的にはSDカード内の構成を以下のようにします。

作業環境はLinuxを想定しています。
作業手順は以下のようになります。

  1. パーティションの初期化・設定
  2. ファイルシステムのフォーマット
  3. ファイルの配置

以下の説明は主にLinuxBootDiskFormat(code.google.com)から引用してアレンジしたものです。
コマンドライン上の説明で、角括弧でくくった箇所はユーザが入力するべきコマンドをあらわしています。

SDカードのアンマウント

このあとパーティション操作やフォーマット作業をおこなうために、SDカードがマウントされている場合には、まずアンマウントをおこないます。

以下のようにSDカードがマウントされているとします。

$ [df -h]
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/sdc1             400M   94M  307M  24% /media/disk
...

アンマウントをおこないます。

$ [umount /media/disk]

パーティションの初期化・設定

fdiskコマンドを実行します。
引数にはSDカードのデバイスファイルを指定します。この位置は作業環境によって変わりますので、事前に確認しておいてください。
以下は実行例です。

$ [sudo fdisk /dev/sdc]
Command (m for help): [p]

Disk /dev/sdc: 2021 MB, 2021654528 bytes
255 heads, 63 sectors/track, 245 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1         246     1974240+   c  W95 FAT32 (LBA)
Partition 1 has different physical/logical endings:
     phys=(244, 254, 63) logical=(245, 200, 19)

パーティションを全て削除します。

Command (m for help): [d]
Selected partition 1

エキスパートモードにモード変更します。

Command (m for help): [x]

ヘッダ数を255に設定します。

Expert Command (m for help): [h]
Number of heads (1-256, default xxx): [255]

セクタ数を63に設定します。

Expert Command (m for help): [s]
Number of sectors (1-63, default xxx): [63]

シリンダ数の設定は使用するSDカードごとに異なります。 以下の計算式でシリンダ数を計算します。(小数点以下切り捨て)

#シリンダ数 = 小数点以下切り捨て (SDカードのバイト数 / 255 / 63 / 512 )

今回の例で使用しているSDカードでは以下のようになります。

2021654528 / 255 / 63 / 512 = 245.79
-> 245

シリンダ数を設定します。今回の例では245になります。

Expert Command (m for help): [c]
Number of cylinders (1-256, default xxx): [上式で求めた値]

ノーマルモードにモード変更します。

Expert Command (m for help): [r]

FAT32パーティションを作成します。

Command (m for help): [n]
Command action
   e   extended
   p   primary partition (1-4)
[p]
Partition number (1-4): [1]
First cylinder (1-245, default 1): [(press Enter)]
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-245, default 245): [+50]

Command (m for help): [t]
Selected partition 1
Hex code (type L to list codes): [c]
Changed system type of partition 1 to c (W95 FAT32 (LBA))

ブートフラグを設定します。

Command (m for help): [a]
Partition number (1-4): [1]

Linuxのファイルシステム用パーティションを作成します。

Command (m for help): [n]
Command action
   e   extended
   p   primary partition (1-4)
[p]
Partition number (1-4): [2]
First cylinder (52-245, default 52): [(press Enter)]
Using default value 52
Last cylinder or +size or +sizeM or +sizeK (52-245, default 245): [(press Enter)]
Using default value 245

パーティション設定を確認します。

Command (m for help): [p]

Disk /dev/sdc: 2021 MB, 2021654528 bytes
255 heads, 63 sectors/track, 245 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1          51      409626    c  W95 FAT32 (LBA)
/dev/sdc2              52         245     1558305   83  Linux

パーティションテーブルの変更を保存します。

Command (m for help): [w]
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

ファイルシステムのフォーマット

FAT32パーティションとLinuxパーティションをそれぞれフォーマットします。
LABEL1とLABEL2の文字列の部分はパーティションのラベルになりますので、お好きな名前で設定してください。

$ [sudo mkfs.msdos -F 32 /dev/sdc1 -n LABEL1]
mkfs.msdos 2.11 (12 Mar 2005)

$ [sudo mkfs.ext3 -L LABEL2 /dev/sdc2]
mke2fs 1.40-WIP (14-Nov-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
195072 inodes, 389576 blocks
19478 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=402653184
12 block groups
32768 blocks per group, 32768 fragments per group
16256 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: 

ファイルの配置

ブートローダのイメージファイルをSDカードに配置します。
まず、SDカードを挿しなおすなどして、再度マウントさせます。
SDカードのマウントポイントはシステムの都合に合わせて読みかえてください。

1段目のブートローダであるX-Loaderは、SDカード上の配置方法に制限があります。必ず以下のように配置してください。

$ [cp x-load.bin.ift /media/LABEL1/MLO]

続いて、2段目のブートローダであるU-Bootを配置します。

$ [cp u-boot.bin /media/LABEL1/u-boot.bin]

Linux kernelを配置します。

$ [cp uImage /media/LABEL1/uImage]

配置する順序を間違えたり、手順に失敗したりした場合には、FAT32パーティションのフォーマットからやり直すのが確実です。
配置が完了したら、SDカードをアンマウントして抜き出します。

SDカードからの起動

2010/06/29

ブートローダを配置したSDカードをbc10に挿入しておきます。
BootROMコードがNANDよりも先にSDカードにアクセスするよう、USERボタンを押しながら電源を投入します。


BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS