在上一篇博文中,讲述了如何通过编译好的toolchain编译rtems源码,接下来讲讲如何讲编译好的源码制作成image镜像文件,然后烧写到sd卡中。

编译好的源码是放在/image文件夹下,制作image文件在这里用到的是之前git到的rtems源码中的脚本工具sdcard.sh。是国外某个大神的杰作,文件放在

rtems-src/c/src/lib/libbsp/arm/beagle/simscripts

路径下

sdcard.sh脚本文件内容如下:

# we store all generated files here.
TMPDIR=tmp_sdcard_dir.$$FATIMG=$TMPDIR/bbxm_boot_fat.img
SIZE=65536
OFFSET=2048
FATSIZE=`expr $SIZE - $OFFSET`
UENV=uEnv.txtrm -rf $TMPDIR
mkdir -p $TMPDIRif [ $# -ne 2 ]
then    echo "Usage: $0 <RTEMS prefix> <RTEMS executable>"exit 1
fiPREFIX=$1if [ ! -d "$PREFIX" ]
then    echo "This script needs the RTEMS tools bindir as the first argument."exit 1
fiexecutable=$2case "$2" in*beagleboard*)ubootcfg=omap3_beagleimgtype=bb;;*beaglebone*)ubootcfg=am335x_evmimgtype=bone;;*)echo "Can't guess which uboot to use - please specify full path to executable."exit 1;;
esacapp=rtems-app.imgif [ ! -f "$executable" ]
then    echo "Expecting RTEMS executable as arg; $executable not found."exit 1
fiset -eIMG=${imgtype}_`basename $2`-sdcard.img# Make an empty image
dd if=/dev/zero of=$IMG bs=512 seek=`expr $SIZE - 1` count=1
dd if=/dev/zero of=$FATIMG bs=512 seek=`expr $FATSIZE - 1` count=1# Make an ms-dos FS on it
$PREFIX/bin/newfs_msdos -r 1 -m 0xf8 -c 4 -F16  -h 64 -u 32 -S 512 -s $FATSIZE -o 0 ./$FATIMG# Prepare the executable.
base=`basename $executable`
$PREFIX/bin/arm-rtems4.12-objcopy $executable -O binary $TMPDIR/$base.bin
gzip -9 $TMPDIR/$base.bin
$PREFIX/bin/mkimage -A arm -O rtems -T kernel -a 0x80000000 -e 0x80000000 -n RTEMS -d $TMPDIR/$base.bin.gz $TMPDIR/$app
echo "setenv bootdelay 5
uenvcmd=run boot
boot=fatload mmc 0 0x80800000 $app ; bootm 0x80800000" >$TMPDIR/$UENV# Copy the uboot and app image onto the FAT image
$PREFIX/bin/mcopy -bsp -i $FATIMG $PREFIX/uboot/$ubootcfg/MLO ::MLO
$PREFIX/bin/mcopy -bsp -i $FATIMG $PREFIX/uboot/$ubootcfg/u-boot.img ::u-boot.img
$PREFIX/bin/mcopy -bsp -i $FATIMG $TMPDIR/$app ::$app
$PREFIX/bin/mcopy -bsp -i $FATIMG $TMPDIR/$UENV ::$UENV# Just a single FAT partition (type C) that uses all of the image
$PREFIX/bin/partition -m $IMG $OFFSET c:${FATSIZE}\*# Put the FAT image into the SD image
dd if=$FATIMG of=$IMG seek=$OFFSET# cleanup
rm -rf $TMPDIRecho "Result is in $IMG."

接下来就开始制作镜像,首先制作一个hello world例子镜像。

 cd $HOME/development/rtems/rtems-src/c/src/lib/libbsp/arm/beagle/simscripts

进入脚本所在的目录

键入如下命令

sh sdcard.sh $HOME/development/rtems/4.12 $HOME/development/rtems/b-beagle/arm-rtems4.12/c/beagleboneblack/testsuites/samples/hello/hello.exe

第一个路径是uboot等一些文件的存放处,第二个路径是hello.exe例子程序所在。

回车后会提示:

 Result is in bone_hello.exe-sdcard.img.

表示镜像文件已经生成,这样生成的image文件就存放在当前目录下,也就是脚本所在的目录。

接下来就是将镜像文件写入sd卡中,在这里本人准备的是一张8G的sd卡。

利用读卡器插上电脑后,查看sd卡的设备号,一般是/dev/sdb

然后利用linux自带的烧写命令:

dd if=bone_hello.exe-sdcard.img of=/dev/sdb bs=4096

if=×.img 表示input file,是要烧入的文件,of表示output file 是写入的文件,bs=4096 表示烧写的速度

执行该命令后提示:

