The output message: Linux version 2.6.17-uc1[DT0.8] ([EMAIL PROTECTED]) (gcc version 3.4.0) #556 PREEMPT Thu Feb 15 05:23:31 CST 2007 CPU: Samsung-S3C44B0x [44b07700] Machine: S3C44B0X Development Board CPU0: D VIVT write-through cache CPU0: cache: 512 bytes, associativity 1, 8 byte lines, 64 sets Built 1 zonelists Kernel command line: root=/dev/ram0 initrd=0x0c300000,800k keepinitrd PID hash table entries: 64 (order: 6, 256 bytes) Dentry cache hash table entries: 1024 (order: 0, 4096 bytes) Inode-cache hash table entries: 1024 (order: 0, 4096 bytes) Memory: 8MB = 8MB total Memory: 6448KB available (652K code, 140K data, 60K init) Mount-cache hash table entries: 512 checking if image is initramfs...it isn't (bad gzip magic numbers); looks like an initrd, initrd_start=0xc300000, initrd_size=819200 ttyS0 at I/O 0x1d00000 (irq = 3) is a Samsung S3C44B0 Internal UART ttyS1 at I/O 0x1d04000 (irq = 2) is a Samsung S3C44B0 Internal UART NetWinder Floating Point Emulator V0.97 (double precision) io scheduler noop registered io scheduler deadline registered (default) io scheduler cfq registered RAMDISK driver initialized: 2 RAM disks of 800K size 1024 blocksize loop: loaded (max 8 devices) RAMDISK: romfs filesystem found at block 0 RAMDISK: Loading 137KiB [1 disk] into ram disk... done. VFS: Mounted root (romfs filesystem) readonly. Freeing init memory: 60K console init ready. Star run init process! do_execve(...) @ fs/exec.c:01222 exec /sbin/init successfully ! . execve(...) @ arch/arm/kernel/sys_arm.c:00312 execve asm BEGIN .
2007/3/21, Du Thomas <[EMAIL PROTECTED]>:
I port uClinux 2.6.17-uc1 to S3C44B0X[NOMMU, NOFP] for a long times, tools chain downloaded arm-elf-tools-20040427.sh from http://opensrc.sec.samsung.com/ <http://opensrc.sec.samsung.com/%C2%A0>(arm-elf-gcc 3.4.0 ), the uClinux just can execute to the linux-2.6.x/init/main.c's run_init_process("/sbin/init"); there are some problems when run to linux-2.6.x/arch/arm/kernel/Sys_arm.c's function: execve ============================================================= long execve(const char *filename, char **argv, char **envp) { struct pt_regs regs; int ret; memset(®s, 0, sizeof(struct pt_regs)); ret = do_execve((char *)filename, (char __user * __user *)argv, (char __user * __user *)envp, ®s); if (ret < 0) goto out; /* * Save argc to the register structure for userspace. */ regs.ARM_r0 = ret; /* * We were successful. We won't be returning to our caller, but * instead to user space by manipulating the kernel stack. */ //--------------------------- hell begin -------------------- asm( "add r0, %0, %1\n\t" "mov r1, %2\n\t" "mov r2, %3\n\t" "bl memmove\n\t" /* copy regs to top of stack */ "mov r8, #0\n\t" /* not a syscall */ "mov r9, %0\n\t" /* thread structure */ "mov sp, r0\n\t" /* reposition stack pointer */ "b ret_to_user" : : "r" (current_thread_info()), "Ir" (THREAD_START_SP - sizeof(regs)), "r" (®s), "Ir" (sizeof(regs)) : "r0", "r1", "r2", "r3", "ip", "lr", "memory"); out: return ret; } ================================================================== I trace to: b ret_to_user and pass a lots, there be: swi 0x900036 what's the hell? uClinux like fall into a death cycle, it make me crazy! Is there anybody have some idea? THX !!!!!
_______________________________________________ uClinux-dev mailing list [email protected] http://mailman.uclinux.org/mailman/listinfo/uclinux-dev This message was resent by [email protected] To unsubscribe see: http://mailman.uclinux.org/mailman/options/uclinux-dev
