全部博文(8)
分类:
2011-09-29 14:24:53
原文地址:linux内核的加载地址和入口地址 作者:yuanfu
编译完内核之后,会产生zImage,而把它直接导入0x30008000,会出现 Bad Magic Number.
查明是需要将内核加一个0x40大小的头,由mkimage工具来添加.mkimage在编译u-boot时在u-boot-
mkimage 参数的意义如下:
-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'
-x == set XIP (execute in place)
首先可以把zImage 拷贝到 u-boot-
./mkimage -n 'linux-
输出信息如下:
Image Name: linux-
Created: Tue Jul 28 18:50:26 2009
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1655648 Bytes = 1616.84 kB = 1.58 MB
Load Address: 0x30007FC0
Entry Point: 0x30008000
可以看出加载地址是 0x30007fc0,而入口地址是 0x30008000.
GEC2410 # tftp 30008000 uImage
TFTP from server 192.168.0.50; our IP address is 192.168.0.100
Filename 'uImage'.
Load address: 0x30008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
################################################################
done
Bytes transferred = 1655712 (
GEC2410 # bootm 30008000
## Booting image at 30008000 ...
Image Name: linux-
Created: 2009-07-28 10:50:26 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1655648 Bytes = 1.6 MB
Load Address: 30007fc0
Entry Point: 30008000
Verifying Checksum ... OK
OK
Starting kernel ...(卡死在这儿了)
GEC2410 # tftp 30008000 uImage
TFTP from server 192.168.0.50; our IP address is 192.168.0.100
Filename 'uImage'.
Load address: 0x30008000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
################################################################
done
Bytes transferred = 1655712 (
GEC2410 # bootm 30007fc0
## Booting image at 30007fc0 ...
Bad Magic Number
GEC2410 # tftp 30007fc0 uImage
TFTP from server 192.168.0.50; our IP address is 192.168.0.100
Filename 'uImage'.
Load address: 0x30007fc0
Loading: #################################################################
#################################################################
#################################################################
#################################################################
################################################################
done
Bytes transferred = 1655712 (
GEC2410 # bootm 30008000
## Booting image at 30008000 ...
Bad Magic Number
GEC2410 #
GEC2410 # tftp 0x30007fc0 uImage
TFTP from server 192.168.0.50; our IP address is 192.168.0.100
Filename 'uImage'.
Load address: 0x30007fc0
Loading: #################################################################
#################################################################
#################################################################
#################################################################
################################################################
done
Bytes transferred = 1655712 (
GEC2410 # bootm 30007fc0
## Booting image at 30007fc0 ...
Image Name: linux-
Created: 2009-07-28 10:50:26 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1655648 Bytes = 1.6 MB
Load Address: 30007fc0
Entry Point: 30008000
Verifying Checksum ... OK
XIP Kernel Image ... OK
Starting kernel ...
Uncompressing Linux............................................................................................................ done, booting the kernel.
………………….
(一大堆信息)
从上面可以看出,tftp下载的地址和bootm引导的地址是同一个地址,且是mkimage的参数 -a 的地址,即加载地址,而不是入口地址。
./mkimage -n 'linux-
Created: Tue Jul 28 19:21:15 2009
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1655648 Bytes = 1616.84 kB = 1.58 MB
Load Address: 0x30008000
Entry Point: 0x30008000
入口地址和加载地址一样的时候,
我在做这个尝试的时候,导致开发板重启……。
现在能正确引导内核啦,但是GEC2410的网卡芯片是CS