玄箱Pro、直します。

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

スポンサーサイト

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

起動手順の研究(2)

パート1(U-bootの起動とブートイメージの認識)

U-bootを起動して、カーネルイメージを見つけるまで。自分に接続されたあらゆる周辺機器を簡易に認識して表示しFound boot imageまでです。

まずはU-bootそのものを立ち上げ。
Orion1 CPU = Low

=== KURO U-Boot. ===
** LOADER **
** KUROBOX BOARD: KURO_BOX LE (CFG_ENV_ADDR=fffff000)


U-Boot 1.1.1 (Apr 10 2007 - 18:10:08) Marvell version: 1.12.1 - TINY

「KUROBOX BOARD: KURO_BOX LE (CFG_ENV_ADDR=fffff000)」てのがよくわからない(^_^;)
「fffff000」ってのは「255.255.240.0」??
CFG_ENV_ADDRってCFG環境アドレスってこと?CFGがわかんない。コンフィグ??
U-Boot環境変数の格納アドレスなのかな・・。

次にメモリの読み込み。
DRAM CS[0] base 0x00000000 size 128MB
DRAM Total size 128MB
[256kB@fffc0000] Flash: 256 kB
Addresses 20M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (20M - 16M): Done
NAND: 256 MB

DRAMがDDR2メモリで128MB、[256kB@fffc0000] FlashとあるのがNOR、それとNAND256MBですかね。
NORにはU-boot本体と環境変数が格納されていて、NANDにはカーネルとルートファイルシステムが格納されているのかな。
Addresses 20M - 0M are saved for the U-Boot usage
ここがわかんないんですよ・・。
「U-Bootに使用するアドレス」ってのが「20M-0M」・・・?
アドレス?メモリのことかな?

続いてCPUの情報。
Soc: 88F5182 A2
CPU: ARM926 (Rev 0) running @ 500Mhz
Orion 1 streaming disabled
SysClock = 250Mhz , TClock = 166Mhz

SoCとは「System On a Chip」の略。
MPU周りのいろんな半導体が一つになったものらしいです。MPUとCPUって同義なのかな・・。
Socが「88F5182 A2」という名前。
よく目にする「Marvell 88F5182」というのはそんなSoCの名前らしい。
このSoCには「ARM926」というMPUが載ってますよ、という意味かな。
500Mhzとあるのは400Mhzの間違い。ただ玄箱開発者のブログとされている「玄箱公式頁(仮)」では、本当に500Mhzにしてしまおうというクロックアップの方法も紹介されている。
絶対にやりませんけど(笑)。
「Orion 1 streaming disabled」は不明。
「SysClock = 250Mhz , TClock = 166Mhz」は、システムクロック(周辺回路周波数)は250Mhz、TClockは166Mhzという意味だろうなぁ。
TClockがわかんない。

あとはSoCが制御する周辺装置の認識とブート方法の変更をたずねるカウントダウン。
USB 0: host mode
USB 1: host mode
PCI 0: PCI Express Root Complex Interface
PCI 1: Conventional PCI, speed = 33000000
Net: egiga0 [PRIME]
Using 88E1118 phy
Found boot image
hit any key to switch tftp boot.
Hit any key to stop autoboot: 0
<<system_bootend>>
Hit any key to stop autoboot: 0

「Using 88E1118 phy」とは、88E1118というマイコン(?)が物理層を担当する、という意味でしょうか・・。
スポンサーサイト
別窓 | memo:起動処理 | コメント:1 | トラックバック:0
∧top | under∨

起動手順の研究(1)

せっかくシリアルコンソールで起動画面を眺めることができるんだから、勉強がてら解読してみます。

いやいや、意味なんてありません(笑)。
しかももう誰かやってそうだから、そのサイト探す方が手っ取り早いんですけどね・・。

備忘録と研究を兼ねています。
長い道のりになりそうなので、この時点で「(1)」を付けておきます(笑)。

今の私なりに理解した(つもりの)内容です。


玄箱Proの起動プロセスには大きく分けて7つのパートがあります。

