Monday, January 22, 2007
Saturday, January 20, 2007
SPG290 uClinux make 生成 linux & romfs.img
依照內定值, make 的結果回升成一份 2.6.17 uClinux kernel, 以及romfs.img 這樣一份 root filesystem (以下簡稱微 rootfs)
export PATH=your_score_tool_path:$PATH
make CROSS_COMPILE=score-linux-elf-
這時候生成以下兩個檔案, 一個是Linux kernel一個是 rootfs
kernel: linux-2.6.x/linux
rootfs: images/romfs.img
一個展開的 rootfs 放在 romfs/
drwxr-xr-x 2 root root 4096 Jan 19 15:25 bin
drwxr-xr-x 2 root root 4096 Jan 19 14:20 dev
drwxr-xr-x 2 root root 4096 Jan 19 15:34 etc
drwxr-xr-x 2 root root 4096 Jan 19 14:20 home
drwxr-xr-x 2 root root 4096 Jan 19 14:20 lib
drwxr-xr-x 2 root root 4096 Jan 19 14:20 mnt
drwxr-xr-x 2 root root 4096 Jan 19 14:20 proc
lrwxrwxrwx 1 root root 4 Jan 19 15:25 sbin -> /bin
lrwxrwxrwx 1 root root 8 Jan 19 15:25 tmp -> /var/tmp
drwxr-xr-x 2 root root 4096 Jan 19 14:20 usr
drwxr-xr-x 2 root root 4096 Jan 19 14:20 var
手動做一份測試用 SPG290 ramdisk.img root filesystem
手動做一份測試用 ramdisk.img root filesystem
首先, 如步驟0, 先完成ramdisk.img, 其次kernel本身至少要打開initrd & ext2, 如步驟1, 這兩部分的kernel功能應該都沒有architecture-dependent, 另外也讓kernel自帶參數, 範例中的參數可能需要修改的有ttyS1以及0x
當kernel與rootfs兩份image file都準備好了, 依照原本的方法準備下載到板子
RAM, 線在規劃一段RAM來放ramdisk.img (
假設這時候我們已經下載kernel & root filesystem 兩份image在RAM, 啟動start_kernel, 這時候, kernel執行的後面階段會到0x
<0>
dd if=/dev/zero of=ramdisk.img bs=1024 count=4096 # create 4MB image
mkfs.ext2 ramdisk.img
mount ramdisk.img /mnt –o loop
mkdir /mnt/dev
mknod /mnt/dev/ram0 b 1 0
ls –l /mnt ## 空的image, 沒有檔案系統內容
umount /mnt
<1>
.config # kernel configuration
CONFIG_BLK_DEV_INITRD=y
CONFIG_CMDLINE="console = ttyS1 , 115200 root = / dev / ram0 rw initrd = 0x
CONFIG_EXT2_FS=y
Monday, January 08, 2007
elf2flt porting
1. elf2flt.ld 2. elf2flt.c (elf2flt tool) 3. binfmt_flat.c (in kernel)
elf2flt.c (around line 1300)
case SCOPE_SPG290:
relocation_needed = 1;
pflags = 0x40000; // need to fix this value
sym_vma = bfd_section_vma(abs_bfd, sym_section);
sym_addr += sym_vma + q->addend;
sym_addr &= 0x000003ff;
sym_addr |= (
htonl(*(unsigned long *)r_mem)
& 0xfffffc00
);
break;
--
ld-elf2flt -- A linker replacement that implements a -elf2flt option for the
linker and runs elf2flt automatically for you. It auto
detects PIC/non-PIC code and adjusts its option accordingly.
It uses the environment variable FLTFLAGS when running
elf2flt. It runs /.../m68k-elf-ld.real to do the actual
linking.
