玄箱Pro、直します。

超初心者が、玄箱PROでLinuxを勉強する無謀なブログです。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
別窓 | スポンサー広告
∧top | under∨

mtdblockとは?

今まで何気なく見過ごしてたんですが、気がついてみたらわからないことが・・。
bootargs_rootでよく出てくる"mtdblock2"とは何でしょうか?
mtd2とはまた違うんでしょうか・・。

さぁ実験ですよ(笑)。
ためしに以下のように環境変数を書き換えてブートしてみました。

bootargs_root=root=/dev/mtd2 rw


するとコンソールには

Loading from device 0: <NULL> at 0xfa000000 (offset 0x20000)
Image Name: Linux-2.6.12.6-arm1
Created: 2007-04-10 13:45:13 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736548 Bytes = 1.7 MB
Load Address: 00008000
Entry Point: 00008000
<<stop_sound>>
## Booting image at 00100000 ...
Image Name: Linux-2.6.12.6-arm1
Created: 2007-04-10 13:45:13 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1736548 Bytes = 1.7 MB
Load Address: 00008000
Entry Point: 00008000
Verifying Checksum ... OK
OK

Starting kernel ...

arg:console=ttyS0,115200 root=/dev/mtd2 rw BOOTVER=1.091
CONFIG_KUROBOX_PLATFORM CONFIG_KUROBOX_KUROBOX ---
Uncompressing Linux................................................................................................................. done, booting the kernel.
Linux version 2.6.12.6-arm1 (root@dev-hara) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #27 Tue Apr 10 22:47:16 JST 2007
CPU: ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ)
CPU0: D VIVT write-back cache
CPU0: I cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
CPU0: D cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
Machine: MV-88fxx81
Using UBoot passing parameters structure
Sys Clk = 250000000, Tclk = 166664740
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists
Kernel command line: console=ttyS0,115200 root=/dev/mtd2 rw BOOTVER=1.091
PID hash table entries: 1024 (order: 10, 16384 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 128MB 0MB 0MB 0MB = 128MB total
Memory: 126208KB available (3037K code, 426K data, 112K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
serial_initialize_ttyS1 (Debug): ttyS1 is initialized.
config_device_cs Error : Unknown board

CPU Interface
-------------
SDRAM_CS0 ....base 00000000, size 128MB
SDRAM_CS1 ....disable
SDRAM_CS2 ....disable
SDRAM_CS3 ....disable
PEX0_MEM ....base e0000000, size 128MB
PEX0_IO ....base f2000000, size 1MB
PCI0_MEM ....base e8000000, size 128MB
PCI0_IO ....base f2100000, size 1MB
INTER_REGS ....base f1000000, size 1MB
DEVICE_CS0 ....base fa000000, size 2MB
DEVICE_CS1 ....base f4000000, size 32MB
DEVICE_CS2 ....base fa800000, size 1MB
DEV_BOOCS ....base ff800000, size 8MB
CRYPTO ENG ....no such
Flash bankwidth 1, base ff800000, size 400000
KUROBOX FLASH size 4096[KB]

Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- KUROBOX_BOARD_KUROBOX Soc: 88F5182 A2

Detected Tclk 166664740 and SysClk 250000000
Marvell USB EHCI Host controller #0: c04e4b00
Marvell USB EHCI Host controller #1: c04e4a40
pexBarOverlapDetect: winNum 2 overlap current 0
mvPexInit:Warning :Bar 2 size is illigal
it will be disabled
please check Pex and CPU windows configuration
PCI: bus0: Fast back to back transfers enabled
PCI: bus1: Fast back to back transfers enabled
SCSI subsystem initialized
usbcore: registered new driver usbfs
usbcore: registered new driver hub
Use the XOR engines (offloading) for enhancing the following functions:
o RAID 5 Xor calculation
o kernel memcpy
o kenrel memzero
o copy user to/from kernel buffers
Number of XOR engines to use: 2
cesadev_init(c00122e4)
Fast Floating Point Emulator V0.9 (c) Peter Teichmann.
inotify device minor=63
JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc.
SGI XFS with no debug enabled
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
ttyS0 at MMIO 0x0 (irq = 3) is a 16550A
ttyS1 at MMIO 0x0 (irq = 4) is a 16550A
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered
RAMDISK driver initialized: 3 RAM disks of 32768K size 1024 blocksize
loop: loaded (max 8 devices)
Marvell Gigabit Ethernet Driver 'egiga':
o Ethernet descriptors in DRAM
o DRAM SW cache-coherency
o Checksum offload enabled
o Loading network interface ** egiga_init_module (10)
'eth0'
Intergrated Sata device found
scsi0 : Marvell SCSI to SATA adapter
scsi1 : Marvell SCSI to SATA adapter
Vendor: Seagate Model: ST380815AS Rev: 3.AA
Type: Direct-Access ANSI SCSI revision: 03
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
SCSI device sda: 156301488 512-byte hdwr sectors (80026 MB)
SCSI device sda: drive cache: write back
sda: sda1
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
physmap flash device: 400000 at ff800000
Found: SST 39LF020
phys_mapped_flash: Found 1 x8 devices at 0x0 in 8-bit bank
number of JEDEC chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
RedBoot partition parsing not available
Debug nand_scan : nand_flash_ids[i].pagesize is exist
Debug nand_scan : mtd->erasesize=0x00020000
Debug nand_scan : mtd->oobblock=0x00000800
Debug nand_scan : mtd->oobsize=0x00000040
NAND device: Manufacturer ID: 0x20, Chip ID: 0xda (ST Micro NAND 256MiB 3,3V 8-bit)
Scanning device for bad blocks
Using static partition definition
Creating 3 MTD partitions on "nand_mtd":
0x00000000-0x00400000 : "uImage"
0x00400000-0x04400000 : "rootfs"
0x04400000-0x10000000 : "extra"
usbmon: debugs is not available
ehci_platform ehci_platform.4523: EHCI Host Controller
ehci_platform ehci_platform.4523: new USB bus registered, assigned bus number 1
ehci_platform ehci_platform.4523: irq 17, io mem 0x00000000
ehci_platform ehci_platform.4523: park 0
ehci_platform ehci_platform.4523: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ehci_platform ehci_platform.16781: EHCI Host Controller
ehci_platform ehci_platform.16781: new USB bus registered, assigned bus number 2
ehci_platform ehci_platform.16781: irq 12, io mem 0x00000000
ehci_platform ehci_platform.16781: park 0
ehci_platform ehci_platform.16781: USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
USB Universal Host Controller Interface driver v2.2
Initializing USB Mass Storage driver...
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usbcore: registered new driver usbhid
drivers/usb/input/hid-core.c: v2.01:USB HID core driver
mice: PS/2 mouse device common for all mice
md: raid0 personality registered as nr 2
md: raid1 personality registered as nr 3
md: raid5 personality registered as nr 4
raid5: measuring checksumming speed
arm4regs : 304.000 MB/sec
8regs : 215.200 MB/sec
32regs : 249.200 MB/sec
raid5: using function: arm4regs (304.000 MB/sec)
md: md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27
Buffalo Platform Linux Driver(Light) 0.01 installed.
MICON ctrl (C) BUFFALO INC. V.1.00 installed.
Kernel event proc (C) BUFFALO INC. V.1.00 installed.
MICON V2 (C) BUFFALO INC. V.1.00 installed.
NET: Registered protocol family 2
IP: routing cache hash table of 1024 buckets, 8Kbytes
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
NET: Registered protocol family 1
NET: Registered protocol family 17
md: Autodetecting RAID arrays.
md: autorun ...
md: ... autorun DONE.
Root-NFS: No NFS server available, giving up.
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "mtd2" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)


やはりrootfsはマウントできませんね。てかデフォルトでNFS探しに行くんですね・・。関係ないですけど。
つまり、/proc/mtdによるとmtd2という領域にrootfsはあるにも関わらず、このmtd2をbootargs_rootには指定できないんですね。
HDDブートの時は/dev/sda2とか指定するのにどうしてだろ・・。

ちょっと調べてみました。
"mtdblock"でググったらひとまず目についたのがここ。そこには

ROM上のcramfsイメージをブロックデバイスに見せる為に mtdblock が入っているはずで、配布バイナリにもmtdblockの文字があるけど、 これもあるはずの文字列が見付からない。


前後の話題がまったく理解できませんので、この文章だけに注目しました。
mtdblockはROM上のcramfsイメージをブロックデバイスに見せる役割がある、という意味っぽいです。
さて、次はcramfsが何なのかわかりませんのではてなで調べました。

Linuxの圧縮ファイルシステムの一つ。書き込みはできない。組み込みシステムや小型デバイスで使われる。


とのこと。
ファイルシステム(xfsとかext3とか)の仲間ということだろうか。圧縮だから違うのかな。

まぁいずれにしても、rootfsはcramfsというファイルシステムかもしれない、ということと、mtdblock2とはパーティションではなくrootfsそのものだということになるのかな。

HDDブートの際は、hddrootfs.tar.gzというファイルを使うから、一概に/dev/mtd2と/dev/sda2の何が違うのかという発想は正しいとは言えないかも。

しかし調べれば調べるほど調べものが増えるって・・・どうなのさ?(笑)
スポンサーサイト
別窓 | memo:構造 | コメント:2 | トラックバック:0
∧top | under∨
<<図解でわかるLinux環境設定のすべて | 玄箱Pro、直します。 | 玄箱Proが起動するまで>>

この記事のコメント

リファラたどって着ました。
あまり参考にならなかったようですいません。

mtdblockってのはRAMディスクの一種で、
普通のRAMディスクが動的にメモリを確保して使うのに対して、
mtdblockは、物理的なアドレス範囲をカーネルが勝手に使わないように
予約しておいて、そこをブロックデバイスのイメージとして使う為のもの
です。(他にも使い方あるけど)

組み込み機器なんかだと、内蔵ROMにディスクイメージ(大抵cramfs)を
置いておいて、そこのアドレスをブロックデバイスとして使ったりします。
普通のRAMディスクだとアドレスは固定じゃないからこうはいきません。
変わった所だと、SRAMをmtdblockにしておいて、
電源切っても内容が残るRAMディスクにしてる製品とかあります。


本文のログを見るに、玄箱では基板上のフラッシュメモリに
ブートローダとルートイメージが置いてあるようですね。

2007-07-20 Fri 00:43 | URL | seagull #-[ 内容変更]
コメントありがとうございます。

>あまり参考にならなかったようですいません。

とんでもないです・・。理解できない私が悪いのですよ。
それどころかcramfsという新しい言葉を覚えることができました。ありがとうございました。

えーっと・・せっかくいただいたコメントなんですが・・さっぱりわかりません。
わかるまでお返事しない方がいいのかなとも思ったのですが、ひとまず「勉強します」とだけ言わせてくださいませ。

>玄箱では基板上のフラッシュメモリに
ブートローダとルートイメージが置いてあるようですね。

そのようです。
しかしルートイメージをHDDに置いて使う方法が主流のようで、それを猛勉強中です。
今後もseagullさんの日記を参考にさせていただきますので、またよろしくお願いいたします。
2007-07-20 Fri 02:16 | URL | AEROCATS #-[ 内容変更]
∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

トラックバックURL

FC2ブログユーザー専用トラックバックURLはこちら
∧top | under∨
| 玄箱Pro、直します。 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。