当前位置首页 > Linux知识

u-bootREADME--linuxsupport

阅读次数:250 次  来源:admin  发布时间:

Linux HOWTO:

============

Porting Linux to U-Boot based systems:

---------------------------------------

U-Boot cannot save you from doing all the necessary modifications to

configure the Linux device drivers for use with your target hardware

(no, we don't intend to provide a full virtual machine interface to

Linux :-).

But now you can ignore ALL boot loader code (in arch/powerpc/mbxboot).

Just make sure your machine specific header file (for instance

include/asm-ppc/tqm8xx.h) includes the same definition of the Board

Information structure as we define in include/asm-<arch>/u-boot.h,

and make sure that your definition of IMAP_ADDR uses the same value

as your U-Boot configuration in CONFIG_SYS_IMMR.

Configuring the Linux kernel:

-----------------------------

No specific requirements for U-Boot. Make sure you have some root

device (initial ramdisk, NFS) for your target system.

Building a Linux Image:

-----------------------

With U-Boot, "normal" build targets like "zImage" or "bzImage" are

ot used. If you use recent kernel source, a new build target

"uImage" will exist which automatically builds an image usable by

U-Boot. Most older kernels also have support for a "pImage" target,

which was introduced for our predecessor project PPCBoot and uses a

100% compatible format.

Example:

make TQM850L_config

make oldconfig

make de

make uImage

The "uImage" build target uses a special tool (in 'tools/mkimage') to

encapsulate a compressed Linux kernel image with header information,

CRC32 checksum etc. for use with U-Boot. This is what we are doing:

* build a standard "vmlinux" kernel image (in ELF binary format):

* convert the kernel into a raw binary image:

${CROSS_COMPILE}-objcopy -O binary \

-R .note -R .comment \

-S vmlinux linux.bi

* compress the binary image:

gzip -9 linux.bi

* package compressed binary image for U-Boot:

mkimage -A ppc -O linux -T kernel -C gzip \

-a 0 -e 0 -n "Linux Kernel Image" \

-d linux.bin.gz uImage

The "mkimage" tool can also be used to create ramdisk images for use

with U-Boot, either separated from the Linux kernel image, or

combined into one file. "mkimage" encapsulates the images with a 64

yte header containing information about target architecture,

operating system, image type, compression method, entry points, time

tamp, CRC32 checksums, etc.

"mkimage" can be called in two ways: to verify existing images and

rint the header information, or to build new images.

In the first form (with "-l" option) mkimage lists the informatio

contained in the header of an existing U-Boot image; this include

checksum verification:

tools/mkimage -l image

-l ==> list image header informatio

The second form (with "-d" option) is used to build a U-Boot image

from a "data file" which is used as image payload:

tools/mkimage -A arch -O os -T type -C comp -a addr -e ep \

-n name -d data_file image

-A ==> set architecture to 'arch'

-O ==> set operating system to 'os'

-T ==> set image type to 'type'

-C ==> set compression type 'comp'

-a ==> set load address to 'addr' (hex)

-e ==> set entry point to 'ep' (hex)

-n ==> set image name to 'name'

-d ==> use image data from 'datafile'

Right now, all Linux kernels for PowerPC systems use the same load

address (0x00000000), but the entry point address depends on the

kernel version:

- 2.2.x kernels have the entry point at 0x0000000C,

- 2.3.x and later kernels have the entry point at 0x00000000.

So a typical call to build a U-Boot image would read:

-> tools/mkimage -n '2.4.4 kernel for TQM850L' \

gt; -A ppc -O linux -T kernel -C gzip -a 0 -e 0 \

gt; -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz \

gt; examples/uImage.TQM850L

Image Name: 2.4.4 kernel for TQM850L

Created: Wed Jul 19 02:34:59 2000

Image Type: PowerPC Linux Kernel Image (gzip compressed)

Data Size: 335725 Bytes = 327.86 kB = 0.32 MB

Load Address: 0x00000000

Entry Point: 0x00000000

To verify the contents of the image (or check for corruption):

-> tools/mkimage -l examples/uImage.TQM850L