##パート1(U-bootの起動とブートイメージの認識)
U-bootを起動して、カーネルイメージを見つけるまで。自分に接続されたあらゆる周辺機器を簡易に認識して表示しFound boot imageまでです。

Orion1 CPU = Low

=== KURO U-Boot. ===
** LOADER **
** KUROBOX BOARD: KURO_BOX LE (CFG_ENV_ADDR=fffff000)


U-Boot 1.1.1 (Apr 10 2007 - 18:10:08) Marvell version: 1.12.1 - TINY

DRAM CS[0] base 0x00000000 size 128MB
DRAM Total size 128MB←DDR2メモリの認識
[256kB@fffc0000] Flash: 256 kB←NORメモリの認識
Addresses 20M - 0M are saved for the U-Boot usage.
Mem malloc Initialization (20M - 16M): Done
NAND: 256 MB←NANDメモリの認識

Soc: 88F5182 A2←SoC名の表示
CPU: ARM926 (Rev 0) running @ 500Mhz←CPU名の表示
Orion 1 streaming disabled
SysClock = 250Mhz , TClock = 166Mhz


USB 0: host mode
USB 1: host mode
PCI 0: PCI Express Root Complex Interface
PCI 1: Conventional PCI, speed = 33000000
Net: egiga0 [PRIME]
Using 88E1118 phy
Found boot image←これが大事
hit any key to switch tftp boot.
Hit any key to stop autoboot: 0
<<system_bootend>>
Hit any key to stop autoboot: 0



##パート2(カーネルをメモリ上に読み込む)
発見したカーネルイメージの情報を表示しメモリ上に読み込みます。

Loading from device 0: 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



##パート3(カーネルを起動)
メモリ上に読み込んだカーネルを各種パラメータにしたがって起動します。

Starting kernel ...

arg:console=ttyS0,115200 root=/dev/mtdblock2 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



##パート4(メモリやCPUなど基本的なハードウェアのチェックと初期化)
カーネルに格納されたドライバの適用。initrd相当の働きをここでカーネルがしている。
内容はまだよくわかりません(笑)。ゆっくり解読します・・。

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/mtdblock2 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.←jffsモジュールの読み込み?
SGI XFS with no debug enabled←xfsモジュールの読み込み?
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':←ethernetの初期化?
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←HDD環境の初期化?
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:
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←NORメモリ
Found: SST 39LF020
phys_mapped_flash: Found 1 x8 devices at 0x0 in 8-bit bank←mtd0(NORメモリ)
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←NANDメモリ
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"←mtd1
0x00400000-0x04400000 : "rootfs"←mtd2
0x04400000-0x10000000 : "extra"←mtd3
usbmon: debugs is not available←USB2.0
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.
Empty flash at 0x00df85f8 ends at 0x00df8800



##パート5(ルート・ファイル・システムのマウント)
bootargs_rootに指定した場所のルート・ファイル・システムを/にマウントします。

VFS: Mounted root (jffs2 filesystem).



##パート6(initの各種実行)
マウントしたルート・ファイル・システムの/etc/inittabにしたがってrcスクリプトを実行し初期化をします。

Freeing init memory: 112K
--- rcStart (NANDroot) ---←NANDメモリにルートを置いてrcスクリプト開始
===== Starting MountSystemFolders =====
mounting procfs ... [Success]
mounting sysfs ... [Success]
mouting usbfs ... [Success]
remouting rootfs ... [Success]
mounting all devices ... [Success]


===== Starting checkroot.sh =====
rm: /var/lock/perfmon: is a directory
rm: /var/lock/printing: is a directory
rm: /var/lock/subsys: is a directory
[Success]


===== Starting Kevent.sh =====
[Success]


===== Starting mount_share.sh =====
Mounting /dev/sda on /mnt/disk1 as a xfs file system.
XFS: bad magic number
XFS: SB validate failed
mount: Mounting /dev/sda on /mnt/disk1 failed: Invalid argument
Failed.
Mounting /dev/sda on /mnt/disk1 as a ext3 file system.
mount: Mounting /dev/sda on /mnt/disk1 failed: Invalid argument
Failed.
Mounting /dev/mtd3 on /mnt/mtd as a jffs2 file system.
Success.

