[U-Boot-Users] A simple howto boot sequoia (ARCH=powerpc) using flattened device tree (FDT)
Larry Johnson
lrj at arlinx.com
Thu May 22 18:58:57 CEST 2008
Hi Niklaus, Stefan, and all,
Niklaus Giger wrote:
> Hi
>
> It took me a evening to put everything together. Therefore I send this mail
> hoping it may help somebody else. Hopefully some of the content will find
> its way into the DULG/FAQ, may as point 14.3.30. "Booting using flattened device tree (FDT)"
Niklaus, thank you for putting together this howto. It did help me.
I also have a couple of comments and questions.
> First one needs a recent U-boot with FDT support compiled into, e.g
> 1.3.2-rc3-g772003e4-dirty (Apr 11 2008 - 15:56:0 for the sequoia board.
>
> Secone one needs a recent Linux kernel made using "ARCH=powerpc", e.g. from
> 2.6.25-00002-ga9bf9f0 from git://www.denx.de/git/linux-2.6-denx.git.
>
> Third one needs a recent dtc (Device Tree Compiler). The following commands
> $ git clone http://www.jdl.com/software/dtc.git
> $ cd dtc && make && sudo cp dtc /usr/local/bin
> should do the job.
>
> Now you are ready to compile the device tree blob. I used the commands given in
> http://www.denx.de/wiki/view/DULG/LinuxFDTBlob
> dtc -b 0 -V 17 -R 4 -S 0x3000 -I dts -O dtb -f arch/powerpc/boot/dts/sequoia.dts \
>> /tftpboot/sequoia/sequoia.dtb
BTW, because the ">" before "/tftpboot/sequoia/sequoia.dtb" is the first
character on the line, Thunderbird displays it as a quote.
> Now power up your sequoia board and execute the following commands to start a
> Linux kernel on a NFS root device. The following commands did the job for me:
>
>> Hit any key to stop autoboot: 0
>> => tftp 200000 /tftpboot/sequoia/uImage
>> Waiting for PHY auto negotiation to complete.. done
>> ENET Speed is 100 Mbps - FULL duplex connection (EMAC0)
>> Using ppc_4xx_eth0 device
>> TFTP from server 172.25.1.3; our IP address is 172.25.1.88
>> Filename '/tftpboot/sequoia/uImage'.
>> Load address: 0x200000
>> Loading: #################################################################
>> ######################
>> done
>> Bytes transferred = 1277067 (137c8b hex)
>> => tftp 1000000 /tftpboot/sequoia/sequoia.dtb
>> ENET Speed is 100 Mbps - FULL duplex connection (EMAC0)
>> Using ppc_4xx_eth0 device
>> TFTP from server 172.25.1.3; our IP address is 172.25.1.88
>> Filename '/tftpboot/sequoia/sequoia.dtb'.
>> Load address: 0x1000000
>> Loading: #
>> done
>> Bytes transferred = 12288 (3000 hex)
>> => run nfsargs addip addtty
>> => printenv bootargs
>> bootargs=root=/dev/nfs rw nfsroot=172.25.1.3:/opt/eldk/ppc_4xxFP
>> ip=172.25.1.88:172.25.1.3:::sequoia:eth0:off panic=1 console=ttyS0,115200
The "sequoia.dts" file in linux-2.6-denx contains a line specifying
"bootargs", and this apparently overrides the environment variable, as
can be seen by typing "cat /proc/cmdline" under Linux.
>> => fdt addr 1000000
>> => fdt chosen
>> => fdt list
> <...>
>> => fdt print
> <...>
>> => bootm 200000 - 1000000
>> ## Booting image at 00200000 ...
When I run this using U-Boot 1.3.3, it tells me that it's booting a
"Legacy Image". Is this correct?
>> Image Name: Linux-2.6.25-00002-ga9bf9f0
>> Image Type: PowerPC Linux Kernel Image (gzip compressed)
>> Data Size: 1277003 Bytes = 1.2 MB
>> Load Address: 00000000
>> Entry Point: 00000000
>> Verifying Checksum ... OK
>> Uncompressing Kernel Image ... OK
>> Booting using the fdt at 0x1000000
>> Loading Device Tree to 007fc000, end 007fefff ... OK
>> Using Sequoia machine description
> <...>
>
> Thats it. Now you should boot into your shiny new Linux kernel. Attached is
> a gzipped output of my startup (for the curious).
>
> Once my kernel started I used the following commands to update my u-boot
> environment:
>> setenv ftd_get 'tftp 200000 ${bootfile};tftp 1000000 sequoia/sequoia.dtb;fdt addr 1000000;'
>> setenv net_nfs 'run ftd_get nfsargs addip addtty; fdt chosen;bootm 200000 - 1000000'
>> saveenv
>
> Best regards
>
> Niklaus
I normally test Linux by booting Sequoia from the flash images
distributed by AMCC. The flash partition information in "sequoia.dts"
is for an early distribution (Rev. 2, I think). The latest distribution
I have is Rev. 6. (Is there anything later?) The following patch
updates the partition information for Rev 6. It also comments out the
"bootargs" definition, so I can specify it from U-Boot.
diff --git a/arch/powerpc/boot/dts/sequoia.dts b/arch/powerpc/boot/dts/sequoia.dts
index 96dbe49..181b796 100644
--- a/arch/powerpc/boot/dts/sequoia.dts
+++ b/arch/powerpc/boot/dts/sequoia.dts
@@ -168,32 +168,36 @@
nor_flash at 0,0 {
compatible = "amd,s29gl256n", "cfi-flash";
bank-width = <2>;
- reg = <0 000000 4000000>;
+ reg = <0 0000000 4000000>;
#address-cells = <1>;
#size-cells = <1>;
- partition at 0 {
+ partition at 0000000 {
label = "Kernel";
- reg = <0 180000>;
+ reg = <0000000 0200000>;
};
- partition at 180000 {
+ partition at 0200000 {
+ label = "kozio";
+ reg = <0200000 0200000>;
+ };
+ partition at 0400000 {
label = "ramdisk";
- reg = <180000 200000>;
+ reg = <0400000 1400000>;
};
- partition at 380000 {
+ partition at 1800000 {
label = "file system";
- reg = <380000 3aa0000>;
+ reg = <1800000 0400000>;
};
- partition at 3e20000 {
- label = "kozio";
- reg = <3e20000 140000>;
+ partition at 1c00000 {
+ label = "unused";
+ reg = <1c00000 2360000>;
};
partition at 3f60000 {
label = "env";
- reg = <3f60000 40000>;
+ reg = <3f60000 0040000>;
};
partition at 3fa0000 {
label = "u-boot";
- reg = <3fa0000 60000>;
+ reg = <3fa0000 0060000>;
};
};
@@ -359,6 +363,6 @@
chosen {
linux,stdout-path = "/plb/opb/serial at ef600300";
- bootargs = "console=ttyS0,115200";
+/* bootargs = "console=ttyS0,115200"; */
};
};
Best regards,
Larry
More information about the U-Boot
mailing list