RTEMS-BBB(四):rki镜像
2015-08-05 15:15
225 查看
下边就需要用到一个rki(Rtems Kernel Image)
在github上git到
阅读README和Makefile
在RKI的Makefile中更改
RTEMS_TOOL_BASE = /home/lenovo/development/rtems/4.11/bin/
RTEMS_BSP_BASE = /home/lenovo/development/rtems/image
BSP = beagleboneblack
ARCH = arm-rtems4.11
然后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
在github上git到
阅读README和Makefile
在RKI的Makefile中更改
RTEMS_TOOL_BASE = /home/lenovo/development/rtems/4.11/bin/
RTEMS_BSP_BASE = /home/lenovo/development/rtems/image
BSP = beagleboneblack
ARCH = arm-rtems4.11
然后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 其实这是一个RTEMS的shell应用 ## ## Objects to build ## OBJS = init.o rtems_net.o rtems_net_svc.o local_shell_cmds.o filesys.o ## ## Optional objects in src directory ## OBJS += ramdisk.o OBJS += nvramdisk.o ## ## RTEMS examples / demos ## OBJS += task_cmd.o OBJS += hello_cmd.o OBJS += led_cmd.o OBJS += dhrystone_cmd.o OBJS += whetstone_cmd.o OBJS += benchmarks.o 进入后可以在shell中运行一些demo 查看local_shell_cmds.c /* ** RTEMS Kernel Image shell command setup ** */ #include "rki_config.h" #include <stdio.h> #include <stdlib.h> #include <bsp.h> #include <fcntl.h> #include <termios.h> #include <errno.h> #include <rtems/shell.h> #include <rtems/bdbuf.h> #include <rtems/error.h> /* ** External functions */ int rtems_init_network(char *EthernetAddress, char *IPAddress, char *HostName, char *NetMask, char *GateWay, char *NameServer ); void rtems_start_network_services(void); int hello_command( int argc, char *argv[]); int led_command( int argc, char *argv[]); int task_command( int argc, char *argv[]); int dhrystone_command( int argc, char *argv[]); int whetstone_command( int argc, char *argv[]); /* ** Net Setup Command */ int net_setup_command( int argc, char *argv[]) { /* ** Check args ** Ethernet address ** IP Address ** Netmask */ if (argc != 7) { printf("Command Usage: netsetup <EthernetAddr> <IPaddress> <Hostname> <Netmask> <Gateway> <Nameserver>\n"); return(-1); } else { printf ("Ethernet Address = %s\n", argv[1]); printf ("IP Address = %s\n", argv[2]); printf ("Host Name = %s\n", argv[3]); printf ("Netmask = %s\n", argv[4]); printf ("Gateway = %s\n", argv[5]); printf ("Nameserver = %s\n", argv[6]); rtems_init_network( argv[1], argv[2], argv[3], argv[4], argv[5], argv[6] ); #ifdef RKI_INCLUDE_NETWORK_SERVICES /* ** Start network services */ rtems_start_network_services(); #endif } return(0); } /* ** ** Start the RTEMS Shell. */ void shell_start ( void ) { rtems_status_code sc; printf ("Starting shell....\n\n"); sc = rtems_shell_init ("shell0", 20 * 1024, 100, "/dev/console", 0, 1,NULL); if (sc != RTEMS_SUCCESSFUL) { printf ("error: starting shell: %s (%d)\n", rtems_status_text(sc), sc); } } /* ** ** Run the /shell-init script. */ void shell_init_script (void) { rtems_status_code sc; printf ("Running /shell-init.\n\n"); sc = rtems_shell_script ("initscr", 60 * 1024, /* Stack size */ 20, /* Priority */ RKI_SHELL_INIT, /* the Script file to run */ "stdout", /* Where to redirect the output */ 0, /* Run once and exit */ 1, /* Wait ? */ 1); /* Verbose/echo */ if (sc != RTEMS_SUCCESSFUL) printf ("error: running shell script: %s (%d)\n", rtems_status_text (sc), sc); } /* ** function to start the shell and add new commands. */ int rtems_add_local_cmds(void) { /* ** Add commands */ rtems_shell_add_cmd("netsetup","misc","setup and start networking",net_setup_command); rtems_shell_add_cmd("hello","misc","Say hello RTEMS!",hello_command); rtems_shell_add_cmd("led","misc","LED working",led_command); rtems_shell_add_cmd("taskdemo","misc","run a set of tasks",task_command); rtems_shell_add_cmd("dhrystone","misc","Run the Dhrystone Benchmark",dhrystone_command); rtems_shell_add_cmd("whetstone","misc","Run the Whetstone Benchmark",whetstone_command); shell_init_script(); /* ** Setup the shell */ shell_start (); return(0); } 可以运行add的cmd例如netsetup,hello等,led是我自己加的,后续再聊
相关文章推荐
- c++中的explicit关键字
- 防止Block的循环引用
- UIView的图层关系
- 孙源面试题试解(更新完毕)
- android_移植memtester
- 低级绕过手段
- Pie(poj 3122)二分法
- 64bit需要做的改变
- linux命令--------------top
- 如何在Android开发中让你的代码更有效率
- 栈的应用 - 波兰式与逆波兰式
- Wireshark远程抓包
- C#中的异常处理
- php 反射
- Cocos2d-x 3.6 命令行创建项目
- hdu 5351 MZL's Border (大数)
- 图片缩放
- maven compile遇到Fatal error compiling: tools.jar not found
- This is an A+B Problem SDUT 2613
- UVA12096 The SetStack Computer