int kernel_execve(const char *filename, char *const argv[], char *const envp[])
{
register unsigned long __a0 asm("$4") = (unsigned long) filename;
register unsigned long __a1 asm("$5") = (unsigned long) argv;
register unsigned long __a2 asm("$6") = (unsigned long) envp;
register unsigned long __a3 asm("$7");
unsigned long __v0;
__asm__ volatile (" \n"
" .set noreorder \n"
" li $2, %5 # __NR_execve \n"
" syscall \n"
" move %0, $2 \n"
" move %1, $7 \n"
" .set reorder \n"
: "=&r" (__v0), "=r" (__a3)
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_execve)
: "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24",
"memory");
if (__a3 == 0)
return __v0;
return -__v0;
}
On Thu, Jan 27, 2011 at 7:55 PM, naveen yadav <yad.naveen@xxxxxxxxx> wrote:
Hi David,
thanks for your response.
I check and found that kernel is booting with 16KB page size with
ramdisk booting. But when I change to 64KB it give me
: applet not found
Kernel panic - not syncing: Attempted to kill init!
so I check and found that it is not able to execute well the system
call in kernel_execve function.
I am using codesourcercy toolchain(4.3.1). So is there a way to debug
this problem or how to debug below function.
int kernel_execve(const char *filename, char *const argv[], char *const envp[])
{
register unsigned long __a0 asm("$4") = (unsigned long) filename;
register unsigned long __a1 asm("$5") = (unsigned long) argv;
register unsigned long __a2 asm("$6") = (unsigned long) envp;
register unsigned long __a3 asm("$7");
unsigned long __v0;
__asm__ volatile (" \n"
" .set noreorder \n"
" li $2, %5 # __NR_execve \n"
" syscall \n"
" move %0, $2 \n"
" .set reorder \n"
: "=&r" (__v0), "=r" (__a3)
: "r" (__a0), "r" (__a1), "r" (__a2), "i" (__NR_execve)
: "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24",
"memory");
if (__a3 == 0)
return __v0;
return -__v0;
}
On Tue, Jan 25, 2011 at 12:26 AM, David Daney <ddaney@xxxxxxxxxxxxxxxxxx> wrote:
> On 01/24/2011 07:02 AM, naveen yadav wrote:
>>
>> Hi All,
>>
>>
>> we are using mips32r2 so I want to know which all pages size it can
>> support?
>> When I modify arch/mips/Kconfig. it boot sucessfully on 16KB page
>> size. but hang/not boot crash when change page size to 8KB,32KB and 64
>> KB.
>
> I don't think 8KB and 32KB work on most mips32r2 processors. You would have
> to check the processor manual to be sure.
>
>
>>
>> We are using 2.6.30 kernel.
>>
>> At Page Size 8KB and 32KB it hang in unpack_to_rootfs() function of
>> init/initramfs.c
>>
>> 64KB it hangs when execute init Kernel panic - not syncing: Attempted
>> to kill init!
>
> I regularly run 4K, 16K, and 64K page sizes with a Debian rootfs. If you
> run with a broken uClibc toolchain that doesn't support larger pages, it
> will of course fail. In this case the problem is with your toolchain, not
> the kernel.
>
> David Daney
>
>
>>
>> config PAGE_SIZE_4KB
>> bool "4kB"
>> help
>> This option select the standard 4kB Linux page size. On some
>> R3000-family processors this is the only available page size.
>> Using
>> 4kB page size will minimize memory consumption and is therefore
>> recommended for low memory systems.
>>
>> config PAGE_SIZE_8KB
>> bool "8kB"
>> depends on (EXPERIMENTAL&& CPU_R8000) || CPU_CAVIUM_OCTEON
>> help
>> Using 8kB page size will result in higher performance kernel at
>> the price of higher memory consumption. This option is
>> available
>> only on R8000 and cnMIPS processors. Note that you will need a
>> suitable Linux distribution to support this.
>>
>> config PAGE_SIZE_16KB
>> bool "16kB"
>> depends on !CPU_R3000&& !CPU_TX39XX
>> help
>> Using 16kB page size will result in higher performance kernel at
>> the price of higher memory consumption. This option is
>> available on
>> all non-R3000 family processors. Note that you will need a
>> suitable
>> Linux distribution to support this.
>>
>> config PAGE_SIZE_32KB
>> bool "32kB"
>> help
>> Using 32kB page size will result in higher performance kernel at
>> the price of higher memory consumption. This option is
>> available
>> only on cnMIPS cores. Note that you will need a suitable Linux
>> distribution to support this.
>>
>> config PAGE_SIZE_64KB
>> bool "64kB"
>> depends on EXPERIMENTAL&& !CPU_R3000&& !CPU_TX39XX
>> help
>> Using 64kB page size will result in higher performance kernel at
>> the price of higher memory consumption. This option is
>> available on
>> all non-R3000 family processor. Not that at the time of this
>> writing this option is still high experimental.
>>
>>
>
>