表示写入完成,然后bbb板通过sd卡启动,可发现板上的4个led有规律的闪烁。通过minicom监控串口信息:

   # picocom -b 115200 /dev/ttyUSB0U-Boot SPL 2014.04-00015-gb4422bd (Apr 22 2014 - 13:24:29)reading argsspl_load_image_fat_os: error reading image args, err - -1reading u-boot.imgreading u-boot.imgU-Boot 2014.04-00015-gb4422bd (Apr 22 2014 - 13:24:29)I2C:   readyDRAM:  512 MiBNAND:  0 MiBMMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1*** Warning - readenv() failed, using default environmentNet:   <ethaddr> not set. Validating first E-fuse MACcpsw, usb_etherHit any key to stop autoboot:  0 gpio: pin 53 (gpio 53) value is 1mmc0 is current devicegpio: pin 54 (gpio 54) value is 1SD/MMC found on device 0reading uEnv.txt99 bytes read in 5 ms (18.6 KiB/s)gpio: pin 55 (gpio 55) value is 1Loaded environment from uEnv.txtImporting environment from mmc ...Checking if uenvcmd is set ...gpio: pin 56 (gpio 56) value is 1Running uenvcmd ...reading rtems-app.img58629 bytes read in 11 ms (5.1 MiB/s)## Booting kernel from Legacy Image at 80800000 ...Image Name:   RTEMSImage Type:   ARM RTEMS Kernel Image (gzip compressed)Data Size:    58565 Bytes = 57.2 KiBLoad Address: 80000000Entry Point:  80000000Verifying Checksum ... OKUncompressing Kernel Image ... OK## Transferring control to RTEMS (at address 80000000) ...RTEMS Beagleboard: am335x-based*** BEGIN OF TEST HELLO WORLD ***Hello World*** END OF TEST HELLO WORLD ***

表明启动成功。

查看sd卡中的文件,有以下四个文件:

其中MLO,uboot,uenv文件是必须的,rtems-app就是hello.exe生成的镜像。

接下来将编译好的rtems文件系统制作成img镜像:

在这里要用到一个软件:rki(rtems kernel image)可以将rtems制作成.elf文件

在github上git到,https://github.com/alanc98/rki

阅读其readme文件:

You can find the Waf project here:
 
http://code.google.com/p/waf/
 
Simple instructions on How to set up Waf is here:
 
http://www.rtems.org/ftp/pub/rtems/people/chrisj/rtl/rtems-linker/waf.html
 
Steps
-----
 
1. Build or install the tools. In this example the path is
$HOME/Development/rtems/4.12.
 
2. Build and install the RTEMS Board Support Packages you want to use. In this
example the path is $HOME/Development/rtems/build/4.12.
 
3. Unpack this package somewhere, anywhere on your disk and change into the top
level directory.
 
4. Populate the git submodule:
 
$ git submodule init
$ git submodule update
 
5. Configure with your specific settings. In this case the path to the tools
and RTEMS and provided on the command line and so do not need to be in your
path or environment [1] and we limit the build to 'sparc/sis' BSP:
 
$ waf configure --rtems=$HOME/Development/rtems/build/4.12 \
--rtems-tools=$HOME/Development/rtems/4.12 \
--rtems-version=4.12 \
--rtems-bsps=sparc/sis
 
You can use '--rtems-archs=sparc,sis' or
'--rtems-bsps=sparc/sis,arm/raspberrypi' to build for more than BSP at a time.
 
6. Build:
 
$ waf
 
7. Run the executable using the simulator:
 
$ $HOME/Development/rtems/4.12/bin/sparc-rtems4.12-run \

./build/sparc-rtems4.12-sis/rki.elf

根据上述,打开makefile文件,找到以下几行:

RTEMS_TOOL_BASE ?= /home/c/development/rtems/4.12/bin/
RTEMS_BSP_BASE ?= /home/c/development/rtems/image

BSP            ?= beagleboneblack

ARCH           ?= arm-rtems4.12

将路径改成自己的。

然后echo $PATH确认export后,make报错
/home/lenovo/development/rtems/4.11/lib/gcc/arm-rtems4.11/4.9.2/../../../../arm-rtems4.11/bin/ld: error: legacy-build/arm-rtems4.11-beagleboneblack/rki.elf uses VFP register arguments, /home/lenovo/development/rtems/image/arm-rtems4.11/beagleboneblack/lib/librtemscpu.a(libposix_a-pthreadself.o) does not
/home/lenovo/development/rtems/4.11/lib/gcc/arm-rtems4.11/4.9.2/../../../../arm-rtems4.11/bin/ld: failed to merge target specific data of file /home/lenovo/development/rtems/image/arm-rtems4.11/beagleboneblack/lib/librtemscpu.a(libposix_a-pthreadself.o)
collect2: error: ld returned 1 exit status
make: *** [rki.elf] 错误 1

