在嵌入式系统中,Linux内核和根文件系统一般都与bootloader一起烧写在flash芯片中,系统启动后,bootloader将Linux内核压缩到RAM中,并把压缩的根文件系统复制到RAM中,然后启动内核,由内核解压缩根文件系统,并调用文件系统中的应用程序和脚本文件启动系统。

在烧写Linux内核和根文件系统之前应该对它们进行适当处理,在它们的头部加入一些提供给bootloader的信息字符,以便bootloader能够辨认它们并获取它们的信息,从而正确地将它们解压缩、复制到RAM中的正确位置,并正确启动内核。这个为Linux内核和根文件系统添加头部的工作一般由编译bootloader时生成的一个小应用程序来完成,比如u-boot编译后会在其tools子目录下生成一个叫mkimage的应用程序,而cfe在编译后也会在其cfe/hosttools子目录下生成一个叫mkflashimage的应用程序,它们就是完成上述功能的工具程序,此处我们只介绍u-boot的mkimage。

mkimage命令格式如下:

# mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image

其中各字段含义如下:

    

    

-x

指定内核就在Flash中运行,即XIP(execute in place)

-T

指定输入文件的类型,如“kernel”、“filesystem”、“firmware”、“ramdisk”

-A

指定处理器体系架构

-O

指定操作系统类型名字,如“linux”、“vxworks”、“psos”等

-C

指定压缩模式,可能设置为“none”、“bzip2”、“gzip”

-a

指定程序被解压缩或复制到RAM中的地址

-e

指定程序(内核)的入口地址

-n

指定image文件的名字

-d

指定输入的程序文件,可是有多个文件,如内核或/和根文件系统二进制文件

image

输出文件名

mkimage命令举例如下:

#mkimage -n "My Kernel" -A arm -O linux -T kernel -C gzip –a 0x8000 –e 0x8000 -d kernel.gz kernel.img

以上命令将压缩了的内核二进制文件kernel.gz转换成u-boot能够辨认的二进制文件kernel.img,并指定kernel.img的名字为“My Kernel”,处理器体系架构为arm,操作系统类型为linux,程序类型为操作系统内核,程序由gzip压缩,程序的链接起始地址为0x8000,程序的入口地址为0x8000,注意这两个地址一定要是物理地址而不是对应的虚拟地址。

#mkimage -n "My Rootfs" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img

以上命令将压缩了的ramdisk根文件系统二进制文件ramdisk.gz转换成u-boot能够辨认的二进制文件ramdisk.img,并指定ramdisk.img的名字为“My Rootfs”,处理器体系架构为arm,操作系统类型为linux,程序类型为ramdisk,程序由gzip压缩,不需要指定ramdisk的链接起始地址和入口地址。

如果我们将kernel.img和ramdisk.img文件分别写到flash芯片的0xFF000000和0xFF200000位置,系统启动后进入u-boot命令行界面,执行以下u-boot命令:

# bootm 0xFF000000 0xFF200000

那么u-boot将把0xFF000000位置的Linux内核解压缩到RAM中的0x8000位置,再将0xFF200000位置的ramdisk文件系统映像文件刨掉u-boot头部后复制到RAM中的某个位置,然后跳转到内核的入口地址0x8000位置启动内核,同时把板子信息、ramdisk在RAM中的起始地址和结束地址、命令行字符串传给内核,这样Linux开始启动运行。

uboot小工具之mkimage相关推荐

  1. linux系统安装后需要的有效小工具(持续更新)

    目录 前言 1.更新apt-get列表 2.安装git工具 3.安装vim工具 4.安装u-boot-tool 5.安装tree 6.安装hexedit 7.安装apt-file 8.arm-linu ...

  2. 固件逆向中常用的小工具

    本文主要介绍 IoT 固件逆向中,常用的一些小工具,对于黑盒分析固件十分有用. 查找固件基地址:rbasefind 为原始固件增加ELF头或节表,方便IDA反编译:addelfinfo 还原标准库中的 ...

  3. 分享一个小工具:Excel表高速转换成JSON字符串

    在游戏项目中一般都须要由策划制作大量的游戏内容,当中非常大一部分是使用Excel表来制作的.于是程序就须要把Excel文件转换成程序方便读取的格式. 之前项目使用的Excel表导入工具都是通过Offi ...

  4. 代码整理工具_程序员软件:程序员有哪些常用又好用的编码小工具?

    最近,有很多朋友让我帮忙整理一下程序员有哪些常用又好用的编码小工具.今天,小编就整理一下哦,希望大家一起学习,一起进步! 1. Notepad++ Notepad++中文版是一款非常有特色的编辑器,是 ...

  5. python自动翻译小工具_Python实现翻译小工具

    一.背景 利用Requests模块获取有道词典web页面的post信息,BeautifulSoup来获取需要的内容,通过tkinter模块生成gui界面. 二.代码 git源码地址 Python实现翻 ...

  6. 实用c语言函数源码,C语言编写简单朗读小工具(有源码)

    原标题:C语言编写简单朗读小工具(有源码) 最近不少人在后台留言说学C都是面对枯燥的控制台程序,能不能体现一下C语言的实际用途,今天我们就理论结合实践一把:C语言结合VBS脚本编写一个简单的朗读小工具 ...

  7. 【青少年编程】黄羽恒:翻译小工具 -- 利用百度翻译

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...

  8. 【青少年编程】黄羽恒:翻译小工具 -- 利用有道翻译

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...

  9. 太强了,Python 开发桌面小工具,让代码替我们干重复的工作~

    作者 | Cherish 来源 | 杰哥的IT之旅 决定写这篇文章的初衷是来源于一位小伙伴的问题,关于"如何根据数据源用 Python 自动生成透视表",这个问题背后有个非常好的解 ...

最新文章

  1. 评分卡模型、WOE(Weight of Evidence)和IV(Information Value)
  2. SAP的成本中心与利润中心的关系
  3. C++调用Asprise OCR识别图片
  4. 数据结构与算法总结(完结)
  5. 房地产建筑行业HTML5模板
  6. Nginx基本数据结构之ngx_list_t
  7. 如何在苹果Mac上的分屏浏览视图中使用 App?
  8. 81岁自学编程,苹果最高龄iOS开发者:阻碍你实现梦想的,从来就不是年龄
  9. BGP华为、思科选路规则
  10. 谁在维护linux内核,故意向Linux内核中提及漏洞? Linux 内核维护者封杀明尼苏达大学...
  11. 微软bi报表服务器,什么是 Power BI 报表服务器?
  12. Spring boot集成Redis实现sessions共享时,sessions过期时间问题分析
  13. JS中几种绑定事件的方式
  14. 智能经济大局下,云智一体的“形胜”
  15. 从旧金山到瑞典的开发者的福利
  16. 获取bing壁纸php,php获取bing每日壁纸的示例
  17. java-构建乘积数组(剑指offter-数组-简单)
  18. Android 应用锁/程序锁(APPLock)的实现 http://shigongbo.blog.163.com/blog/static/976090201452572535715
  19. 图片合成视频 linux,ffmpeg安装在Linux下,并将图片合成视频
  20. 月入五万的码农,抢了文科生的饭碗

热门文章

  1. 深入了解 Java 之虚拟机内存
  2. 学习笔记——Java
  3. 【Spring】Bean的生命周期
  4. java设计模式2--抽象工厂模式(Abstract Factory)
  5. cout的输出格式初探2
  6. iptables的增删改查
  7. nagios监控mysql主从复制
  8. 空间谱专题03:时空特性与采样定理
  9. 阿里京东带头打劫,下一个被干掉的就是你
  10. java加载证书,访问12306的https链接