码迷,mamicode.com
首页 > 其他好文 > 详细

u-boot README

时间:2016-01-18 20:36:18      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:

ReadMe文件分析

 

1. 目录架构

- board  板子独立的文件

- common  与硬件架构无关的通用功能

- cpu  cpu相关文件

- disk   磁盘分区驱动相关

- doc  文档

- drivers  通用的设备驱动

- examples  例程

- fs   filesystem 相关代码

- include   头文件

- lib_xx  与具体的硬件架构相关的库文件

- net   网络部分的代码

- post  上电自检

- rtc  实时时钟驱动

- tools  生成 s-record 和 image的工具

 

2. 配置方法

与板子相关的配置选项都在 "include/configs/<board_name>.h" 中。使用 "make <board_name>_config" 来进行配置。

具体的配置选项以后再细看。

 

3. 如何编译 u-boot

1) 交叉编译,如果你配置的arm相关的板子,那么编译的时候会自动使用PATH下的arm-linux- 编译器。当然你也可以在顶层 Makefile 中通过 CROSS_COMPILE 来指定交叉编译器,如 CROSS_COMPILE = arm-linux-

 

2) 配置,如上所述,make name_config

 

3) 编译, make all

 

最终会生成三个文件

u-boot.bin   纯二进制文件

u-boot  ELF格式的二进制文件

u-boot.srec  Motorola S-Record 格式

 

默认编译是在当前目录下,可以通过下面的两个方法来指定 build dir

make O=/tmp/builddir/ distclean

make O=/tmp/build/       NAME_config

make O=/tmp/build/        all

 

或者,直接指定BUILD_DIR变量

export BUILD_DIR=/tmp/build

make distclean

make NAME_config

make all

 

4. 如果u-boot不支持你的板子,那么你需要把它添加到u-boot中再进行编译。步骤如下:

1). 在 top Makefile 和 MAKEALL 脚本中添加新的配置选项,

 

2). 在board目录下,创建自己的板子的目录,其中至少包含 Makefile board.c flash.c u-boot.lds文件

 

3). 创建新的 include/configs/<boardname>.h 用来进行配置

 

4). 如果你的板子的cpu不被u-boot所支持,那么你也要在cpu目录下创建新的

 

5). 正常的编译过程

 

 

5. 常用的u-boot命令

这部分我打算等我移植了自己一版u-boot之后,再来细看u-boot的一些常用命令还有环境参数等等。这边略过。

 

6. 关于u-boot格式问题。

上面编译u-boot的时候生成了三个 u-boot的image文件。

u-boot  ELF格式的二进制文件

u-boot.bin  纯二进制文件

u-boot.srec  Motorola S-Record 格式

 

前面两者很好理解。u-boot.srec是Standalone Programs: 即可以在u-boot环境下运行的可执行程序。当程序执行完成之后,仍返回u-boot。u-boot支持动态的加载和运行 “standalone” 程序。这些程序可以使用u-boot提供的I/O操作,或者中断服务等。源代码的examples/hello_world.c下在编译 u-boot的时候会自动被编译成hello_world.srec这种 standalone 程序。

 

 

7. 生成linux image

 

u-boot 不支持传统的 linux内核格式,比如zImage, bzImage。而使用 uImage 这种格式。生成方法如下:

 

1)       生成标准的 ELF 格式的linux内核,vmlinux

2)       将vmlinux转成纯粹的二进制格式 linux.bin

3)       压缩二进制文件 gzip -9 linux.bin

4)       使用 mkimage 将linux.bin.gz 打包成 uImage

Mkimage –A ppc –O linux –T   kernel –C gzip –a 0 –e 0 –n “Linux kernel image” –d linux.bin.gz uImage

 

8. 学习过程

这段来自README文件的代码阐述了使用u-boot的过程,还是挺有意思的。

int main(int argc, char *argv[])
{
    sighandler_t no_more_time;

    signal(SIGALRM, no_more_time);
        alarm(PROJECT_DEADLINE - toSec (3 * WEEK));

        if (available_money > available_manpower) {
            Pay consultant to port U-Boot;
            return 0;
        }

        Download latest U-Boot source;

        Subscribe to u-boot mailing list;

        if (clueless)
            email("Hi, I am new to U-Boot, how do I get started?");

        while (learning) {
            Read the README file in the top level directory;
            Read http://www.denx.de/twiki/bin/view/DULG/Manual;
            Read applicable doc/*.README;
            Read the source, Luke;
            /* find . -name "*.[chS]" | xargs grep -i <keyword> */
        }

        if (available_money > toLocalCurrency ($2500))
            Buy a BDI3000;
        else
            Add a lot of aggravation and time;

        if (a similar board exists) {   /* hopefully... */
            cp -a board/<similar> board/<myboard>
            cp include/configs/<similar>.h include/configs/<myboard>.h
        } else {
            Create your own board support subdirectory;
            Create your own board include/configs/<myboard>.h file;
        }
        Edit new board/<myboard> files
        Edit new include/configs/<myboard>.h

        while (!accepted) {
            while (!running) {
                do {
                    Add / modify source code;
                } until (compiles);
                Debug;
                if (clueless)
                    email("Hi, I am having problems...");
            }
            Send patch file to the U-Boot email list;
            if (reasonable critiques)
                Incorporate improvements from email list code review;
            else
                Defend code as written;
    }
    return 0;
}

void no_more_time (int sig)
{
      hire_a_guru();
}

 

u-boot README

标签:

原文地址:http://www.cnblogs.com/Gru--/p/5140343.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!