blob简介
时间:2007-04-02 来源:sunqianpanda
1 Blob简介Blob是“Boot loader Object”的缩写,是一款嵌入式linux引导程序。最初是Jan-Derk Bakker和 ErikMouw针对LART目标板而设计的,同其他开源代码一样,很多人未blob的发展做出了自己的贡献。到现在为止,blob已经支持多种cpu, 包括sa1100,sa1110,pxa255,pxa270等,用户可以根据目标板的特性进行定制。 它能实现以下功能:
可见blob除了引导系统这个基本功能外,还具备BSP开发的功能,对于嵌入式开发前期,blob是一个非常有效的工具。 2 Blob的下载Blob的官方版本到2.0.5-pre2就不再更新了,而在sourceforge.net上却一直在不断更新。如果因某些原因无法链接以上地址,可以从下面地址下载:
3 Blob的编译对本节内容如果有疑问可以参考README。 3.1 编译环境在编译之前要确保主机系统和是否安装了需要的软件。
3.2 配置blob在配置前,首先要运行/tools/rebuild脚本两次,或者cvs的版本“make-fMakefile.cvs”,效果是一样的,可以生成 各个目录的makefile.in和根目录下的configure。为什么两次我没有仔细研究,反正README里强调了两次。如果在第二次以后 rebuild,似乎一次就可以。 配置的过程就是运行./configure脚本,后面加入若干参数。一个典型的配置是这样的: ./configure --with-board=pmpxa --host=i686 --enable-xmodem \
编译选项挺繁杂,想详细了解最好能看一下configure。 configure的结果可以生成makefile文件 3.3 编译blobmake 生成的blob是“src/blob/blob”,把这个二进制文件下载到目标板程序运行起始地址即可。 利用arm-linux-objdump工具可以对编译好的二进制文件进行反汇编。 arm-linux-objdump -D -S blob-elf32 > blob-elf32-dump 并把结果输出到blob-elf32-dump文件中,在一些调试的过程中也许用的到。 4 Blob的定制4.1 定制自己目标板的blob编译blob过程比较简单,但是一般不会这么巧有blob中包含的目标板能完全符合你的。所以需要定制目标板。 下面的部分参考doc/porting.txt另外加入一些我定制的经验。 定制目标板,首先要确定一些信息。目标板的.c和.h文件的名字,这里以LART目标板为例,我们要知道使用的是哪中cpu,flash用arm还是intel的,16位还是32位,还有就是带哪些外设。然后需要修改或添加以下文件:
lart)
#elif defined LART
完成这些工作后,重新rebuild,重新configure,这时可以添加“--with-board=lart”了。 4.2 让blob做更多事情开源代码软件的最大好处就是我们可以根据需要进行修改。虽然blob为我们提供了很多指令和设备驱动,但是在我们使用blob的时候总会觉得不够。我们要添加一些东西,但是如果要修改,我们最好是遵循blob的结构。 4.2.1 blob的结构blob提供了一个简单的目录结构,但是谈不上严谨,我们在这个结构里可以很方便的添加代码。看一下src目录下的结构, src/ blob/
4.2.2 添加一个命令行指令blob支持的命令行指令,可以在进入命令行模式后输入“help”查看。 blob支持下面这个宏: __commandlist(command_function,command_string,help) 关于这个宏的详情可参考doc/commandlist.txt。 通用的方法是这样:
blob还提供了一套格式化的添加指令方法。 注意src/commands目录,每一个.c文件就是一条指令。但是在这里添加指令,函数名,和帮助字符串的命名就都有专门的规定。 比如添加的指令是“download”,那么函数名必须是“download_cmd”,帮助必须是“download_help”,而且不必用“__commandlist”宏,编译的时候脚本“make_commands.sh”脚本会自动生成。 这种方法还需要在configure.in中添加这条指令到blob_commands中去。blob_commands是根据配置生成的指令列 表,比如如果“--with-command=all”,那么blob_commands=all_commands。所以你的指令可以根据需要放在适当 的列表中,如果是和某个模块相关,那么你可以参考“xdownload”是如何和“--enable-xmode”关联的。 4.2.3 添加一个设备驱动如果目标板带lcd,我希望在blob的启动过程中在LCD上显示一些logo,应该如果做呢?
|