2009年2月4日

miniBfin启动busybox成功

1. 设置CONFIG_INITRAMFS_SOURCE="image根目录",不需要设置roo=....内核参数,比linux2.4方便多了。
2. 写一个启动shell的程序
#include <stdio.h>
#include <unistd.h>

int
main(init argc, char argv[])
{
printf("Hello world from initramfs!\n");
system("/bin/sh");
sleep(99999);
return 0;
}
3.编译
bfin-linux-uclibc-gcc -o init -static -s init.c
4.将init放到image根目录下面
5.创建console设备
mknod -m 600 dev/console c 5 1

请参考:深入理解 Linux 2.6 的 initramfs 机制 (上)

启动后的信息:
U-Boot 1.1.5 (Feb 4 2009 - 14:52:53)

CPU: ADSP BF532 Rev.: 0.5
Board: miniBfin
http://bfincn.blogspot.com
Clock: VCO: 400 MHz, Core: 400 MHz, System: 133 MHz
SDRAM: 32 MB
*** Warning - bad CRC, using default environment

In: serial
Out: serial
Err: serial
No ethernet found.
starting from spi flash
Hit any key to stop autoboot: 0

EEPROM @0x0 read: addr 0x01000000 off 0x30000 count 0x200000

done
## Booting image at 01000000 ...
Image Name: Linux-2.6.28-ADI-2009R1-pre-svn6
Image Type: Blackfin Linux Kernel Image (gzip compressed)
Data Size: 1921753 Bytes = 1.8 MB
Load Address: 00001000
Entry Point: 001b0fa4
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Starting Kernel at = 1b0fa4
Linux version 2.6.28-ADI-2009R1-pre-svn6028 (root@debian) (gcc version 4.1.2 (ADI svn)) #37 Wed Feb 4 14:32:22 CST 2009
Board Memory: 32MB
Kernel Managed Memory: 32MB
Memory map:
fixedcode = 0x00000400-0x00000490
text = 0x00001000-0x0012f260
rodata = 0x0012f260-0x001883f4
bss = 0x00188400-0x00197124
data = 0x00197124-0x001aa000
stack = 0x001a8000-0x001aa000
init = 0x001aa000-0x002a4000
available = 0x002a4000-0x01eff000
DMA Zone = 0x01f00000-0x02000000
Hardware Trace Active and Enabled
Boot Mode: 6
Blackfin support (C) 2004-2008 Analog Devices, Inc.
Compiled for ADSP-BF532 Rev 0.5
Blackfin Linux support by http://blackfin.uclinux.org/
Processor Speed: 400 MHz core clock and 133 MHz System Clock
Built 1 zonelists in Zone order, mobility grouping off. Total pages: 7873
Kernel command line: console=ttyBF0,115200
Configuring Blackfin Priority Driven Interrupts
PID hash table entries: 128 (order: 7, 512 bytes)
console [ttyBF0] enabled
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory available: 28736k/32768k RAM, (1000k init code, 1208k kernel code, 492k data, 1024k dma, 304k reserved)
Calibrating delay loop... 782.33 BogoMIPS (lpj=1564672)
Security Framework initialized
Mount-cache hash table entries: 512
Blackfin Scratchpad data SRAM: 4 KB
Blackfin L1 Data A SRAM: 16 KB (15 KB free)
Blackfin L1 Data B SRAM: 16 KB (16 KB free)
Blackfin L1 Instruction SRAM: 48 KB (41 KB free)
PDA for CPU0 reserved at 001890e8
net_namespace: 424 bytes
NET: Registered protocol family 16
Blackfin GPIO Controller
Blackfin DMA Controller
ip0x_init(): registering device resources
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP reno registered
NET: Registered protocol family 1
msgmni has been set to 56
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler cfq registered
Serial: Blackfin serial driver
bfin-uart.1: ttyBF0 at MMIO 0xffc00400 (irq = 21) is a BFIN-UART
brd: module loaded
dm9000 Ethernet Driver, V1.31
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: wrong id: 0x4a4a4a4a
dm9000 dm9000.0: not found (-19).
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: wrong id: 0x4a4a4a4a
dm9000 dm9000.1: not found (-19).
Driver 'sd' needs updating - please use bus_type methods
usbmon: debugfs is not available
driver isp1362-hcd, 2005-04-04
isp1362-hcd isp1362-hcd.0: ISP1362 Host Controller
isp1362-hcd isp1362-hcd.0: new USB bus registered, assigned bus number 1
isp1362_hc_reset:
Software reset timeout
Clock not ready after 100ms
isp1362-hcd isp1362-hcd.0: can't setup
isp1362-hcd isp1362-hcd.0: USB bus 1 deregistered
init error, -19
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP cubic registered
NET: Registered protocol family 17
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
Freeing unused kernel memory: 1000k freed
dma_alloc_init: dma_page @ 0x01d5a000 - 256 pages at 0x01f00000
Hello world from initramfs!


