u-boot中mkp_w_picpath工具的具体使用
1.首先查看mkp_w_picpath的命令参数
[root@localhost tools]# ./mkp_w_picpath
Usage: ./mkp_w_picpath -l p_w_picpath
-l ==> list p_w_picpath header information
./mkp_w_picpath [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file
[:data_file...] p_w_picpath
-A ==> set architecture to 'arch' //用于指定CPU类型,比如ARM
-O ==> set operating system to 'os' //用于指定操作系统,比如Linux
-T ==> set p_w_picpath type to 'type' //用于指定p_w_picpath类型,比如Kernel
-C ==> set compression type 'comp' //指定压缩类型
-a ==> set load address to 'addr' (hex) //指定p_w_picpath的载入地址
-e ==> set entry point to 'ep' (hex) //内核的入口地址,一般是:p_w_picpath的载入地址+0x40(信息头的大小)
-n ==> set p_w_picpath name to 'name' //p_w_picpath在头结构中的命名
-d ==> use p_w_picpath data from 'datafile' //无头信息的p_w_picpath文件名
-x ==> set XIP (execute in place) //设置执行位置
2.制作添加头的uImage
[root@localhost boot]# ./mkp_w_picpath -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -n linux-2.6.13 -d zImage uImage
Image Name: linux-2.6.13
Created: Sat Dec 20 19:42:38 2008
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1588584 Bytes = 1551.35 kB = 1.51 MB
Load Address: 0x30008000
Entry Point: 0x30008040
注意:大家可以根据创建的头信息来验证个参数的含义。比如Image Name就是-n选项指定的内容,Load Address就是-a选项指定的内容,Entry Point就是-e选项指定的内容。
3.下载并执行uImage。
u-boot(armzone)=> tftp 30008000 uImage
TFTP from server 192.168.0.3; our IP address is 192.168.0.7
Filename 'uImage'.
Load address: 0x30008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
###################################################
done
Bytes transferred = 1588648 (183da8 hex)
u-boot(armzone)=> bootm
## Booting p_w_picpath at 30008000 ...
Image Name: linux-2.6.13
Created: 2008-12-20 11:42:38 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1588584 Bytes = 1.5 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
boot linux
Starting kernel ...
Uncompressing Linux......................................................................................................... done, booting the kernel.
=============================================================================
Usage: ./mkp_w_picpath -l p_w_picpath
-l ==> list p_w_picpath header information
./mkp_w_picpath -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] p_w_picpath
-A ==> set architecture to 'arch'
-O ==> set operating system to 'os'
-T ==> set p_w_picpath type to 'type'
-C ==> set compression type 'comp'
-a ==> set load address to 'addr' (hex)
-e ==> set entry point to 'ep' (hex)
-n ==> set p_w_picpath name to 'name'
-d ==> use p_w_picpath data from 'datafile'
-x ==> set XIP (execute in place)
参数说明:
alpha Alpha
arm A RM
x86 Intel x86
ia64 IA64
mips MIPS
mips64 MIPS 64 Bit
ppc PowerPC
s390 IBM S390
sh SuperH
sparc SPARC
sparc64 SPARC 64 Bit
m68k MC68000
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos
standalone、kernel、ramdisk、multi、firmware、script、filesystem
none 不压缩
gzip 用gzip的压缩方式
bzip2 用bzip2的压缩方式
一、在开始之前先说明一下bootm相关的东西。
3、
1)如果我们没用mkp_w_picpath对内核进行处理的话,那直接把内核下载到0x30008000再运行就行,内核会自解压运行(不过内核运行需要一个tag来传递参数,而这个tag建议是由bootloader提供的,在u-boot下默认是由bootm命令建立的)。
2)如果使用mkp_w_picpath生成内核镜像文件的话,会在内核的前头加上了64byte的信息,供建立tag之用。bootm命令会首先判断bootm xxxx 这个指定的地址xxxx是否与-a指定的加载地址相同。
(1)如果不同的话会从这个地址开始提取出这个64byte的头部,对其进行分析,然后把去掉头部的内核复制到-a指定的load地址中去运行之
(2)如果相同的话那就让其原封不同的放在那,但-e指定的入口地址会推后64byte,以跳过这64byte的头部。
二、好,接着介绍使用mkp_w_picpath生成镜像文件并下载运行的方法。
方法一、
1、首先,用u-boot/tools/mkp_w_picpath这个工具为你的内核加上u-boot引导所需要的文件头,具体做法如下:
[root@localhost tftpboot]#mkp_w_picpath -n 'linux- 2.6.14 ' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d zImage zImage.img
Image Name: linux-2.6.14
Created: Fri Jan 12 17:14:50 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1262504 Bytes = 1232.91 kB = 1.20 MB
Load Address: 0x30008000
Entry Point: 0x30008000
-A ==> set architecture to 'arch'
-O ==> set operating system to 'os'
-T ==> set p_w_picpath type to 'type'
-C ==> set compression type 'comp'
-a ==> set load address to 'addr' (hex)
-e ==> set entry point to 'ep' (hex)
-n ==> set p_w_picpath name to 'name'
-d ==> use p_w_picpath data from 'datafile'
-x ==> set XIP (execute in place)
U-Boot 1.1.3 (Jan 12 2007 - 16:16:36)
RAM Configuration:
Bank #0: 30000000 64 MB
Nor Flash: 512 kB
Nand Flash: 64 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
sbc2410=>tftp 0x31000000 zImage.img
TFTP from server 192.168.1.115; our IP address is 192.168.1.128
Filename 'zImage.img'.
Load address: 0x31000000
Loading: #################################################################
#################################################################
#################################################################
####################################################
done
Bytes transferred = 1263324 (1346dc hex)
3.运行
## Booting p_w_picpath at 31000000 ...
Image Name: linun- 2.6.14
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1263260 Bytes = 1.2 MB
Load Address: 30008000
Entry Point: 30008000
Verifying Checksum ... OK
OK
Machine: SMDK2410
Memory policy: ECC disabled, Data cache writeback
CPU S 3C 2410A (id 0x32410002)
S 3C 2410: core 202.800 MHz, memory 101.400 MHz, peripheral 50.700 MHz
S 3C 2410 Clocks, (c) 2004 Simtec Electronics
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
USB Control, (c) 2006 sbc2410
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
Built 1 zonelists
Kernel command line: console="ttySAC0" root="/dev/nfs" nfsroot="192".168.1.115:/frien"irq: clearing subpending status 00000002
PID hash table entries: 512 (order: 9, 8192 bytes)
timer tcon="00500000", tcnt a509, tcfg 00000200,00000000, usec 00001e 4c
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 64MB = 64MB total
Memory: 62208KB available (1924K code, 529K data, 108K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
softlockup thread 0 started up.
NET: Registered protocol family 16
S 3C 2410: Initialising architecture
SCSI subsystem initialized
usbcore: registered new driver usbfs
usbcore: registered new driver hub
S 3C 2410 DMA Driver, (c) 2003-2004 Simtec Electronics
DMA channel 0 at c4800000, irq 33
DMA channel 1 at c4800040, irq 34
DMA channel 2 at c4800080, irq 35
DMA channel 3 at c 48000c 0, irq 36
NetWinder Floating Point Emulator V0.97 (double precision)
devfs: 2004-01-31 Richard Gooch ( rgooch@atnf.csiro.au )
devfs: devfs_debug: 0x0
devfs: boot_options: 0x1
yaffs Oct 18 2006 12:39:51 Installing.
Console: switching to colour frame buffer device 30x40
fb0: s 3c 2410fb frame buffer device
fb1: Virtual frame buffer device, using 1024K of video memory
led driver initialized
s 3c 2410 buttons successfully loaded
s 3c 2410_serial0 at MMIO 0x50000000 (irq = 70) is a S 3C 2410
s 3c 2410_serial1 at MMIO 0x50004000 (irq = 73) is a S 3C 2410
s 3c 2410_serial2 at MMIO 0x50008000 (irq = 76) is a S 3C 2410
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
usbcore: registered new driver ub
Cirrus Logic CS 8900A driver for Linux (Modified for SMDK2410)
eth0: CS 8900A rev E at 0xe0000300 irq="53", no eeprom , addr: 08: 0:3E:26: 0A :5B
S 3C 24XX NAND Driver, (c) 2004 Simtec Electronics
s 3c 2410-nand: mapped registers at c4980000
s 3c 2410-nand: timing: Tacls 10ns, Twrph0 30ns, Twrph1 10ns
NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bi)Scanning device for bad blocks
Bad eraseblock 1884 at 0x01d70000
Creating 4 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x00000000-0x00020000 : "vivi"
0x00020000-0x00030000 : "param"
0x00030000-0x00200000 : "kernel"
0x00200000-0x04000000 : "root"
usbmon: debugfs is not available
s 3c 2410-ohci s 3c 2410-ohci: S 3C 24XX OHCI
s 3c 2410-ohci s 3c 2410-ohci: new USB bus registered, assigned bus number 1
s 3c 2410-ohci s 3c 2410-ohci: irq 42, io mem 0x49000000
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usbcore: registered new driver usbmouse
drivers/usb/input/usbmouse.c: v1.6:USB HID Boot Protocol mouse driver
mice: PS/2 mouse device common for all mice
s 3c 2410 TouchScreen successfully loaded
UDA1341 audio driver initialized
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 2, 16384 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
TCP bic registered
NET: Registered protocol family 1
IP-Config: Complete:
device=eth0, addr="192".168.1.128, mask="255".255.255.0, gw="192".168.1.1,
host="luofuchong", domain=, nis-domain=(none),
bootserver="192".168.1.1, rootserver="192".168.1.115, rootpath=
Looking up port of RPC 100003/2 on 192.168.1.115
Looking up port of RPC 100005/1 on 192.168.1.115
VFS: Mounted root (nfs filesystem).
Mounted devfs on /dev
Freeing init memory: 108K
init started: BusyBox v1.1.3 (2006.09.20-14:52+0000) multi-call binary
Starting pid 696, console /dev/tts/0: '/etc/init.d/rcS'
方法二、
1、首先,用u-boot/tools/mkp_w_picpath这个工具为你的内核加上u-boot引导所需要的文件头,具体做法如下:
[root@localhost tftpboot]#mkp_w_picpath -n 'linux- 2.6.14 ' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage zImage.img
Image Name: linux-2.6.14
Created: Fri Jan 12 17:14:50 2007
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1262504 Bytes = 1232.91 kB = 1.20 MB
Load Address: 0x30008000
Entry Point: 0x30008040
U-Boot 1.1.3 (Jan 12 2007 - 16:16:36)
RAM Configuration:
Bank #0: 30000000 64 MB
Nor Flash: 512 kB
Nand Flash: 64 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
sbc2410=>tftp 0x30008000 zImage.img
TFTP from server 192.168.1.115; our IP address is 192.168.1.128
Filename 'zImage.img'.
Load address: 0x30008000
Loading: #################################################################
#################################################################
#################################################################
####################################################
done
Bytes transferred = 1263324 (1346dc hex)
3.运行
## Booting p_w_picpath at 30008000 ...
Image Name: linux- 2.6.14
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1261056 Bytes = 1.2 MB
Load Address: 30008000
Entry Point: 30008040
Verifying Checksum ... OK
XIP Kernel Image ... OK
转载于:https://blog.51cto.com/7090376/1266248