Image Name: 2.4.4 kernel for TQM850L

Created: Wed Jul 19 02:34:59 2000

Image Type: PowerPC Linux Kernel Image (gzip compressed)

Data Size: 335725 Bytes = 327.86 kB = 0.32 MB

Load Address: 0x00000000

Entry Point: 0x00000000

NOTE: for embedded systems where boot time is critical you can trade

eed for memory and install an UNCOMPRESSED image instead: thi

eeds more space in Flash, but boots much faster since it does not

eed to be uncompressed:

-> gunzip /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux.gz

-> tools/mkimage -n '2.4.4 kernel for TQM850L' \

gt; -A ppc -O linux -T kernel -C none -a 0 -e 0 \

gt; -d /opt/elsk/ppc_8xx/usr/src/linux-2.4.4/arch/powerpc/coffboot/vmlinux \

gt; examples/uImage.TQM850L-uncompressed

Image Name: 2.4.4 kernel for TQM850L

Created: Wed Jul 19 02:34:59 2000

Image Type: PowerPC Linux Kernel Image (uncompressed)

Data Size: 792160 Bytes = 773.59 kB = 0.76 MB

Load Address: 0x00000000

Entry Point: 0x00000000

Similar you can build U-Boot images from a 'ramdisk.image.gz' file

when your kernel is intended to use an initial ramdisk:

-> tools/mkimage -n 'Simple Ramdisk Image' \

gt; -A ppc -O linux -T ramdisk -C gzip \

gt; -d /LinuxPPC/images/SIMPLE-ramdisk.image.gz examples/simple-initrd

Image Name: Simple Ramdisk Image

Created: Wed Jan 12 14:01:50 2000

Image Type: PowerPC Linux RAMDisk Image (gzip compressed)

Data Size: 566530 Bytes = 553.25 kB = 0.54 MB

Load Address: 0x00000000

Entry Point: 0x00000000

Installing a Linux Image:

-------------------------

To downloading a U-Boot image over the serial (console) interface,

you must convert the image to S-Record format:

objcopy -I binary -O srec examples/image examples/image.srec

The 'objcopy' does not understand the information in the U-Boot

image header, so the resulting S-Record file will be relative to

address 0x00000000. To load it to a given address, you need to

ecify the target address as 'offset' parameter with the 'loads'

command.

Example: install the image to address 0x40100000 (which on the

TQM8xxL is in the first Flash bank):

=> erase 40100000 401FFFFF

.......... done

Erased 8 sector

=> loads 40100000

## Ready for S-Record download ...

~>examples/image.srec

1 2 3 4 5 6 7 8 9 10 11 12 13 ...

...

15989 15990 15991 15992

[file transfer complete]

[connected]

## Start Addr = 0x00000000

You can check the success of the download using the 'iminfo' command

this includes a checksum verification so you can be sure no data

corruption happened:

=> imi 40100000

## Checking Image at 40100000 ...

Image Name: 2.2.13 for initrd on TQM850L

Image Type: PowerPC Linux Kernel Image (gzip compressed)

Data Size: 335725 Bytes = 327 kB = 0 MB

Load Address: 00000000

Entry Point: 0000000c

Verifying Checksum ... OK

Boot Linux:

-----------

The "bootm" command is used to boot an application that is stored i

memory (RAM or Flash). In case of a Linux kernel image, the content

of the "bootargs" environment variable is passed to the kernel a

arameters. You can check and modify this variable using the

"printenv" and "setenv" commands:

=> printenv bootarg

ootargs=root=/dev/ram

=> setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2

=> printenv bootarg

ootargs=root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2

=> bootm 40020000

## Booting Linux kernel at 40020000 ...

Image Name: 2.2.13 for NFS on TQM850L

Image Type: PowerPC Linux Kernel Image (gzip compressed)

Data Size: 381681 Bytes = 372 kB = 0 MB

Load Address: 00000000

Entry Point: 0000000c

Verifying Checksum ... OK

Uncompressing Kernel Image ... OK

Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:35:17 MEST 2000

Boot arguments: root=/dev/nfs rw nfsroot=10.0.0.2:/LinuxPPC nfsaddrs=10.0.0.99:10.0.0.2

