|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
iPhoneSDK安装,然后最基本的是你要熟悉C语言,再来你得学习开发iPhone所使用的Objective-C语言,接著是Cocoa。如果你是Mac平台开发的入门用户一媒介
本文旨在将arm-linux在skyeye上搭建起来,并在arm-linux上能乐成mountNFS为方针,终极我们能在arm-linux里运转我们本人的使用程序.实在在skyeye上移植arm-linux并不是难事,网上也有很多材料,只是多数漏掉细节,乃至渺小的地方卡壳,以是本文力图详确清析,但愿能对人人有点用途。
二安装Skyeye
我们选定skyeye的1.2.4这个版本,为了能让它下面运转的arm-linx能挂接NFS,我们必要修正device/net/dev_net_cs8900a.c(修正后的文件在附件里),再编译skyeye。操纵以下,先解压源码包:
#tarxzfskyeye-1.2.4_Rel.tar.gz
#cdskyeye-1.2.4
请用附件里的dev_net_cs8900a.c交换device/net/dev_net_cs8900a.c后实行编译:
#makeNO_DBCT=1NO_BFD=1
编译完后天生的skyeye在binary下,将其拷贝至/usr/local/bin/下:
#cpbinary/skyeye/usr/local/bin
三编译内核
我们选定linux-2.6.14.tar.bz2这个版本,交织编译器用arm-linux-gcc3.4.1(对2.6内核用3.4以下的版本编译常常会呈现成绩)。操纵步骤以下:
1.假定内核源码包在/root下,起首解压源码:
#cd/root
#tarxjflinux-2.6.14.tar.bz2
2.进进内核目次:
#cdlinux-2.6.14
修正此目次下的Makefile,将
ARCH?=$(SUBARCH)
CROSS_COMPILE?=
改成
ARCH?=arm
CROSS_COMPILE?=/usr/local/arm/3.4.1/bin/arm-linux-
3.天生默许的内核设置文件(fors3c2410):
#makesmdk2410_defconfig
4.为内核增加cs8900(见附件)网卡驱动,以撑持NFS挂接:
(1)复制cs8900驱动到drivers/net/arm目次
#cpcs8900.cdrivers/net/arm
#cpcs8900.hdrivers/net/arm
(2)修正drivers/net/arm目次下的Kconfig文件,在最初增加:
configARM_CS8900
tristate"CS8900support"
dependsonNET_ETHERNET&&ARM&&ARCH_SMDK2410
help
SupportforCS8900AchipsetbasedEthernetcards.Ifyouhaveanetwork
(Ethernet)cardofthistype,sayYandreadtheEthernet-HOWTO,available
fromaswellas.Tocompilethisdriverasamodule,chooseMhereandread.
Themodulewillbecalledcs8900.o.
注:在运转makemenuconfig命令时就会呈现:[]CS8900support这一选项
(3)修正drivers/net/arm目次下的Makefile文件,在最初增加以下内容:
obj-$(CONFIG_ARM_CS8900)+=cs8900.o
注:2.6版本内核的Makefile也与2.4的有所分歧,增加以上语句,就会使内核在编译的时分依据设置将cs8900A的驱动程序以模块或静态的体例编译到内核傍边。
(4)修正arch/arm/mach-s3c2410/mach-smdk2410.c在此文件中找到smdk2410_iodesc[]布局数组,增加以下以下内容:
{vSMDK2410_ETH_IO,pSMDK2410_ETH_IO,SZ_1M,MT_DEVICE}
修正以后酿成:
staticstructmap_descsmdk2410_iodesc[]__initdata={
/*nothinghereyet*/
/*MaptheethernetcontrollerCS8900A*/
{vSMDK2410_ETH_IO,pSMDK2410_ETH_IO,SZ_1M,MT_DEVICE}
};
而且增加一个头文件援用:
#include<asm-arm/arch-s3c2410/smdk2410.h>
(5)在include/asm-arm/arch-s3c2410目次下创立文件smdk2410.h
#ifndef_INCLUDE_SMDK2410_H_
#define_INCLUDE_SMDK2410_H_
#include<linux/config.h>
#definepSMDK2410_ETH_IO0x19000000
#definevSMDK2410_ETH_IO0xE0000000
#defineSMDK2410_ETH_IRQIRQ_EINT9
#endif
5.参照http://skyeye.wiki.sourceforge.net/Linux修正内核文件
修正include/asm-arm/arch-s3c2410/map.h
#defineS3C2410_CS6(0x30000000UL)
to
#defineS3C2410_CS6(0xC0000000UL)
修正include/asm-arm/arch-s3c2410/memory.h
#definePHYS_OFFSET(0x30000000UL)
to
#definePHYS_OFFSET(0xC0000000UL)
6.裁剪/定制内核
(1)#makemenuconfig
(2)设置内核启动参数
Bootoptions--->Defaultkernelcommandstring:
mem=32Mconsole=ttySAC0root=/dev/raminitrd=0xc0800000,0x00800000ramdisk_size=8192rw
(3)设置CS8900的撑持
DeviceDrivers--->
Networkdevicesupport--->
Ethernet(10or100Mbit)--->[]CS8900support
选中
[*]CS8900support
(4)设置initrd的撑持
DeviceDrivers--->Blockdevices--->[]RAMdisksupport
上面三项必需设置:
1.确保RAMdisksupport被选中
2.响应的将默许的(4096)DefaultRAMdisksize(kbytes)改成8192;
3.InitialRAMdisk(initrd)support必定要选中,牢记!
(5)设置NFS的撑持
Filesystems--->NetworkFileSystems--->
最少确保上面两项被选中:
[*]NFSfilesystemsupport
[*]ProvideNFSv3clientsupport
(6)设置ROMfilesystem的撑持
Filesystems--->
[*]ROMfilesystemsupport
确保
[*]ROMfilesystemsupport被选中
(7)设置ext2的撑持
Filesystems--->
[*]Secondextendedfssupport
确保
[*]Secondextendedfssupport被选中
7.编译
#make
编译完成后会有个vmlinux在以后目次下,这就是我们要的arm-linux内核了
四制造根文件体系initrd.img(InitialRAMdisk)
我们选定busybox-1.9.2.tar.bz2这个版本,以静态体例编译,即天生的busybox不必要共享库的撑持就可以运转。如许做我们就不必要布署程序库了。弱点是本人写的arm-linux程序在这个根文件体系中是不克不及运转的,由于短少共享程序库的撑持。不外别忧虑,我们会办理这个成绩的,稍后你将看到,经由过程在arm-linux里以挂接NFS的体例,将宿主机的arm-linux-gcc编译器的库文件挂到arm-linux的/lib下,便可完善的运转我们本人的程序了。好,一步步来,先来看看根文件体系的制造:
1.解压源码包
#tarxjfbusybox-1.9.2.tar.bz2
#cdbusybox-1.9.2
2.修正Makefile,将
ARCH?=$(SUBARCH)
CROSS_COMPILE?=
改成
ARCH?=arm
CROSS_COMPILE?=/usr/local/arm/3.3.2/bin/arm-linux-
注:这个版本的busybox用3.4.1的arm-linux-gcc编译有些成绩,用3.3.2版则可顺遂编译。
3.定制busybox
#makemenuconfig
设置静态编译体例
BusyboxSettings--->BuildOptions--->
[*]BuildBusyBoxasastaticbinary(nosharedlibs)
确保
[*]BuildBusyBoxasastaticbinary(nosharedlibs)被选中
4.实行make编译
#make
编译堕落,信息以下:
applets/applets.c:15:2:warning:#warningStaticlinkingagainstglibcproducesbuggyexecutables
applets/applets.c:16:2:warning:#warning(glibcdoesnotcopewellwithld--gc-sections).
applets/applets.c:17:2:warning:#warningSeesources.redhat.com/bugzilla/show_bug.cgi?id=3400
applets/applets.c:18:2:warning:#warningNotethatglibcisunsuitableforstaticlinkinganyway.
applets/applets.c:19:2:warning:#warningIfyoustillwanttodoit,remove-Wl,--gc-sections
applets/applets.c:20:2:warning:#warningfromscripts/trylinkandremovethiswarning.
applets/applets.c:21:2:error:#errorAbortingcompilation.
make[1]:***[applets/applets.o]Error1
依照提醒,修正scripts/trylink,将此文件内里有-Wl,--gc-sections的行都删撤除,
然后从头make
#make
仍是堕落,信息以下:
root@hukq-desktop:~/busybox/busybox-1.9.2#make
CCapplets/applets.o
applets/applets.c:15:2:warning:#warningStaticlinkingagainstglibcproducesbuggyexecutables
applets/applets.c:16:2:warning:#warning(glibcdoesnotcopewellwithld--gc-sections).
applets/applets.c:17:2:warning:#warningSeesources.redhat.com/bugzilla/show_bug.cgi?id=3400
applets/applets.c:18:2:warning:#warningNotethatglibcisunsuitableforstaticlinkinganyway.
applets/applets.c:19:2:warning:#warningIfyoustillwanttodoit,remove-Wl,--gc-sections
applets/applets.c:20:2:warning:#warningfromscripts/trylinkandremovethiswarning.
applets/applets.c:21:2:error:#errorAbortingcompilation.
make[1]:***[applets/applets.o]Error1
make:***[applets]Error2
修正文件applets/applets.c第21行,将
#errorAbortingcompilation.
正文失落:
/*#errorAbortingcompilation.*/
实行make从头编译
#make
编译经由过程,busybox被天生了,然后实行
#makeinstall
busybox就被安装到默许的一时目次_install下了
5.制造initrd.img
有了busybox后制造initrd.img就简单多了,只是提及来对照啰嗦。以命令演示以下:
创立映像文件并挂到initrd目次
#mkdirinitrd
#ddif=/dev/zeroof=initrd.imgbs=1kcount=4096
#mke2fs-F-vinitrd.img
#mount-oloopinitrd.imginitrd
将增加busybox到此映像文件
#cdinitrd
#cp-r../_install/*.
#创立需要的目次
#mkdirproclibetcdevroothomevartmp
#chmod777tmp
创建设备文件
#cddev
#mknod-m644consolec51
#mknod-m644nullc13
#mknod-m640ramb11
#mknod-m644memc11
#cd..
创立剧本文件etc/inittab,内容以下:
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount-a-r
::shutdown:/sbin/swapoff-a
设置此剧本实行权限
#chmod644etc/inittab
创立剧本文件etc/init.d/rcS,内容以下:
#!/bin/sh
/bin/mount-tprocnone/proc
/sbin/ifconfiglo127.0.0.1up
/sbin/ifconfigeth010.0.0.2netmask255.0.0.0up
hostnameskyeye
mkdir/var/tmp
mkdir/var/log
mkdir/var/run
mkdir/var/lock
/bin/ash
设置此剧本实行权限
#chmod755etc/init.d/rcS
最初一步,实行实践的写进操纵,天生initrd.img
cd..
umountinitrd
五运转arm-linux
如今我们有了内核vmlinux,映像文件initrd.img,摹拟程序skyeye,我们还必要一个
设置文件skyeye.conf举行arm-linux的仿真运转。
#mkdir/root/test
#cd/root/test
将vmlinux,initrd.img都拷贝到此目次,在此目次下创建一个skyeye的配制文件
skyeye.conf,文件内容以下:
cpu:arm920t
mach:s3c2410x
#physicalmemory
mem_bank:map=M,type=RW,addr=0xc0000000,size=0x00800000
mem_bank:map=M,type=RW,addr=0xc0800000,size=0x00800000,file=./initrd.img
mem_bank:map=M,type=RW,addr=0xc1000000,size=0x01000000
#allperipheralsI/Omappingarea
mem_bank:map=I,type=RW,addr=0x48000000,size=0x20000000
mem_bank:map=I,type=RW,addr=0x19000300,size=0x00000020
net:type=cs8900a,base=0x19000300,size=0x20,int=9,mac=0:4:3:2:1:f,ethmod=tuntap,hostip=10.0.0.1
lcd:type=s3c2410x,mod=gtk
#dbct:state=on
好了,试运转吧:
skyeye-evmlinux
看到你的arm-linux运转了吗:-)
六在arm-linux里运转我们本人的程序
如今arm-linux在skyeye上跑起来了,我们能运转内里的命令,但这些都是busybox的,是体系程序。如何才干在arm-linux里运转我们本人的程序呢?有两种计划,我们无妨会商一下,择优而录之:
1.在制造根文件体系initrd.img的时分把我们本人的程序加出来,好比放在/usr/bin里目次下,然后从头天生initrd.img,并用这个新的根文件体系来运转arm-linux。实在这是我们的产物在arm-linux上公布的终极体例,但这有个弱点:在产物开辟/调试阶段这么做对照贫苦,每修正一次代码就得build一次根文件体系。
2.使用挂接NFS(Networkfilesystem)的体例,我们会见/实行一个收集文件体系上的文件就像它在当地一样,明显这么做能制止第一种计划的坏处!怎样完成呢?随我来:
(1)在arm-linux的宿主机里设置NFSServer(我用是ubuntu,并且是在vmware里)
#apt-getinstallnfs-kernel-server
#apt-getinstallnfs-common
(2)编纂文件/etc/exports,内容以下(详细需求由你而定):
/test*(rw,sync,no_root_squash)
/usr/local/arm/3.3.2/lib*(ro,sync,no_root_squash)
(3)设置宿主机的ip
#ifconfigeth1down
#ifconfigeth110.0.0.1netmask255.0.0.0up
注:你的多是eth0,别的ip地点你也可本人界说,只需能和arm-liux通讯
(4)重启nfsserver
#/usr/sbin/exportfs
#/etc/init.d/nfs-kernel-serverrestart
#/etc/init.d/portmaprestart
(5)在skyeye运转arm-linux,为其设置ip
#ifconfiglodown
#ifconfigeth0down
#ifconfiglo127.0.0.1up
#ifconfigeth010.0.0.2netmask255.0.0.0up
注:可将这几个命令加到rcS剧本里,让arm-linux启动时帮你做
(6)在skyeye上运转arm-linux,演示nfs挂接
#mount-onolock10.0.0.1:/usr/local/arm/3.3.2/lib/lib
#exportLD_LIBRARY_PATH=/lib
#mount-onolock10.0.0.1:/test/tmp
在宿主机的/test下创建文件hello.c,用arm-linux-gcc3.3.2编译
#cd/test
#arm-linux-gcc-ohellohello.c
在arm-linux的/tmp下看看,是否是有hello.c和hello这两个文件了?试着运转看看:
#cd/tmp
#./hello
注:为了确认arm-linux能和宿主机通讯,可实验以动手段:
(1)在宿主机上ping你的arm-linux
#ping10.0.0.2-c2
(2)在arm-linux里ping你的宿主机
#ping10.0.0.1-c2
(3)假如互相都ping欠亨过,可如许做:
从头设置一下arm-linux的收集:
#ifconfigeth0down
#ifconfigeth0up
再从头设置一下宿主机的收集:
#ifconfigeth1down
#ifconfigeth1up
然后再像上一步那样,互相ping对方,直至ping通为止。能说的就这么多了,祝你好运!
附件内容(可下载)
来自:http://www.cppblog.com/jb8164/archive/2008/04/17/47369.html
打开.xib的文件打开的就是IBIB和代码交互用的是IBActionIBOutlet这些标记这些标记追踪到他们的定义其实对编译器来说什么都不表示 |
|