文档章节

嵌入式软件环境构建:uboot、kernel、rootfs、app布局(转载)

woi66
 woi66
发布于 2014/02/10 09:20
字数 1184
阅读 116
收藏 2

嵌入式开发涉及硬件和软件两部分,个人目前主要是做嵌入式软件部分,使用uboot+linux的整体方案。这里所说的“嵌入式软件环境”,不是指宿主机上的嵌入式开发环境,而是指目标机中的运行软件环境,只是简要介绍一种布局及相应的实现步骤。

一、软件环境的布局

开发板的datasheet中都有详细的地址空间的划分,其中比较重要的两块是:DDR地址空间和Flash地址空间。DDR空间是系统和应用的运行空间,一般由linux系统自身进行使用和管理;Flash空间是系统和应用载体的存放空间,一般需要在使用前进行划分,由应用开发者进行管理。在这里以我现在正在做的项目进行简单的示例和说明。

其中,Flash的整体地址空间为:0x34000000~0x34FFFFFF,共16MB,使用的是Nor Flash芯片。布局需要做的工作是:

  1. 确定uboot二进制文件的大小,使用的地址范围
  2. 确定linux kernel镜像文件的大小,使用的地址范围
  3. 确定rootfs 根文件系统的镜像文件大小,使用的地址范围
  4. 估计整体应用方案所需的空间大小,选择可使用的地址范围

完成上述工作后,项目的布局如下:

  1. uboot:0x34000000~0x34080000, 512KB
  2. kernel : 0x34080000~0x34180000, 1MB, 文件大小为952.8KB
  3. rootfs : 0x34180000~0x34700000, 5.5MB, 文件大小为3.85MB
  4. app : 0x34700000~0x34FFFFFF, 9MB, 文件大小为3.725MB

到这一步已经完成了地址空间的逻辑布局,接下来就是存储空间的物理布局实现,就是对Flash进行分区,这里可以分成四个区,对应上述四块软件,也可以分成三个区:

1 mtdparts=phys_mapped_flash:0x180000(boot),0x580000(roofs70),0x900000(app)

二、布局的实现方式

这里主要是指如何将上述相应的镜像文件下载到或者烧写到开发板上,也涉及到大批量生成的烧录方式,我在第一个项目时就在这一块纠结过,现在算是后知后觉。
在开发过程中有很多的选择,主要的有:

  • JTAG,或者配套的烧写器,再加上配套的软件套件,如CCS,完成uboot的烧写
  • 专门的串口烧写工具,完成uboot的烧写
  • 在uboot环境下可以使用tftp工具,完成kernel镜像、rootfs文件、app文件的烧写

基本就是上面的一个过程,在我的第一个项目中,主要是使用:JTAG+CCS+tftp的方式,现在项目中则是:烧写器+tftp(uboot一般不修改)。

  1. uboot环境中tftp工具的使用

不同的uboot版本命令格式和提供的功能会有所差别,最好是使用前查阅帮助或者参考开发指导手册,主要的功能有从服务器下载文件和上传文件到服务器,常见的格式为:

1 - 下载文件:tftp <addr> <file>
2  - 上传文件:tftp <addr> <size> <file>

在我的第一个项目中,使用的是Nand Flash芯片,下载过程:

1 - 下载文件到内存地址
2  - erase Flash上对应的文件存放地址空间
3  - write 内存地址中的文件内容到Flash上对应的地址空间

当前项目中,使用的是Nor Flash芯片,下载过程:

 
1 - erase Flash上对应文件的存放地址空间
2  - 直接下载文件到Flash中对应文件的地址空间中:tftp 0x34180000 rootfs.jffs2

因为手上现在没有Nand Flash芯片的开发板,没法测试第二种方式是否可以使用Nand Flash环境。
同样的现在也可以直接从Nor Flash中启动内核镜像,而不需要先将其加载到内存再启动:

 
1 setenv bootcmd "bootm 0x34080000"
  1. 批量生产的软件烧录

进行设备的批量生产阶段,肯定不能按照开发阶段的过程来进行软件环境的烧录,对于大批量来说,这样做效率太低,而且容易出错。越简单、单一的操作效率越高,越不容易出错。最佳的方式是:一步解决。在此推荐的方式是:

  • 按照上面的内容和步骤完成整个软件环境的布局和构建
  • 用tftp工具将整个Flash中的内容全部打包上传到服务器,得到一个整体方案镜像
  • 使用烧片器烧写整体镜像完成批量原始设备的软件烧录构建

本文转载自:http://my.oschina.net/shelllife/blog/107371

共有 人打赏支持
woi66
粉丝 0
博文 2
码字总数 0
作品 0
西安
项目经理
私信 提问
嵌入式软件环境构建:uboot、kernel、rootfs、app布局

嵌入式开发涉及硬件和软件两部分,个人目前主要是做嵌入式软件部分,使用uboot+linux的整体方案。这里所说的“嵌入式软件环境”,不是指宿主机上的嵌入式开发环境,而是指目标机中的运行软件...

水海云
2013/02/01
0
2
嵌入式linux系统的开发——寄存器调试方法介绍

前言 Linux系统在上电或复位时通常从地址0x00000000处开始执行,在这个地址处首先执行的是系统的Boot Loader程序,这段程序会在正式调用操作系统内核前完成硬件初始化等必须的准备工作,最终...

元宵大师
2018/08/01
0
0
ERROR: vfat(boot.vfat): could not setup zImage

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WXXGoodJob/article/details/84170314 最近使用新版板的buildroot制作文件系统,出现 “ERROR: vfat(boot.vf...

WXXGoodJob
2018/11/17
0
0
从零开始构建嵌入式系统实践指南

近期花费了一段时间从零搭建一个嵌入式系统,从Uboot,Kernel,文件系统的编译到配置一步一步的实践,采坑到现在的顺理成章,经历了一个痛苦的过程,因此把搭建过程中的经验整理成了一篇详细...

程序手艺人
2018/08/29
0
0
为何要把文件夹形式的rootfs制作成单个rootfs镜像文件

假设目前我们已经有了rootfs,它是文件夹形式的,可以在pc 端浏览的rootfs。 但是,我们的目的是:把此rootfs,弄到嵌入式开发板上。 而嵌入式开发板上的rootfs所存放到的物理设备,往往都是...

guoyiyan1987
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
1
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
3
0
PHP 相关配置

1. php-fpm的pool 编辑php-fpm配置文件php-fpm.con vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容 include = etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vho......

Yue_Chen
昨天
2
0
EOS主网数据同步指南

本文介绍如何安装EOS节点软件并接入EOS主网,主要包括以下内容: 如何安装EOS节点软件 如何配置EOS节点软件接入主网 如何启动EOS节点软件与主网数据同步 如何检查主网数据同步进度 如何正确地...

汇智网教程
昨天
3
0
matlab-线性代数 齐次方程组 基础解系和通解

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   code clearclc% x1+2*......

志成就
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部