码迷,mamicode.com
首页 > 其他好文 > 详细

mini2440 uboot烧写uImage

时间:2014-05-24 04:40:40      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   c   code   java   

mini2440下烧写u-boot后,就可以用u-boot烧写linux内核了。

 

安装mkimage工具:

bubuko.com,布布扣
apt-get install u-boot-tools
bubuko.com,布布扣

 

解压缩官方mini2440 linux包:

bubuko.com,布布扣
tar xf linux-2.6.32.2-mini2440-20130614.tar.gz 
bubuko.com,布布扣

然后进入文件夹,并进行编译(配置文件应该选择和自己的lcd对应的配置来进行拷贝,因为我的开发板没有屏幕,所以就随便选取了一个配置):

bubuko.com,布布扣
cd linux-2.6.32.2
cp config_mini2440_n35 .config
make zImage
bubuko.com,布布扣

注: 生成的zImage 大小在2266620左右。有一次我编译出的文件大小只有2077388,执行make distclean后重新编译后才ok。

 

然后制作uImage镜像:

bubuko.com,布布扣
mkimage -n mini2440 -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d  arch/arm/boot/zImage  uImage
bubuko.com,布布扣

mkimage的各个参数含义如下:

bubuko.com,布布扣
-n mini2440   指定镜像名称
-A arm          设置为arm架构
-O linux        设置操作系统为linux
-T kernel       设置镜像类型为kernel
-C none         设置压缩类型为none
-a 0x30008000   指定加载地址为0x30008000
-e 0x30008040   执行入口地址为0x30008040
-d arch/arm/boot/zImage 指定镜像数据文件路径
uImage                  最终生成的uImage文件名称
bubuko.com,布布扣


linux源码下也有可以直接生成uImage目标,生成的uImage文件可能无法启动,因为默认情况下直接生成的uImage中加载地址和入口地址是一模一样的。

但是因为我们在uImage前添加了0x40个字节的文件头,所以导致真正的入口地址为0x30008040,所以需要用上面的命令来生成uImage

 

将uImage 拷贝到debian上的tftp文件夹,并root权限重启tftp:

bubuko.com,布布扣
/etc/init.d/tftp-hpa restart
bubuko.com,布布扣

然后root权限执行minicom:

bubuko.com,布布扣
minicom
bubuko.com,布布扣

按下ctrl-A Z键,根据需要配置串口设备名称(我用的usb转ttl,所以为/dev/ttyUSB0,如果电脑上的串口连接,那么可能是/dev/ttyS0)

并将"Hardware flow control"和"Software flow control"都设置为No,波特率设置为115200

重启mini2440,按任意键进入u-boot.

使用tftp将uboot下载到sdram:

bubuko.com,布布扣
tftp 30008000 uImage
bubuko.com,布布扣

然后执行:

bubuko.com,布布扣
bootm 30008000
bubuko.com,布布扣

即可启动内核,然后可以看到linux内核成功引导。

 

重启mini2440,依次执行下列命令将内核镜像从0x30008000烧写到nand flash的0x60000开始0x500000大小的地方:

bubuko.com,布布扣
tftp 30008000 uImage
nand erase 60000 500000
nand write 0x30008000 60000 500000
boot
bubuko.com,布布扣

这样就成功烧写了内核镜像。

另外0x60000和0x500000这两个地址来源于arm/arm/mach-s3c2440/mach-mini2440.c中:

bubuko.com,布布扣
static struct mtd_partition friendly_arm_default_nand_part[] = {
    [0] = {
        .name    = "supervivi",
        .size    = 0x00040000,
        .offset    = 0,
    },
    [1] = {
        .name    = "param",
        .offset = 0x00040000,
        .size    = 0x00020000,
    },
    [2] = {
        .name    = "Kernel",
        .offset = 0x00060000,
        .size    = 0x00500000,
    },
    [3] = {
        .name    = "root",
        .offset = 0x00560000,
        .size    = 1024 * 1024 * 1024, //
    },
    [4] = {
        .name    = "nand",
        .offset = 0x00000000,
        .size    = 1024 * 1024 * 1024, //
    }
};
bubuko.com,布布扣

可以看到,代码中将nand flash分成了5个分区,其中关于内核的分区偏移地址和大小分别为0x60000和0x500000

 

另外,也可以用nfs来启动uImage.

将uImage文件复制到nfs对应文件夹下然后使用root权限重新启动nfs服务器

bubuko.com,布布扣
/etc/init.d/nfs-kernel-server  restart
bubuko.com,布布扣

重启mini2440, 按任意空格键进入uboot菜单,按‘q‘键进入uboot命令行。

可以查看到以前的bootcmd内容如下:

bubuko.com,布布扣
nand read.i 0x30008000 60000 500000;bootm
bubuko.com,布布扣

然后执行下面的命令编辑bootcmd(bootcmd是启动内核的参数):

bubuko.com,布布扣
edit bootcmd
bubuko.com,布布扣

然后输入下列内容(将nfs将文件从nfs服务器下载到本地0x30008000,然后从0x30008000启动内核):

bubuko.com,布布扣
nfs 30008000 192.168.211.2:/home/host/nfs/mini2440/uImage;bootm 30008000
bubuko.com,布布扣

然后执行saveenv保存该命令,重启mini2440即可看到成功启动linux内核。

 

 

mini2440 uboot烧写uImage,布布扣,bubuko.com

mini2440 uboot烧写uImage

标签:style   class   blog   c   code   java   

原文地址:http://www.cnblogs.com/qiaoqiao2003/p/3736531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!