ARM开发 在skyeye上运行uClinux.docx
- 文档编号:2374197
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:10
- 大小:53.18KB
ARM开发 在skyeye上运行uClinux.docx
《ARM开发 在skyeye上运行uClinux.docx》由会员分享,可在线阅读,更多相关《ARM开发 在skyeye上运行uClinux.docx(10页珍藏版)》请在冰点文库上搜索。
ARM开发在skyeye上运行uClinux
在skyeye上运行uC/OS和uClinuxstepbystep
一、基本概念的介绍
首先介绍一下什么是uClinux,uc/OS和skyeye
uC/OS是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。
其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。
uClinux是一种优秀的嵌入式linux版本。
uClinux是micro-conrol-linux的缩写。
同标准linux相比,它集成了标准linux操作系统的稳定性、强大网络功能和出色的文件系统等主要优点。
但是由于没有mmu(内存管理单元),其多任务的实现需要一定技巧。
SkyEye是一个开源软件(opensourcesoftware)项目,中文名字是“天目”。
SkyEye的目标是在通用的Linux和Windows平台实现一个仿真集成开发环境,模拟常见的嵌入式计算机系统(目前支持基于arm7tdmi的AT91开发板);可在SkyEye上运行uclinux以及uC/OS-II等多种嵌入式操作系统,并对它们进行源码级的分析和测试。
二、测试环境及其软件的下载
本文的所有操作都是在RedHat9.0上进行的。
1、uClinux-dist-20041215.tar.gz
(http:
//www.uclinux.org/)
2、arm-elf-tools-20030314.sh
(编译uClinux的交叉编译器http:
//www.uclinux.org/)
3、skyeye-0.9.8.tar.bz2(http:
//gro.clinux.org/frs/?
group_id=327&release_id=840)
4、ucosii4skyeye-1.9.3.tar.gz(http:
//gro.clinux.org/frs/?
group_id=327&release_id=716)
下载后的软件均放在/tmp/embed的目录下
三、安装软件及其使用
1、skyeye的安装
Code:
cd/tmp/embed
tar-jvxfskyeye-0.9.8.tar.bz2
cdskyeye
./configure--target=arm-elf--prefix=/usr/local/{--without-gtk-prefix--without-gtk-exec-prefix--disable-gtktest}
如果机器上没有安装gtk的开发包,那么就需要加入大括弧之间的选项
Code:
make;makeinstall
2、arm-elf-tools的安装
所有的交叉编译工具都在arm-elf-tools-20030314.sh文件中,执行下面的命令后将安装在/usr/local/bin目录下
Code:
./arm-elf-tools-20030314.sh
3、ucosii4skyeye-1.9.3.tar.gz
Code:
cd/tmp/embed
exportCROSS_COMPILE="/usr/local/bin/arm-elf-"
或者把以上的命令加入~/.bash_profile文件里
然后运行suyour_login_name--login
Code:
tar-zvxfucosii4skyeye-1.9.3.tar.gz
在没有编译之前先修改一下lib/skyeye_printf.c文件,不然在编译samples时会出现如下错误:
Quote:
skyeye_printf.o:
Infunction`getnum':
/root/src/skyeye/ucosii4skyeye/samples/ucos_test/../../lib/skyeye_printf.c:
118:
undefinedreferenceto`isdigit'
skyeye_printf.o:
Infunction`skyeye_printf':
/root/src/skyeye/ucosii4skyeye/samples/ucos_test/../../lib/skyeye_printf.c:
164:
undefinedreferenceto`isdigit'make:
***[ucos_test.elf]Error1
(不知道在其他的系统中有没有这个Bug,我在RH9上测试时出现了这个问题),把以下代码加入skyeye_printf.c文件中
Code:
staticintisdigit(charch)
{
if(ch>='0'&&ch<='9')
return1;
return0;
}
然后把该文件中的"#include
保存退出进入ucosii4skyeye/samples/ucos_test目录
Code:
cducosii4skyeye/samples/ucos_test
makecleanall
makeconfig
makedep
make
maketest
进入(SkyEye)后,运行
Code:
targetsim
load
r
如果读者看到了如下的界面:
Quote:
skyeyeucos_test.elf
***********************************************************************
**** ****
**** SkyEye SimulatorVer0.9.8with GDB/Insight5.3Interface****
**** ****
***********************************************************************
GNUgdb5.3
Copyright2002FreeSoftwareFoundation,Inc.
GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouare
welcometochangeitand/ordistributecopiesofitundercertainconditions.
Type"showcopying"toseetheconditions.
ThereisabsolutelynowarrantyforGDB. Type"showwarranty"fordetails.
ThisSkyEyewasconfiguredas"--host=i686-pc-linux-gnu--target=arm-elf"...
(SkyEye)targetsim
cpuinfo:
armv3,arm7tdmi,41007700,fff8ff00,0
machinfo:
nameat91,mach_initaddr0x8161574
SKYEYE:
usearm7100mmuops
Connectedtothesimulator.
(SkyEye)load
Loadingsection.text,size0x7660vma0x1000000
Loadingsection.data,size0x205cvma0x1008000
Startaddress0x1000000
Transferrate:
308704bitsin<1sec.
(SkyEye)r
Startingprogram:
/root/src/skyeye/ucosii4skyeye/samples/ucos_test/ucos_test.elf
Task1running...Pleaseinputastring:
>helloworld...~!
;)
Task2running...Yourinputstring:
"helloworld...~!
;)"
pParamis16814060Task1running...Pleaseinputastring:
>
恭喜你,你成功了,剩下的问题就是用skyeye深入的去熟悉ucos,理解它的内部结构并写出自己程序。
除了这一个ucos_test以外,在samples目录下还有其他的ucos的测试目录,其中lwip_on_ucos_test时作者把lwip移植到了ucos里面(ucos本身并不带协议栈),有兴趣的朋友可以试试,编译它的命令与编译ucos_test的一样。
4、uclinux的安装和使用
1>、安装
Code:
cd/tmp/embed
tar-zvxfuClinux-dist-20041215.tar.gz
cduClinux-dist
makexconfig
在"TargetPlatformSelection"中选择"GDB/skyeye",内核选择linux-2.4.x
如下图1所示
[图1、uClinuxConfig选项]
Code:
makedep
make
在当前目录下建立仿真AT91的skyeye配置文件skyeye.conf,内容如下:
Quote:
cpu:
arm7tdmi
mach:
at91
mem_bank:
map=M,type=RW,addr=0x00000000,size=0x00004000
mem_bank:
map=M,type=RW,addr=0x01000000,size=0x00400000
mem_bank:
map=M,type=R,addr=0x01400000,size=0x00400000,file=images/romfs.img
mem_bank:
map=M,type=RW,addr=0x02000000,size=0x00400000
mem_bank:
map=M,type=RW,addr=0x02400000,size=0x00008000
mem_bank:
map=M,type=RW,addr=0x04000000,size=0x00400000
mem_bank:
map=I,type=RW,addr=0xf0000000,size=0x10000000
#setnicinfostate=on/offmac=xx:
xx:
xx:
xx:
xx:
xxethmod=tuntap/vnethostip=dd.dd.dd.dd
net:
state=on,mac=0:
4:
3:
2:
1:
f,ethmod=tun,hostip=10.0.0.1
2>、使用
Code:
skyeyelinux-2.4.x/linux
targetsim
load
r
结果如下所示:
Quote:
***********************************************************************
**** ****
**** SkyEye SimulatorVer0.9.8with GDB/Insight5.3Interface****
**** ****
***********************************************************************
GNUgdb5.3
Copyright2002FreeSoftwareFoundation,Inc.
GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouare
welcometochangeitand/ordistributecopiesofitundercertainconditions.
Type"showcopying"toseetheconditions.
ThereisabsolutelynowarrantyforGDB. Type"showwarranty"fordetails.
ThisSkyEyewasconfiguredas"--host=i686-pc-linux-gnu--target=arm-elf"...
(SkyEye)targetsim
cpuinfo:
armv3,arm7tdmi,41007700,fff8ff00,0
machinfo:
nameat91,mach_initaddr0x8161574
nic[0]info:
state=1,ethmodnum=1,macaddr=0:
5:
3:
2:
1:
f,hostip=192.168.2.1
nic_init_begin
tapif_initbegin
tapif_init:
fd6
tapif_init:
system("ifconfigtap0inet192.168.2.1");
tapif_initend
nic_init_end
SKYEYE:
usearm7100mmuops
LoadedROM ./romfs.img
Connectedtothesimulator.
(SkyEye)load
Loadingsection.init,size0xa000vma0x1000000
Loadingsection.text,size0xe0e90vma0x100a000
Loadingsection.data,size0xa594vma0x10ec000
Startaddress0x1000000
Transferrate:
4018320bits/sec.
(SkyEye)r
Startingprogram:
/root/src/skyeye/uclinux/linux
Linuxversion2.4.27-uc1(root@TEST)(gccversion2.95.320010315(release)(Cold
Firepatches-20010318fromXIPandshared
libpatchesfrom#2FriAug515:
13:
59CST2005
Processor:
AtmelAT91M40xxxrevision0
.......
.......
......
Shellinvokedtorunfile:
/etc/rc
Command:
hostnameGDB-ARMulator
Command:
/bin/expand/etc/ramfs.img/dev/ram0
Command:
mount-tprocproc/proc
mount:
/etc/mtab:
Read-onlyfilesystem
Command:
mount-text2/dev/ram0/var
mount:
/etc/mtab:
Read-onlyfilesystem
Command:
mkdir/var/tmp
Command:
mkdir/var/log
Command:
mkdir/var/run
Command:
mkdir/var/lock
Command:
mkdir/var/empty
Command:
cat/etc/motd
Welcometo
_____ _
/ __|||_|
_ _|| ||_____ _ _ _ _
||||| |||| _\||||\\//
||_|||__||||||||_||/ \
| ___\____|_||_|_||_|\____|\_/\_/
||
|_|
GDB/ARMulatorsupportby
Forfurtherinformationcheck:
http:
//www.uclinux.org/
Command:
/bin/ifconfigeth0up10.0.0.2
ExecutionFinished,Exiting
Sashcommandshell(version1.1.1)
/>ps
PIDPORTSTAT SIZESHARED%CPUCOMMAND
1 S 150K 0K 5.0/sbin/init
2 S 0K 0K 0.0keventd
3 S 0K 0K 0.0ksoftirqd_CPU0
4 S 0K 0K 0.0kswapd
5 S 0K 0K 0.0bdflush
6 S 0K 0K 0.0kupdated
12 S0R 44K 0K 6.0/bin/sh
13 S 22K 0K 3.0/bin/inetd
/>
3>、在uclinux里面添加自己的应用程序
先写一个helloworld~!
的程序
Code:
#include
intmain()
{
printf("welcometouclinuxworld~!
\n");
}
编译hello.c,
Code:
arm-elf-gcc-Wl,elf2flthello.c-ohello
把hello拷贝到romfs/bin目录下
接着运行
Code:
makeromfs
makeimage
再按2的方法运行一次
然后执行hello,
看到"welcometouclinuxworld~!
"了吧...
往uclinux里面加入程序还有另外一种方发,不过那种方法很繁琐,这里就不介绍了,
有兴趣的朋友参考uclinux-dist/Documentation/Adding-User-Apps-HOWTO文件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM开发 在skyeye上运行uClinux ARM 开发 skyeye 运行 uClinux