hi, zhangfx,
    for the first question, you have explained very clearly, I
understand it right now!
    for the second question, I will try your advise and will feedback
then!

thank you for your patient and detailed reply!

andy

On 12月4日, 下午4时00分, "Fuxin Zhang" <zhan...@lemote.com> wrote:
> > hi, zhangfx,
> >     I followed your advice by adding printf to the do_ri function and
> > found that when the kernel init the system, this function was called
> > hundreds of times and then the kernel panic, so it means that there
> > are illegal instruction exist, but why do_ri will be called so many
> > times?
>
> for some instructions, they are not supported by the hardware, but the
> kernel will simulate it in software correctly, so it won't cause a fatal
> error. But if the kernel has no code to simulate it, the related user land
> process will be killed with SIGILL(if it happens in kernel mode, kernel
> will panic). So check which instruction cause the exception and check if
> do_ri has code to handle it.>     another question is that by add printf to 
> the init source code, I
> > found that the kernel panics in the open_devnull_stdio,
>
> the kernel panic because init exit. e.g. if your init process is just one
> line code
>    int main() return 0;
> you will see the kernel panic.
>
> I am not sure about your detail situation, but if the second dup2 cause a
> segmentation fault or some other fatal fault for init process, the kernel
> will panic shortly after. Also it is possible if the init has several
> threads and some other threads cause the exit of the process.
>
> The init code should have some existing switchable debug code, try to turn
> them on to find more clues.
>
>
>
>
>
>
>
>
>
> > void open_devnull_stdio(void)
> > {
> >     int fd;
> >     static const char *name = "/dev/__null__";
> >     if (mknod(name, S_IFCHR | 0600, (1 << 8) | 3) == 0) {
> >         fd = open(name, O_RDWR);
> >         unlink(name);
> >         if (fd >= 0) {
> >             dup2(fd, 0);    //*************************this call don't
> > panic the kernel*******************
> >             dup2(fd, 1);    //*************************panic
> > here**************************
> >             dup2(fd, 2);
> >             if (fd > 2) {
> >                 close(fd);
> >             }
> >             return;
> >         }
> >     }
>
> >     exit(1);
> > }
>
> > as you can see from the source code, the dup2 is a system call, and
> > the kernel was compiled by using cross-compile from loongson
> > community, there should no illegal instructions exist?
> > If it possible the kernel panic at other position and the printf
> > information don't flush out?
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "loongson-dev" group.
> > To post to this group, send email to loongson-dev@googlegroups.com.
> > To unsubscribe from this group, send email to
> > loongson-dev+unsubscr...@googlegroups.com.
> > For more options, visit this group at
> >http://groups.google.com/group/loongson-dev?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"loongson-dev" group.
To post to this group, send email to loongson-dev@googlegroups.com.
To unsubscribe from this group, send email to 
loongson-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/loongson-dev?hl=en.

Reply via email to