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

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

1、软件环境的布局

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

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

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

完成上述工做后,项目的布局以下:app

  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进行分区,这里能够分红四个区,对应上述四块软件,也能够分红三个区:工具

<!-- lang: shell -->
mtdparts=phys_mapped_flash:0x180000(boot),0x580000(roofs70),0x900000(app)

2、布局的实现方式

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

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

基本就是上面的一个过程,在个人第一个项目中,主要是使用:JTAG+CCS+tftp的方式,如今项目中则是:烧写器+tftp(uboot通常不修改)。测试

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

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

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

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

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

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

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

由于手上如今没有Nand Flash芯片的开发板,无法测试第二种方式是否可使用Nand Flash环境。 一样的如今也能够直接从Nor Flash中启动内核镜像,而不须要先将其加载到内存再启动:

<!-- lang: shell -->
setenv bootcmd "bootm 0x34080000"
  1. 批量生产的软件烧录 ============

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

  • 按照上面的内容和步骤完成整个软件环境的布局和构建
  • 用tftp工具将整个Flash中的内容所有打包上传到服务器,获得一个总体方案镜像
  • 使用烧片器烧写总体镜像完成批量原始设备的软件烧录构建
相关文章
相关标签/搜索