- 论坛徽章:
- 0
|
首先,用u-boot/tools/mkimage这个工具为你的内核加上u-boot引导所需要的文件头,具体做法如下:
[root@localhost tftpboot]#mkimage -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
修改uboot启动参数:
sbc2410=>setenv bootcmd nand read 0x30008000 0x30000 0x1d0000\;bootm 0x30008000
sbc2410=>saveenv
Saving Environment to NAND...
Erasing Nand...Writing to Nand... donesbc2410=>setenv bootcmd nand read 0x30008000 0x30000 0x1d0000\;bootm 0x30008000
sbc2410=>saveenv
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done
注:nand 操作命令--
写image文件:nand write 0x30008000 0x30000 0x1d0000
如果遇到问题:
现象:
2410 # go 30008000
## Starting application at 0x30008000 ...
Uncompressing Linux.............................................................
Error: unrecognized/unsupported machine ID (r1 = 0x31f07d30).
Available machine support:
ID (hex) NAME
000000c1 SMDK2410
Please check your kernel config and/or bootloader.
原因和解决办法:
产生的原因是go启动内核的话,u-boot不会传machiine ID给内核,因为go只是执行普通的应用程序,不考虑到传递参数给内核的问题,没有必要在乎它。如果只是想看看go能不能启动内核的话,修改方法有两个:
a、修改u-boot的common/cmd_boot.c的do_go()函数:
DECLARE_GLOBAL_DATA_PTR;
#if !defined(CONFIG_NIOS)
// add code
if(argc==2)
rc = ((ulong (*)(int, char *[]))addr) (0, gd->bd->bi_arch_number);
else
//end add code
rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
重新编译U-BOOT就可以用GO命令启动LINUX。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/58640/showart_1108468.html |
|