[RFC] Re: TP link MR3220 status, boot from flash via u-boot question

Aleksandr Rybalko ray at ddteam.net
Thu Mar 31 21:57:49 UTC 2011


On Thu, 31 Mar 2011 14:26:40 +0200
Milan Obuch <freebsd-mips at dino.sk> wrote:

> On Thu, 31 Mar 2011 18:39:36 +0800, Adrian Chadd <adrian at freebsd.org>
> wrote:
> 
> > Hi,
> > 
> > I've got freebsd working on the WR-1043ND which is a tplink 11n
> > router w/ uboot. I'll go find my notes and put them online, along
> > with a config file and whatever else is needed.
> > 
> 
> Hi,
> I am watching freebsd-wifi-build on googlecode and just noticed new
> config there... Is your 11n wifi already working too? I would be glad
> to compare your results with mine, so we could unify our efforts.
> Right now, kernel load from flash in u-boot is a show stopper for me,
> so if you could address this one first, it would help me really much.

Draft for wiki page 'Run from NOR flash with U-Boot'

Keywords: U-Boot, embedded

1. Ask U-Boot: "what do you support to boot?"

Normally, U-Boot use special image for kernel/ramfs packing. But we
need to know which compression support U-Boot that fleshed to our
target board.

First way: 
use mkimage utility (/usr/ports/devel/u-boot) and make test
images for all supported by mkimage compression types.
<code>
mkimage -A ${TARGET} -O linux -T kernel \
            -C ${COMPRESSION_TYPE} \
            -a ${RAM_START_ADDRESS} \
            -e ${RAM_START_ADDRESS} \
            -n 'FreeBSD Kernel Image' \
            -d SOME_SMALL_FILE_NAME \
            test.uboot
</code>
Then for each file, do transfer to board and run from image with
`bootm' command. And check what U-Boot answer you, if answer like
"Unimplemented compression type ?", then you know :).

Second way:
>From running Linux or U-Boot get first 64k block from kernel partition
in flash. 

Break your mkimage utility: avoid exit when we do "show info" (key -i)
CRC failed. And check compression type of 64k file we get from device.

Or just delete U-Boot image header from file
<code>
dd if=64k.file of=just_kern bs=64 skip=1
</code>
and check with file(1) utility 

2. Create image
2.1. More canonical way, we have mkimage, gzip or bz2 and compiled
kernel, maybe kernel.bin also.

<code>
gzip --best --force vmlinux.bin
</code>

for ELF kernel:
<code>
mkimage -A mips -O linux -T kernel \
            -C gzip \
            -a ${LOAD_ADDRESS} \
            -e ${START_ADDRESS} \
            -n 'FreeBSD Kernel Image' \
            -d kernel \
            kernel.uboot
</code>
LOAD_ADDRESS - in most cases this is RAM base address
START_ADDRESS = LOAD_ADDRESS + ELF_HEADER_SIZE (0x1000 for ELF image) 

for kernel.bin:

LOAD_ADDRESS = RAM_BASE_ADDRESS + 0x1000
START_ADDRESS = RAM_BASE_ADDRESS + 0x1000 

Don't forget to check/change KERNLOADADDR of kernel config file.
KERNLOADADDR must be equal to START_ADDRESS.

2.2. Longest way, but have smallest footprint, used only if  
U-Boot support LZMA.

Problem 1: Current version of mkimage from ports, don't support LZMA.
So we need new: http://my.ddteam.net/files/u-boot.new.tar.gz

Problem 2: Devices I know support only old LZMA. 
I use LZMA 4.17.

Then mkimage, like in 2.2., but -C lzma.

3. Now we have kernel U-Boot image, so transfer it to device and try
with `bootm' command.

4. If all fine, write image to flash kernel partition.


Hope this help :)

> 
> > I'll have to commit a dirty hack to the kernel config to let users
> > set the flash address to yank the ethernet MAC address from. Ew.
> > 
> 
> I've got most of my patches from Luiz (loos), maybe you are in contact
> already... I use already the same MAC as other firmwares do.
> 
> Regards,
> Milan
> _______________________________________________
> freebsd-mips at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-mips
> To unsubscribe, send any mail to
> "freebsd-mips-unsubscribe at freebsd.org"

Wait for comments!

WBW
-- 
Aleksandr Rybalko <ray at ddteam.net>


More information about the freebsd-mips mailing list