Chinaunix首页 | 论坛 | 博客
  • 博客访问: 146751
  • 博文数量: 31
  • 博客积分: 1911
  • 博客等级: 上尉
  • 技术积分: 327
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-29 09:48
文章分类

全部博文(31)

文章存档

2011年(22)

2010年(9)

我的朋友

分类: LINUX

2010-11-29 10:06:26

        u—boot      内核写进nand flash

嵌入式学习入门 http://blog.chinaunix.net/u3/117680/showart.php?id=2300212  

 

 

首先 介绍如何将内核写进nand flash:

u-boot# nand erase 0x00030000 0x00100000

u-boot# tftp 0x31000000 zImage

u-boot# nand write 0x31000000 0x00030000 0x00100000

这里 我们有几种方法来实现自引导:

1.采用go的方法:

u-boot# tftp 0x31000000 zImage

u-boot# go 0x31000000

这是直接从内存引导的内核,我们可以将内核写进nand flash 让他自引导:

u-boot# nand erase 0x00030000 0x100000

u-boot# nand write 0x31000000 0x00030000 0x00100000

u-boot# setenv bootcmd nand read 0x30008000 0x00030000 0x00100000\;go 0x30008000

u-boot# saveenv

u-boot# boot

2.采用bootm的方法:

首先 我们需要用u-boot-1.2.0/tools/mkimage 工具来处理一下我们的内核文件zImage;

# mkimage -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 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)

接着 我们来通过u-boot来将内核zImage.img下载到内存中:

u-boot# tftp 0x31000000 zImage.img

u-boot# bootm 0x31000000

  Booting image 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  

Starting kernel ...

Uncompressing Linux.............................................................

下面是自引导的实现:

u-boot# nand erase 0x00030000 0x100000

u-boot# nand write 0x31000000 0x00030000 0x00100000

u-boot# setenv bootcmd nand read 0x31000000 0x30000 0x100000\;bootm 0x31000000

u-boot# saveenv

u-boot# boot

#################################################################

注意:

    这里的内核大小是小于1M,如果你的内核大于1M,可以更改size的大小

    将0x00100000改成比你的内核更大的值!

阅读(1410) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-30 11:06:10

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com