time_init: decrementer frequency = 187500000/60

Calibrating delay loop... 49.77 BogoMIPS

Memory: 15208k available (700k kernel code, 444k data, 32k init) [c0000000,c1000000]

...

If you want to boot a Linux kernel with initial RAM disk, you pa

the memory addresses of both the kernel and the initrd image (PPBCOOT

format!) to the "bootm" command:

=> imi 40100000 40200000

## Checking Image at 40100000 ...

Image Name: 2.2.13 for initrd on TQM850L

Image Type: PowerPC Linux Kernel Image (gzip compressed)

Data Size: 335725 Bytes = 327 kB = 0 MB

Load Address: 00000000

Entry Point: 0000000c

Verifying Checksum ... OK

## Checking Image at 40200000 ...

Image Name: Simple Ramdisk Image

Image Type: PowerPC Linux RAMDisk Image (gzip compressed)

Data Size: 566530 Bytes = 553 kB = 0 MB

Load Address: 00000000

Entry Point: 00000000

Verifying Checksum ... OK

=> bootm 40100000 40200000

## Booting Linux kernel at 40100000 ...

Image Name: 2.2.13 for initrd on TQM850L

Image Type: PowerPC Linux Kernel Image (gzip compressed)

Data Size: 335725 Bytes = 327 kB = 0 MB

Load Address: 00000000

Entry Point: 0000000c

Verifying Checksum ... OK

Uncompressing Kernel Image ... OK

## Loading RAMDisk Image at 40200000 ...

Image Name: Simple Ramdisk Image

Image Type: PowerPC Linux RAMDisk Image (gzip compressed)

Data Size: 566530 Bytes = 553 kB = 0 MB

Load Address: 00000000

Entry Point: 00000000

Verifying Checksum ... OK

Loading Ramdisk ... OK

Linux version 2.2.13 (wd@denx.local.net) (gcc version 2.95.2 19991024 (release)) #1 Wed Jul 19 02:32:08 MEST 2000

Boot arguments: root=/dev/ram

time_init: decrementer frequency = 187500000/60

Calibrating delay loop... 49.77 BogoMIPS

...

RAMDISK: Compressed image found at block 0

VFS: Mounted root (ext2 filesystem).

ash#

Boot Linux and pass a flat device tree:

-----------

First, U-Boot must be compiled with the appropriate defines. See the sectio

titled "Linux Kernel Interface" above for a more in depth explanation. The

following is an example of how to start a kernel and pass an updated

flat device tree:

=> print oftaddr

oftaddr=0x300000

=> print oft

oft=oftrees/mpc8540ads.dt

=> tftp $oftaddr $oft

Speed: 1000, full duplex

Using TSEC0 device

TFTP from server 192.168.1.1; our IP address is 192.168.1.101

Filename 'oftrees/mpc8540ads.dtb'.

Load address: 0x300000

Loading: #

done

Bytes transferred = 4106 (100a hex)

=> tftp $loadaddr $bootfile

Speed: 1000, full duplex

Using TSEC0 device

TFTP from server 192.168.1.1; our IP address is 192.168.1.2

Filename 'uImage'.

Load address: 0x200000

Loading:############

done

Bytes transferred = 1029407 (fb51f hex)

=> print loadaddr

loadaddr=200000

=> print oftaddr

oftaddr=0x300000

=> bootm $loadaddr - $oftaddr

## Booting image at 00200000 ...

Image Name: Linux-2.6.17-dirty

Image Type: PowerPC Linux Kernel Image (gzip compressed)

Data Size: 1029343 Bytes = 1005.2 kB

Load Address: 00000000

Entry Point: 00000000

Verifying Checksum ... OK

Uncompressing Kernel Image ... OK

Booting using flat device tree at 0x300000

Using MPC85xx ADS machine descriptio

Memory CAM mapping: CAM0=256Mb, CAM1=256Mb, CAM2=0Mb residual: 0M

[snip]

上一篇:fedora17一些TIPS(自启动,调节屏幕亮度)
下一篇:Centos7安装MySQL详细步骤