前面两个帖子的测试的时候程序都是直接跑在ram调试,当bbb掉电重启后是没有保存的,以下是开机从sd卡启动app的方法。
BeagleBone Black/AM335X启动流程在这之前当然得先了解下BBB的硬件启动流程:
1.RAM Code:是固化在
芯片中的一段代码,当芯片正常上电时,芯片会首先执行此段代码。
1.1 RAM Code startup:ROM Code首先会为自己的运行环境做一些基本的初始化,比如堆栈设置、关门狗设置、时钟设置。这里只是为ROM Code自身的运行创建最基本的运行环境。
1.2 RAM Code Boo
ting:然后根据SYSBOOT引脚信息创建启动列表,接着根据启动列表按顺序检测可用的启动设备,当检测到可启动设备的的话,就从相应设备运行。当列表检测完之后还没有找到可启动设备,就进入死循环,等待看门狗来复位系统。
2、BeagleBone Black 的
uBOOT 按键与启动列表:
由BeagleBone Black的硬件原理图知道uBOOT按键接在BOOTPIN{2}上,按下时为0;
当按下uBOOT时的启动 列表为{SPI0,MMC0,USB0,UART0};
当没有按下时的启动列表为{MMC1,MMC0,UART0,USB0}。
在BeagleBone Black上板载eMMC接在MMC1上,SD卡槽接在MMC0上,故默认情况下BeagleBone Black由板载eMMC启动,当在eMMC上没有找到可启动文件时(RAM Code在MMC下可是支持FAT文件系统的哦,该启动文件就是MLO)就会从接在MMC0上的SD卡启动,按下uBOOT时就不从eMMC启动了 。
MLO和ti.bin了解完硬件的启动流程,来了解下TI官方提供的软件启动流程方案。
想要从sd启动需要两个文件,bootload.bin和app.bin。但是编译生成的.bin文件并不能直接使用,需要ti_image工具进行转换。
有两个方法可以转换:
1、StarterWAM335Xare2.0.1toolsti_image工具,在win下使用命令tiimage.exe 0x402F0400 MMCSD boot.bin MLO ,tiimage.exe 0x80000000 NONE uartEcho.bin app;
使用对比工具发现bin个ti.bin的区别只是在ti.bin之前添加了8个字节,4个字节共32位为装载的地址,另4个字节应该是代表app的标志
2、编译器编译的时候之间转换:
选择工程,右键选择配置:选择Build,在右侧中选择steps选项;在post build的command下添加以下命令:
"${CCS_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat"
"${PROJECT_LOC}/${ConfigName}/${ProjName}.out"
"${PROJECT_LOC}/${ConfigName}/${ProjName}.bin"
"${CG_TOOL_ROOT}/bin/
ARMofd.exe"
"${CG_TOOL_ROOT}/bin/armhex.exe"
"${CCS_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe"
& "${PROJECT_LOC}/../tools/ti_image/tiimage.exe" "0x80000000" "NONE" "${PROJECT_LOC}/${ConfigName}/${ProjName}.bin" "${PROJECT_LOC}/${ConfigName}/${ProjName}_ti.bin"
这两种方法实质是一样的,都是需要利用ti官方的工具进行转换格式,第二种方式集成在编译器中会方便很多。
1.4.3 烧写启动
1、StarterWAM335Xare最新版2.0.1.1针对BBB仍需打补丁,在下载页面有pach包。
2、只要将app裸机程序和MLO文件通过AM335X_StarterWare2.0.0.7toolssd_format软件下载到sd卡,按住S2复位bbb即可,串口会有相应的信息打印。其实这个软件在2.0.1的版本就已经没有了,原理是只要将sd卡格式化为FAT32 复制uboot和bin文件下去即可,当然uboot和bin需要用ti_image转格式,并改名为MLO和app。
3、如果eemc里面的程序没没有了则可以不许按住S2自动从sd卡启动。我是将bbb连接电脑,然后启动的linux会将eemc当成一个磁盘在电脑上,把磁盘MLo删了或者格式化。
4、要按住S2重启,reset是不行的。
5、在我的电脑Win8系统是测试失败了,所以最后用了win7,建议是最好可以用官方的sd_format。
|