Hi, Le Sunday 16 August 2009 18:20:56 wilbur.chan, vous avez écrit : > Hi,Nicolas, > > > I've got some problem with kexec on mips32... > > > in your code for kexec on mips32, there is a relocate_new_kernel function . > > > In the end of this function , it jump to kexec_start_address by 'j s1' > > > > Because I changed the kexec-tools code ,in the hope that, it > simplely passed the new kernel segment data into the old kernel.(so > > I didn't pass the command-line segment in, in my code, there is just > one segment , segment[0] = kernel_data). > > > So I need to change register s1 to the new kernel entry address, and > jump to new kernel directly. > > > > In my vmlinux, the entry is 0x802b0000,so I let image->start = > 0x2b0000,and invoke relocate_new_kernel. > > > However, whether I changed kexec_start_address to 0x802b0000 or > 0x2b0000 , the 'j s1' seemed taking no effect? Should not you add a nop right after the j s1 in order to fill in the branch delay slot with an instruction which does nothing ? > > > (I wrote 88 to address0xa1230000 before 'j s1' , it succedd .I also > wrote 78 to address 0xa1230000 in the beginning > > of head.S of the new kernel , but failed. And I reset the board to > uboot mode, used 'md 0x802b0400' to display the new kernel > > in ram, it is identical to the objdump content of the vmlinux. So I > guess, this problem lays in the failing of 'j 0x802b0000' > > or 'j 0x2b0000'. I don't know why 'j s1' failed , any suggestions > about this ? Thank you very much. > > regads, > > Wilbur -- Best regards, Florian Fainelli Email: florian@xxxxxxxxxxx Web: http://openwrt.org IRC: [florian] on irc.freenode.net -------------------------------