rki编译的错误提示是这样:
rki.elf uses VFP register arguments,  BUT librtemscpu.a(libposix_a-pthreadself.o) does not (use VFP)
修改的方法之一是把 rki 目录下面的 Makefile 里 LDFLAGS(可能还包括 ARCH_OPTS)选项中  -mfloat-abi=hard 去掉
然后生成rki.elf和rki.bin

然后通过sdcard脚本将rki.elf文件制成img文件:

cd $HOME/development/rtems/rtems-src/c/src/lib/libbsp/arm/beagle/simscripts
sh sdcard.sh $HOME/development/rtems/4.12 $HOME/rki/legacy-build/arm-rtems4.12-beagleboneblack/rki.elf

制成后img如下:

然后通过dd命令将该img烧写进sd卡中:

dd if=bone_rki.elf-sdcard.img of=/dev/sdb bs=4096

烧写完成即可启动bbb板,串口信息如下:

表示系统移植成功。

基于beaglebone的rtems4.12源码编译生成image镜像并烧入sd卡相关推荐

  1. 基于Java毕业设计房屋租赁平台源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计房屋租赁平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计房屋租赁平台源码+系统+mysql+lw文档+部署软件 项目架构:B/S架构 开发语言:Java语言 开 ...

  2. 基于Java毕业设计房屋租赁系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计房屋租赁系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计房屋租赁系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  3. 计算机毕业设计Java基于的药品销售系统(源码+系统+mysql数据库+lW文档)

    计算机毕业设计Java基于的药品销售系统(源码+系统+mysql数据库+lW文档) 计算机毕业设计Java基于的药品销售系统(源码+系统+mysql数据库+lW文档) 本源码技术栈: 项目架构:B/S ...

  4. 基于Java毕业设计服务管理系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计服务管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计服务管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  5. 基于Java毕业设计养老院信息管理源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计养老院信息管理源码+系统+mysql+lw文档+部署软件 基于Java毕业设计养老院信息管理源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语 ...

  6. 基于Java毕业设计在线答题系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计在线答题系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计在线答题系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  7. 基于Java毕业设计车辆调度管理系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计车辆调度管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计车辆调度管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开 ...

  8. 基于Java毕业设计在线交易系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计在线交易系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计在线交易系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  9. 基于Java毕业设计宠物店管理系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计宠物店管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计宠物店管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语 ...

最新文章

  1. springmvc国际化 基于浏览器语言的国际化配置
  2. Git笔记(三)——[cherry-pick, merge, rebase]
  3. 使用Grunt构建任务管理脚本(转)
  4. BZOJ 2822: [AHOI2012]树屋阶梯 [Catalan数 高精度]
  5. 【推广】实用命令——tldr
  6. c语言ole错误,错误 '8002801c' 访问 OLE 注册表的错误
  7. php阴影效果,css阴影效果:css边框阴影如何设置?
  8. 服务器硬盘和台式机有什么区别,服务器和电脑主机有什么区别?
  9. AVOD-理解系列(一)
  10. 程序员交接文档格式(自己整理,仅供参考,付md文档)
  11. 各代iphone尺寸_iphone 各型号设备的屏幕尺寸
  12. 在我的订单中,点击去付款查看每个订单详情
  13. Dennis Gabor与全息摄影
  14. python opencv 图片缺陷检测!
  15. 【无标题】惠普ZHAN 66 PRO 14 G3 NOTEBOOK PC笔记本电脑装好系统没有触摸板驱动
  16. 计算机网络专业学校实践经验,学校实习计算机网络心得体会3篇
  17. cesium入坑 -- 各种API调用与API本身使用的坑
  18. 未来计算机专业会被淘汰吗,李开复:未来50%的职业将被淘汰,女儿的一个问题让我深思...
  19. Eclipse导入epf文件
  20. 苹果笔记本没有计算机管理员,苹果电脑忘记管理员密码怎么办_mac电脑忘记管理员密码的处理办法...

热门文章

  1. 一个小白轻松月入上万块的线上冷门项目
  2. 实用网站/好网站/冷门网站
  3. 职工管理系统--基于C++多态
  4. 微信下载手机版下载方式详解
  5. 新手小白都看得懂得光通信知识
  6. 《乔布斯传》英文原著重点词汇笔记(六)【 chapter four 】
  7. SideBar 可动态设置数据
  8. MySQL双机热备份实施方案
  9. 1068 万绿丛中一点红 (20分)
  10. matlab导出图片为pdf时警告图窗太大解决方法