原创 【博客大赛】U-Boot for AM335x (3) Basic step of Building U-Boot

2014-8-27 14:56 2433 21 22 分类: MCU/ 嵌入式 文集: U-Boot

U-Boot传承了开源软件的真谛,那就是“指导你,但是绝对不帮你做任何事情”,看着DENX上那长长的长长的Documents目录,俺心中的绝望无止境的蔓延,千万匹草泥马奔腾而过。这种痛并快乐着的赶脚,真是虐我千百变,待你如初恋啊。。。

现在我手上是一块Forlinx的开发板,光盘上有编译好的镜像文件,能够正常运行并且驱动所有的外设;已经在Fedora20下安装好了光盘提供的交叉编译器arm-arago-linux-gnueabi,并且下载与镜像文件同版本以及最新版本的Linux内核及U-Boot源代码。使用tar命令解压U-Boot源代码(这里使用的是最新版本u-boot-2014.04.tar.bz2,它才有将am335x收进了mainline),并进入它的source目录。

DENX Manual->4. System Setup
编译U-Boot时需要主机的串口和TFTP server,文档里不推荐使用minicom,而使用包含文件传输协议的kermit。
还要按照这里的提示,修改tftp-server的配置。
另外,貌似最好能够搭建DHCP server和NFS server,现在暂时跳过,等需要的时候再搭。

DENX Manual->5.3. Configuration
U-Boot默认支持很多开发板的config,见include/configs/,以TI的beagle开关板为例,编译U-Boot的时候:
make ARCH=arm CROSS_COMPILE=/opt/arm-arago-linux-gcc/bin/arm-arago-linux-gnueabi- O=../build omap3_beagle_config
make ARCH=arm CROSS_COMPILE=/opt/arm-arago-linux-gcc/bin/arm-arago-linux-gnueabi- O=../build all
这时候就会在上一级目录的build子目录下,生成一大堆文件了。

DENX Manual->5.4.2. Installation Using a BDM/JTAG Debugger
给完全空白的新存储器烧写数据,一般使用JTAG。这里推荐的JTAG是BDI2000/BDI3000,价格有点贵,所以暂时还是打算使用包含在SD卡里面的具备烧写功能的u-boot来烧写数据。单独更新MLO、u-boot.img、uImage、ubi.img的命令,是SD卡拔下来,上电从NandFlash运行之后,u-boot提供的。所以自己编译的u-boot必须也具备这些功能。调试阶段的u-boot会一直等待用户指令,而不是一溜烟的装载完内核镜像就告别自身使命了。总之,SD卡应该能搞定烧写阶段所有的事情。

DENX Manual->5.5. Tool Installation
u-boot启动时,要以特殊的image format调用其他images,所以mkimage这个工具要安装,从而将Linux内核的zImage变成uImage。Forlinx光盘里面包含有mkimage,也可以通过yum install uboot-tools来安装。

DENX Manual->5.9. U-Boot Command Line Interface
到了这里,就是介绍运行起来的u-boot各种命令了,包括存储管理、烧写、设置环境变量等等。在往下走之前,需要根据自己的硬件来添加相应文件和修改对应配置。

=====================================================================>>>
http://blackfin.uclinux.org/doku.php?id=bootloaders:u-boot:porting

    top-level Makefile and MAKEALL and MAINTAINERS
    board configuration file: include/configs/bf537-cow.h
    board directory: boards/bf537-cow/
要想使用自己的硬件来编译一个u-boot的话,基本上要修改的就是上面的东西了。

1.本来是要修改Makefile/MAKEALL/MAINTAINERS的内容,但是最新版本的U-Boot提供了一个board.cfg文件,只要在这个文件里面增加内容就行了,像下面这样:
Active arm armv7 am33xx ti maria_am335x maria_am335x maria_am335x:SERIRAL1,CONS_INDEX=1,EMMC_BOOT
意思是新增加了一个board,名字为maria_am335x。
(千万要注意拼写,我就是把第四个am33xx写成了am335x,编译的时候总是提示说找不到“asm/arch/omap.h”这个文件,造成这个的原因应该是am33xx与CPU的宏有关。)
第一个maria_am335x是指board下面的目录名;
第二个maria_am335x是指board对应的开发板名;
第三个maria_am335x是指提示option选项(?)。

2.board configuration file使用接近的替代。
(最新版的U-Boot提供了beagle和am335x_evm的支持,这两个我都使用默认的配置编译了一下,分别从SD卡启动之后发现,beagle的串口没有打印信息,而am335x_evm会输出一些。使用vim查看MLO文件,发现beagle的image header指示的是从0x40200800开始,而am335x_evm是从0x402f0400开始。0x40200800是AM37x的内部RAM起始地址,0x402f0400是AM335x的内部RAM起始地址,因此还是打算在am335x_evm的基础上修改。)
将include/configs/am335x_evm.h复制为include/configs/maria_am335x.h,记得修改它的预编译宏定义。
修改include/configs/maria_am335x.h的CONFIG_SYS_LDSCRIPT定义,改过来相应的目录名。

3.board directory使用接近的替代。
将board/ti/am335x/复制为board/ti/maria_am335x/,除此之外,还要将其中u-boot.lds的一条包含路径的代码,相应的修改过来。

<<<=================================================================
完成之后,按照前面提到的步骤make,build目录下就会生成需要的MLO和u-boot.img了,将这两个文件复制到已经正确格式化的SD卡中,插入开发板上电,就会发现串口的打印信息了。但是,这离完整的驱动核心板还有很长的距离。
 

文章评论1条评论)

登录后参与讨论

用户377235 2014-6-19 07:28

頂上一下 継続。
相关推荐阅读
DiracFatCat 2018-09-05 12:14
【博客大赛】卡尔曼滤波学习笔记(11)从位置估计速度
卡尔曼滤波器,不仅仅是一个低通滤波器,否则也不会持续发展50年。 示例:桑先生需要测试高速列车的性能。测试的目的是判断列车在直线上能否保持80m/s的速度。速度和位置每0.1秒测量一次,但是由于...
DiracFatCat 2018-08-31 19:32
【博客大赛】卡尔曼滤波学习笔记(10)一个简单的示例
《Kalman Filtering: Theory and Practice Using MATLAB》第三章,看不懂,暂时略过。《Kalman Filtering: Theory and Pract...
DiracFatCat 2018-07-19 15:09
对sed命令的练习
sed是流编辑器。它每次处理一个输入,因此很有效率。官方手册:https://www.gnu.org/software/sed/manual/sed.html学习Linux命令,当然要阅读官方手册,所...
DiracFatCat 2018-06-19 15:10
【博客大赛】卡尔曼滤波学习笔记(八)可观测性和可控制性 ...
可观测性是指,在给定模型的情况下,动力学系统的状态是否由它的输入输出唯一确定。可观测性是系统模型的特征。如果传感器矩阵H是可逆的,则本系统可观测,因为有:如果传感器矩阵H某些时候是不可逆的,则本系统仍...
DiracFatCat 2018-06-19 10:56
【博客大赛】卡尔曼滤波学习笔记(七)Z变换
如果我们仅仅对离散线性系统感兴趣,那么就使用下面这个表达式:如果u是常量,那么可以写成:为了简化表达式,我们可以将上面写成:离散线性时不变系统的Φ求解,可以使用Z变换。(* 由于本人已经忘记了Z变换的...
DiracFatCat 2018-06-19 10:54
【博客大赛】卡尔曼滤波学习笔记(六)拉普拉斯变换
对于线性时变/时不变系统,求解Φ(t)有多种方式,拉普拉斯变换是其中一种。(* 由于本人已经忘记了拉普拉斯变换的内容,因此本节待续。)...
我要评论
1
21
关闭 站长推荐上一条 /2 下一条