嵌入式开发软件环境:uboot、kernel、rootfs、data布局分析

uboot+linux的整体方案

开发板的datasheet中都有详细的地址空间的划分,其中比较重要的两块是:DDR地址空间和Flash地址空间。DDR空间是系统和应用的运行空间,一般由linux系统自身进行使用和管理;Flash空间是系统和应用载体的存放空间,一般需要在使用前进行划分,由应用开发者进行管理。

简单的示例和说明。

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

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

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

  • uboot:0x34000000~0x34080000, 512KB
  • kernel : 0x34080000~0x34180000, 1MB, 文件大小为952.8KB
  • rootfs : 0x34180000~0x34700000, 5.5MB, 文件大小为3.85MB
  • data : 0x34700000~0x34FFFFFF, 9MB, 文件大小为3.725MB

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

烧写镜像文件
如何将上述相应的镜像文件下载到或者烧写到开发板上,也涉及到大批量生成的烧录方式

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

项目中主要是:烧写器+tftp(uboot一般不修改)

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

- 下载文件:tftp <addr> <file>
- 上传文件:tftp <addr> <size> <file>
如果使用的是Nand Flash芯片,下载过程:

- 下载文件到内存地址
- erase Flash上对应的文件存放地址空间
- write 内存地址中的文件内容到Flash上对应的地址空间
如果使用的是Nor Flash芯片,下载过程:

- erase Flash上对应文件的存放地址空间
- 直接下载文件到Flash中对应文件的地址空间中:tftp 0x34180000 rootfs.jffs2
同样的现在也可以直接从Nor Flash中启动内核镜像,而不需要先将其加载到内存再启动:
setenv bootcmd "bootm 0x34080000"

批量生产的软件烧录

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

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

嵌入式开发软件环境:uboot、kernel、rootfs、data布局分析的相关文章

在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)

版本:v1.2   Crifan Li 摘要 本文主要介绍了如何在嵌入式Linux系统运行的时候,进行升级整个Linux系统,包括uboot,kernel和rootfs.以及简介Linux中的已有的通用的Nor Flash驱动m25p80,和简介mtd util以及相关工具mtdinfo,flash_erase,flash_eraseall,nanddump,nandwrite等的基本用法. 本文提供多种格式供: 在线阅读 HTML HTMLs PDF CHM TXT RTF WEBHELP 下

【详解】嵌入式开发中固件的烧录方式

版本:v1.2   Crifan Li 摘要 本文主要介绍了嵌入式开发过程中,将固件从PC端下载到开发板中的各种方式,主要包括NFS挂载,Nand Flash和Nor Flash,USB,RS232,网卡NIC等方式. 本文提供多种格式供: 在线阅读 HTML HTMLs PDF CHM TXT RTF WEBHELP 下载(7zip压缩包) HTML HTMLs PDF CHM TXT RTF WEBHELP HTML版本的在线地址为: http://www.crifan.com/files/

嵌入式开发修改u-boot与Linux调试串口总结

近期一个嵌入式开发项目,使用TI Cortex-A8的芯片AM3517作为主控开发.前期使用某公司的核心板搭建开发环境.在自己做底板布板的时候的时候涂个布线方便,改用UART1作为调试串口,而原来某公司给的开发包,已经TI的AM3517 PSP均以UART3作为调试串口.于是在底板焊接完成调试的时候就有了一天痛苦的经历. 嵌入式开发.jpg 在原版的PSP中, 一共有五处使用到UART3作为打印和调试串口: (1)Xloader的打印串口 (2)u-boot的打印串口 (3)内核解压时的信息打印

用vs2013+velt-0.1.4进行嵌入式开发 进行海思平台 UBOOT 开发

1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码.目前的版本是0.1.4,仅支持vs2013.此插件可以在CSDN下载频道下载(http://download.csdn.ne

嵌入式系统烧写uboot/bootloader/kernel的一般方法

嵌入式系统烧写uboot/bootloader/kernel的一般方法   本文介绍了在嵌入式系统中烧写uboot/bootloader/kernel 的一般方法,以及如果uboot或者内核出现错误,  www.2cto.com   引导失败等情况时如何重新烧写uboot/kernel.   烧写uboot/kernel的方式一般有两种,一种是在linux本身(shell中),直接将uboot/kernel的影像文件(二进制文件)使用操作烧写flash的命令烧写到flash特定分区上,   另一

使用eclipse搭建嵌入式开发环境

下载jdk http://download.oracle.com/otn-pub/java/jdk/7u4-b20/jdk-7u4-linux-i586.tar.gz     下载eclipse-cpp-ganymede-SR2-linux-gtk.tar.gz http://archive.eclipse.org/technology/epp/downloads/release/ganymede/SR2/eclipse-cpp-ganymede-SR2-linux-gtk.tar.gz   

c++ 开发环境-推荐一个适合刚学完c++,适于应用开发软件

问题描述 推荐一个适合刚学完c++,适于应用开发软件 最近刚把c++学习完,目前想自己编个游戏,推荐一个能将c++代码直接开发成应用的开发软件,我电脑是windows 7 64位电脑,配置还行. 解决方案 vs2010啊,学学QT,mfc啥的,就能写点东西出来了

SQL Server 2005 CE软件环境需求

由于SQL Server 2005 Compact Edition和SQL Server 2005是同时代的产品,所以它们之间的互操作和结合性较之以前的SQL Server版本要好,为此如果要考虑使用SQL Server 2005 Compact Edition中的合并复制和远程数据访问技术进行数据同步的话,最好是使用SQL Server 2005作为后端的数据库. 现在只要是能运行Visual Studio 2005的计算机都可以满足本专题具备的硬件要求(具体的软硬件要求大家可以查看SQL S

手把手教你安装深度学习软件环境(附代码)

为了进行强化学习研究,我最近购置了一台基于 Ubuntu 和英伟达 GPU 的深度学习机器.尽管目前在网络中能找到一些环境部署指南,但目前仍然没有全面的安装说明.另外,我也不得不阅读了很多文档来试图理解安装细节--其中的一些并不完整,甚至包含语法错误.因此,本文试图解决这个问题,提供一个详尽的软件环境安装指南. 本文将指导你安装 操作系统(Ubuntu) 4 种驱动和库(GPU 驱动.CUDA.cuDNN 和 pip) 5 种 Python 深度学习库(TensorFlow.Theano.CNT