Re: [PATCH v3] MIPS: Clean up the calculation of VMLINUZ_LOAD_ADDRESS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, Sam

On Tue, Jun 1, 2010 at 11:27 PM, Sam Ravnborg <sam@xxxxxxxxxxxx> wrote:
[...]
>
>> diff --git a/arch/mips/boot/.gitignore b/arch/mips/boot/.gitignore
>> index 4667a5f..f210b09 100644
>> --- a/arch/mips/boot/.gitignore
>> +++ b/arch/mips/boot/.gitignore
>> @@ -3,3 +3,4 @@ elf2ecoff
>>  vmlinux.*
>>  zImage
>>  zImage.tmp
>> +calc_vmlinuz_load_addr
>
> Does this do any good in this file?
> I had assumed this covered only the same dir as the .gitignore file
> is stored. But I may be wrong.

I have tried to add this to boot/compressed/.gitignore, but there was
no .gitignore there and found the vmlinux.* in boot/.gitignore, it
worked to hide the vmlinux.* under boot/compressed/, then I put the
calc_vmlinuz_load_addr to this .gitignore too ;) it really hided the
calc_vmlinuz_load_addr, that's it.

BTW: I just don't want to add a new file for one line if it is not necessary ;)

>
>> diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile
>> index 7204dfc..cd9ee04 100644
>> --- a/arch/mips/boot/compressed/Makefile
>> +++ b/arch/mips/boot/compressed/Makefile
>>
>> -LDFLAGS_vmlinuz := $(LDFLAGS) -Ttext $(VMLINUZ_LOAD_ADDRESS) -T
>> -vmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/piggy.o
>> -     $(call cmd,ld)
>> +# Calculate the load address of the compressed kernel
>> +hostprogs-y := calc_vmlinuz_load_addr
>> +
>> +vmlinuzobjs-y += $(obj)/piggy.o
>> +
>> +quiet_cmd_zld = LD      $@
>> +      cmd_zld = $(LD) $(LDFLAGS) -Ttext $(shell $(obj)/calc_vmlinuz_load_addr $(objtree)/$(KBUILD_IMAGE) $(VMLINUX_LOAD_ADDRESS)) -T $< $(vmlinuzobjs-y) -o $@
>
> The line seriously fail the 80 char limit.
> Something like this:
>
> load_addr = $(shell $(obj)/calc_vmlinuz_load_addr \
>                    $(objtree)/$(KBUILD_IMAGE) $(VMLINUX_LOAD_ADDRESS)
> quiet_cmd_zld = LD      $@
>      cmd_zld = $(LD) $(LDFLAGS) -Ttext $(load-addr) -T $< $(vmlinuzobjs-y) -o $@
>
> Note: The load_addr local variable _must_ use "=" asignment

This is the _key_ stuff. I  tried to use VMLINUZ_LOAD_ADDR(like your
load_addr) as the load address, but failed all the time, seems I used
the ":=" assignment, now with "=", it works, thanks!

And could you please explain their differences?

>
>> +vmlinuz: $(src)/ld.script $(vmlinuzobjs-y) $(obj)/calc_vmlinuz_load_addr
>> +     $(call cmd,zld)
>>       $(Q)$(OBJCOPY) $(OBJCOPYFLAGS) $@
>
> Does objcopy support equally named input and out files?
> If this is the case you could use:
> $(call cmd,objcopy) as the last line.

Just checked the ld.script, and found the .reginfo section have been
discarded, then it's time to remove this objcopy line(this objcopy
line only remove the .reginfo section).

[...]
>> +
>> +     /* Align with 65536 */
>> +     vmlinuz_load_addr += (65536 - vmlinux_size % 65536);
>
> You have plenty of rooms for a comment about why you do this.
> Would be good to use this possibility.
>

The address of "vmlinux_load_addr + vmlinux_size" may be not aligned
with the standard data type of MIPS, that's why we need the alignment,
but here 65536, 64k(about several pages), is really a little big, I
will use 16 bytes in the next revision and add more comments for it:

+       /*
+        * Align with 16 bytes: "greater than that used for any standard data
+        * types by a MIPS compiler." -- See MIPS Run Linux (Second Edition).
+        */
+
+       vmlinuz_load_addr += (16 - vmlinux_size % 16);

Thanks & Regards,

-- 
Studying engineer. Wu Zhangjin
Lanzhou University      http://www.lzu.edu.cn
Distributed & Embedded System Lab      http://dslab.lzu.edu.cn
School of Information Science and Engeneering         http://xxxy.lzu.edu.cn
wuzhangjin@xxxxxxxxx         http://falcon.oss.lzu.edu.cn
Address:Tianshui South Road 222,Lanzhou,P.R.China    Zip Code:730000
Tel:+86-931-8912025



[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux