335x裸机开发1

      <div class="Blog_con2">
        <div class="Blog_con3">
          <p>分类: <span>嵌入式</span></p>
                        <p>原文地址:<span><a href="/uid-30031530-id-5031392.html">AM335x 裸机开发笔记(1)——启动流程与启动卡分区</a></span> 作者:<span><a href="/uid/30031530.html">edaplayer</a></span></p>
                        <p></p>
        </div>
       <div class="Blog_wz1" style="word-wrap: break-word;">
                    根据芯片手册,AM335x上电后首先执行固化在芯片内部ROM中的代码,我们称之为BL0,BL0的功能很强大,能读取SD卡中第一个分区(必须是FAT格式)的MLO文件,复制到ram中运行,复制的起始地址为<span style="white-space:normal;">0x402F0400,所以编译MLO时,链接地址必须设置为<span style="white-space:normal;">0x402F0400</span></span>。一般的,MLO的作用是:禁用中断,关看门狗,设置栈,初始化时钟,初始化DDR3,初始化串口,复制u-boot.img到DDR3的<span style="white-space:normal;">0x80800000处运行。</span>MLO的最大体积可以达到109K,对于简单的裸机程序绰绰有余了。<br>

MLO其实是TI给u-boot的SPL起了个别名而已,我们称之为BL1,MLO其实是mkimage工具给u-boot-spl.bin添加了头信息后得到的(就行uImage和zImage的关系)。BL2自然就是U-boot.bin了,但是MLO不是直接加载U-boot.bin文件,而是加载u-boot.img文件,img文件其实是用mkimage工具给u-boot.bin添加头信息后得到的,mkimage可以通过编译u-boot得到,位于tools目录内,注意用较新版本的,2014或者2015的u-boot都可以。u-boot.img的头信息具体内容格式参见芯片手册。

mkimage制作MLO的命令是如下格式:
mkimage -T omapimage -a 0x402F0400 -d ‘u-boot-spl.bin’ MLO
我们可以制作成脚本:
#!/bin/bash
mkimage -T omapimage -a 0x402F0400 -d $1 MLO

保存为mkmlo,复制到 /usr/local/bin目录,就可以敲mkmlo xxxx命令将编译后的裸机程序生成MLO了。

同理,制作生成u-boot.img的脚本:
#!/bin/bash
mkimage  -A arm -T firmware -C none -O u-boot -a 0x80800000 -e 0  -d $1 u-boot.img
保存为mkbl2 ,复制到/usr/local/bin目录,就可以敲mkbl2 xxxx命令将编译后的裸机 程序生成 BL2了,BL2可以使用DDR3的全部空间,这样我们可以加载更大的裸机程序,跑ucos都没问题。

SD卡必须按特殊的方式进行分区,否则是BL0是无法识别并加载MLO的。 制作SD卡启动盘时,记得是255 heads(磁头数,也就是盘面数量),63 sector/track(每个磁道(柱面)所含扇区数)参数,把磁盘看做一个3D长方体,heads磁头就是高度(层数),sector/track就是宽度(一个磁道内的扇区数,磁道就是一圈),剩下的cyliner(柱面数)就是长度(多少圈),所以分区时,所以一般的,一个分区逻辑上的容量必定是柱面容量(255 * 63 * 512bystes )的整数倍,通常比物理容量大一点,因为SD卡毕竟不是磁盘结构,无法刚好与柱面容量对齐。
关于启动盘制作,百度文库有篇 EVB335X EMMC Linux烧录手册讲得很详细,推荐使用TI提供的create-sdcard.sh脚本文件(可以到我网盘下载)进行分区,自己手动分区比较麻烦。

总结一下,BL0(rom)-> MLO(SD卡或emmc、nand等) -> u-boot.img -> kernel
MLO、u-boot.img需要用mkimage添加头信息才能运行 ,kernel如果uImage格式也需要。

制作AM335x的SD启动卡可以利用脚本实现。
我们来看分区脚本的内容:

!/bin/sh

mk3PartSDCard.sh v0.3

Licensed under terms of GPLv2

DRIVE= 1ddif=/dev/zeroof= DRIVE bs=1024 count=1024
SIZE=fdisk -l $DRIVE | grep Disk | awk '{print $5}'
echo DISK SIZE - $SIZE bytes
CYLINDERS=echo $SIZE/255/63/512 | bc

sdfdisk device

sfdisk -D -H 255 -S 63 -C CYLINDERS DRIVE << EOF
,9,0x0C,*
10,115,,-
126,,,-
EOF
mkfs.vfat -F 32 -n “boot” DRIVE1umount {DRIVE}1
mkfs.ext3 -L “rootfs” DRIVE2umount {DRIVE}2
mkfs.ext3 -L “START_HERE” ${DRIVE}3


sfdisk输入格式如下:

start size id bootable c,h,s c,h,s


其中start size参数都是以柱面(cyliner)为单位的,id是分区类型,如0xc表示fat32,
bootable表示卷标,只对dos分区有意义。每行参数表示一个分区,MBR支持4个主分区。
如上面的脚本有3行参数,表示:
划分柱面0~8为分区1,fat32格式(0xC),
划分柱面10~125为分区2,
划分柱面126~为分区3。

工具下载地址:http://pan.baidu.com/s/1i3lERv3










            <!-- JiaThis Button END -->
          </div>
          阅读(1456) | 评论(0) | 转发(0) |
                        <div class="HT_line3"></div>
        </div>
        <div class="Blog_con3_3">
          <div><span id="digg_num">0</span><a href="javascript:void(0)" id="digg" bid="5707383" url="/blog/digg.html"></a></div>
          <p>上一篇:<a href="/uid-26968969-id-5707382.html">AM335x 裸机开发笔记(2)之LED</a></p>
          <p>下一篇:没有了</p>
        </div>
      </div>
      <div class="Blog_con3_4">
        <div class="Blog_tit2 Blog_tit6">相关热门文章</div>
                    <ul class="Blog_ul7">
                      <li><span class="Blog_span7"></span><a href="/uid-22670933-id-1771603.html" title="SHTML是什么_SSI有什么用" target="blank">SHTML是什么_SSI有什么用...</a></li>
                      <li><span class="Blog_span7"></span><a href="/uid-28458801-id-4072605.html" title="查看linux中某个端口(port)是否被占用(netstat,lsof)" target="blank">查看linux中某个端口(port)...</a></li>
                      <li><span class="Blog_span7"></span><a href="/uid-26694208-id-3184442.html" title="卡尔曼滤波的原理说明" target="blank">卡尔曼滤波的原理说明...</a></li>
                      <li><span class="Blog_span7"></span><a href="/uid-22002627-id-3455122.html" title="关于java中的“错误:找不到或无法加载主类”的解决办法" target="blank">关于java中的“错误:找不到或...</a></li>
                      <li><span class="Blog_span7"></span><a href="/uid-29091195-id-3974751.html" title="shell中字符串操作" target="blank">shell中字符串操作</a></li>
                    </ul>
        <ul class="Blog_ul7">
                    </ul>
        <div class="clear"></div>
      </div>
      <!--
      <div class="Blog_con3_4 Blog_con3_5">
        <div class="Blog_tit2 Blog_tit7">热门推荐</div>
        <ul>
                      <li><a href="" title="" target='blank' ></a></li>
                    </ul>
      </div>
      -->
    </div>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值