BusyBox v1.13.2 (2009-02-04 13:18:58 CST) built-in shell (msh)
Enter 'help' for a list of built-in commands.

# free
total used free shared buffers
Mem: 29736 5364 24372 0 0
Swap: 0 0 0
Total: 29736 5364 24372
#

miniBfin启动Linux操作系统成功

在调试中碰到一些问题,主要是:
1.对image的loading address和entry address理解上有错误,导致uboot解压vmImage失败,以后再分析。
2.由于miniBfin没有flash部分,在setup_arch会导致kernel panic,但是这时由于console driver还没有加载,无法输出printk消息,弄得我只好写一小段UART的打印函数进行调试,还好最终找到原因。

下面是系统启动的信息。还有很多工作没有完成,慢慢来。

U-Boot 1.1.5 (Feb 2 2009 - 22:25:59)

CPU: ADSP BF532 Rev.: 0.5
Board: miniBfin
http://bfincn.blogspot.com
Clock: VCO: 400 MHz, Core: 400 MHz, System: 133 MHz
SDRAM: 32 MB
*** Warning - bad CRC, using default environment

In: serial
Out: serial
Err: serial
No ethernet found.
starting from spi flash
Hit any key to stop autoboot: 0

EEPROM @0x0 read: addr 0x01000000 off 0x30000 count 0x110000

done
## Booting image at 01000000 ...
Image Name: Linux-2.6.28-ADI-2009R1-pre-svn6
Image Type: Blackfin Linux Kernel Image (gzip compressed)
Data Size: 1006736 Bytes = 983.1 kB
Load Address: 00001000
Entry Point: 001b0fa4
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Starting Kernel at = 1b0fa4
Linux version 2.6.28-ADI-2009R1-pre-svn6028 (root@debian) (gcc version 4.1.2 (ADI svn)) #31 Wed Feb 4 10:35:45 CST 2009
Board Memory: 32MB
Kernel Managed Memory: 32MB
Memory map:
fixedcode = 0x00000400-0x00000490
text = 0x00001000-0x0012f260
rodata = 0x0012f260-0x001883f4
bss = 0x00188400-0x00197124
data = 0x00197124-0x001aa000
stack = 0x001a8000-0x001aa000
init = 0x001aa000-0x001c3000
available = 0x001c3000-0x01eff000
DMA Zone = 0x01f00000-0x02000000
Hardware Trace Active and Enabled
Boot Mode: 6
Blackfin support (C) 2004-2008 Analog Devices, Inc.
Compiled for ADSP-BF532 Rev 0.5
Blackfin Linux support by http://blackfin.uclinux.org/
Processor Speed: 400 MHz core clock and 133 MHz System Clock
Built 1 zonelists in Zone order, mobility grouping off. Total pages: 7873
Kernel command line: console=ttyBF0,115200
Configuring Blackfin Priority Driven Interrupts
PID hash table entries: 128 (order: 7, 512 bytes)
console [ttyBF0] enabled
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory available: 29636k/32768k RAM, (100k init code, 1208k kernel code, 492k data, 1024k dma, 304k reserved)
Calibrating delay loop... 782.33 BogoMIPS (lpj=1564672)
Security Framework initialized
Mount-cache hash table entries: 512
Blackfin Scratchpad data SRAM: 4 KB
Blackfin L1 Data A SRAM: 16 KB (15 KB free)
Blackfin L1 Data B SRAM: 16 KB (16 KB free)
Blackfin L1 Instruction SRAM: 48 KB (41 KB free)
PDA for CPU0 reserved at 001890e8
net_namespace: 424 bytes
NET: Registered protocol family 16
Blackfin GPIO Controller
Blackfin DMA Controller
ip0x_init(): registering device resources
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP reno registered
NET: Registered protocol family 1
msgmni has been set to 57
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler cfq registered
Serial: Blackfin serial driver
bfin-uart.1: ttyBF0 at MMIO 0xffc00400 (irq = 21) is a BFIN-UART
brd: module loaded
dm9000 Ethernet Driver, V1.31
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: read wrong id 0x4a4a4a4a
dm9000 dm9000.0: wrong id: 0x4a4a4a4a
dm9000 dm9000.0: not found (-19).
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: read wrong id 0x4a4a4a4a
dm9000 dm9000.1: wrong id: 0x4a4a4a4a
dm9000 dm9000.1: not found (-19).
Driver 'sd' needs updating - please use bus_type methods
usbmon: debugfs is not available
driver isp1362-hcd, 2005-04-04
isp1362-hcd isp1362-hcd.0: ISP1362 Host Controller
isp1362-hcd isp1362-hcd.0: new USB bus registered, assigned bus number 1
isp1362_hc_reset:
Software reset timeout
Clock not ready after 100ms
isp1362-hcd isp1362-hcd.0: can't setup
isp1362-hcd isp1362-hcd.0: USB bus 1 deregistered
init error, -19
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP cubic registered
NET: Registered protocol family 17
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
VFS: Cannot open root device "<NULL>" or unknown-block(0,0)
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)