ih os linux 用法,使用U-boot直接加载zimage内核[转]

最近用三星的S3C6410,感觉他的u-boot可以直接加载zimage的功能很酷,于是稍微修改sep4020的u-boot代码,同样直接加载zimage!

以后再也不需要使用mkimage来制作uimage文件了。

先看看S3C6410是如何实现的:

1)首先在inlcude/configs/smdk6410.h中发现有如下定义

#define CONFIG_ZIMAGE_BOOT

2)在common/cmd_bootm.c文件的do_bootm函数中有如下内容“

#ifdef CONFIG_ZIMAGE_BOOT

#define LINUX_ZIMAGE_MAGIC 0x016f2818

if (*(ulong *)(addr + 9*4) == LINUX_ZIMAGE_MAGIC) {

printf("Boot with zImage\n");

addr = virt_to_phys(addr);

hdr->ih_os = IH_OS_LINUX;

hdr->ih_ep = ntohl(addr);

goto after_header_check;

}

#endif

goto after_header_check;就是跳转到

do_bootm_linux (cmdtp, flag, argc, argv,

addr, len_ptr, verify);

函数去。

3)分析下,如果定义这个宏,要想加载zimage,需要做哪些事情呢?

a 判断魔数(不要判断也行吧。。)

b 配置启动地址

c 配置os类型为linux

OK,了解三星是如何实现加载zimage的,看看我们的SEP4020 u-boot-1.3.3吧

1)首先在inlcude/configs/UB4020.h中添加宏定义

#define CONFIG_ZIMAGE_BOOT

同时修改30007fc0为30008000

#define CFG_LOAD_ADDR 0x30008000   /* default load address */

2)修改common/cmd_bootm.c文件

在do_bootm函数的开始就添加:

#ifdef CONFIG_ZIMAGE_BOOT

printf("Boot with zImage\n");

do_bootm_linux (cmdtp, flag, argc, argv, &images);

#endif

为什么不是配置os信息而是直接跳转呢?因为u-boot-1.3.3和三星的不太一样(感觉三星做了很多修改),各种信息都是通过image获得的,不如直接跳过这个函数,在do_bootm_linux函数中添加信息。

3)修改lib_arm/bootm.c文件的do_bootm_linux函数:

line79+++ images->legacy_hdr_valid = 1;

line82--- ep = image_get_ep (&images->legacy_hdr_os_copy);

line82+++ ep = CFG_LOAD_ADDR;

好了,我没有判断魔数,管他呢,现在可以直接加载zimage文件,忘掉30007fc这个地址吧!

SEP4020=>tftp 30008000 zimage26

TFTP from server 192.168.0.1; our IP address is 192.168.0.2

Filename 'zimage26'.

Load address: 0x30008000

Loading: #################################################################

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

########

done

Bytes transferred = 703520 (abc20 hex)

SEP4020=>bootm

Boot with zImage

Starting kernel ...

Uncompressing Linux............................................... done, booting the kernel.

Linux version 2.6.26 (root@kyon-desktop) (gcc version 3.4.1) #22 Tue Jun 23 13:37:20 CST 2009

CPU: ARM720T [41807202] revision 2 (ARMv4T), cr="0000217f"

Machine: 4020 board

Memory policy: ECC disabled, Data cache writeback

Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128

Kernel command line: root="/dev/nfs" rw nfsroot="192".168.0.3:/nfs ip="192".168.0.2:192.168.0.3:192.168.0.1:255.255.255.0:sep4020:eth0:off console="ttyS0",115200 mem="32mb"

SEP4020 U-boot-1.3.3 测试版V5

重要改进:

直接加载内核编译生成的zimage文件,不需要使用mkimage制作vmlinux.img文件

使用方法:

SEP4020=>tftp 30008000 zimage26

SEP4020=>bootm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值