[Success]


===== Starting sethostname.sh =====
hostname is setted to KUROBOX-PRO
[Success]


===== Starting networking.sh =====
create network files..
IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[]
killall: dhcpcd: no process killed
route: SIOC[ADD|DEL]RT: No such process
Configuration network interface: lo eth0
requesting DHCP tout=30[s]
eth0: link down
eth0: link up<5>, full duplex<5>, speed 100 Mbps<5>
/etc/dhcpc/dhcpcd.exe ::: /etc/dhcpc/dhcpcd-eth0.info up
dhcpcd.exe: interface eth0 has been configured with old IP=192.168.1.9
hostname is setted to KUROBOX-PRO
[Success]


===== Starting httpd.sh =====
[Success]


===== Starting telnet.sh =====
[Success]


===== Starting inetd.sh =====
[Success]


===== Starting smb.sh =====
$Starting SMB services:
$Starting NMB services:
[Success]


===== Starting clientUtil_servd.sh =====
Starting clientUtil_server:starting on eth0
[Success]


===== Starting bootcomplete.sh =====
[Success]


===== Starting FanController.sh =====
[Success]


===== Starting boss.sh =====
(サングラス男のAA省略)
[Success]



##パート7(ログイン)
最後にログインを促して玄箱Proの起動処理は無事終了です。

KUROUTOSHIKOU KUROBOX Series KUROBOX/PRO(KOSHO)
KUROBOX-PRO login:

いやほんと、だからどうしたの世界なんですが(笑)。
Linux一般の起動を学ぶのに玄箱Proのそれを参考にしてはいけないのかもしれませんが、なんとなくLinuxが起動するまでの大きな流れがイメージできました。

次回はそれぞれの詳細を追跡してみます。
別窓 | memo:起動処理 | コメント:0 | トラックバック:0
∧top | under∨

玄箱Proが起動するまで

いまいちよくわからないことが・・。
前出の「自分で作るLinuxOS」という本にある「GRUBの仕組み」にU-bootを当てはめると

玄箱Proの電源ON

U-bootが起動し、環境変数をもとにカーネル、initrd、rootfsを特定

カーネルがメモリ上に読み込まれる

initrdがメモリ上に読み込まれる

カーネルの起動

initrdを起動時のルート・ファイル・システムとしてマウント

initrd内のlinuxrcスクリプトがルート・ファイル・システムをマウントする際に必要なドライバをカーネルに読み込んでから実際のルート・ファイル・システムをマウント

初期化プロセス


となると思っていたんですが・・

製品仕様書のAppendixには「initrd-----(Not use)」という記述が多い。
でもinitrdがないとlinuxrcスクリプトが走らず、rootfsがマウントできないと思うんだけど・・。
ちなみにinitrdを必要とするブートはAppendixの

A.4.uImage(tftp load)、initrd(tftp load)の場合のブート設定


だけ。
このブート方法の詳細は

uImage→tftpからロード
initrd→tftpからロード
rootfs→initrd内に存在
備考→initrd内に、rootfsが存在すること。initrdのrootfsを展開後、32MB以内であること。


とある。
これはつまり・・フラッシュからもHDDからも起動できなくなった場合、tftpでrootfsを扱えないからinitrdにのせて玄箱Proに転送して、/dev/mtdblock2にrootfsを展開する、ってことなんでしょうか?
この/dev/mtdblock2に展開って作業をinitrdがやってるのかな。

いや、いずれにしても、initrdをNot useってのがよくわかりません・・。

bootargs_rootでrootfsの場所を指定したってことはカーネルにパラメータとしてこの情報が伝わっているんですよね。
てことは、カーネルが起動して、しかしinitrdを起動させることなくカーネル自身がrootfsをマウントしてるってことでしょうか?

なんだかまた基本的なところでつまずいている感じですね。
これをどうやって検証すればいいのか、これを考えるところからまた長い道のりが・・。
別窓 | memo:起動処理 | コメント:0 | トラックバック:0
∧top | under∨
| 玄箱Pro、直します。 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。