,需要必须有足够动经验来支持。
另外,用RH9的都是高手,我想你的知识不需要来提问了吧?
1、在PC上编译arm的程序当然需要较差编译器,这个需要自己安装,或者着现成的交叉编译器环境,一般是一个特殊参数编译出来的gcc+binutils+glibc+linux-header。
这个每个人动环境不同,一般都需要自己编译一个,当然没有特殊需求,也可以找现成的。
不过很难找,因为这套环境还要和你动系统搭配,不然环境不匹配,连这个环境都不能运行,那就更谈不上编译东西了。
有关自己编译搭建交叉编译环境,可以看看一个特殊的Linux发行版LFS的分支:CLFS。
2、移植分很多意思,移植有可能就意味着这套源代码不能在目标系统上面编译,需要你根据相应的知识去修改源代码来让这套代码适应目标编译器的要求,比如源代码有SSE4的优化,这套程序在非SSE4CPU上无法编译运行,但目标机器连SSE1都不支持。
那么就需要移植。
或者移植仅仅是根据新的环境进行编译,不需要进行源代码修改,只需要进行一下编译就能运行的程序,也可以称为移植,就是从一个环境、架构-》另一个环境、架构。
都可以称为移植,但真正的移植意味着修改程序源代码来适应新环境。
你说的这种移植是最简单的移植。
3、决定目标硬件环境-》搭建目标编译器-》制作目标环境(内核,基础软件库)-》进行应用移植(移植需要的软件、主应用程序)-》搭建系统文件系统-》导入目标系统-》启动目标系统&应用。
说起来很简单,因为这是完全没有问题的条件下。
至于超级终端。那是用来控制目标系统的。目标系统有可能不能插键盘鼠标显示器,这就需要一个远程网络链接来进行控制。以及通过远程链接来发送数据。这都需要终端的支持。
虚拟机下面进行开发,不能发挥你的计算机的性能。而且因为隔着VMware的软件模拟层,可能还不会很方便的让你链接目标设备。
至于用socket,我还没见到你的目标需要这个东西,因为所有的东西都是现成的源代码。
不需要你从0开始写,当然你想自己写一个系统内核,或者服务器程序,或者全套的系统+应用,我绝对不拦你,但希望你写完这套东西,能把源代码发布出来。
ads可以认为是一个支持环境,他本身不是一个系统的开发SDK。
-------------------------------------。
ads没用过,印象里他还有模拟器,调试器什么的程序。
功能上要比Linux开发环境,WinCE环境下面的东西更多更偏向于硬件方面,毕竟ads是arm出品的,不太可能偏向于软件部分设计。
Linux和WinCE都是系统而不是硬件工具。
你可以认为交叉编译器是一个应用程序,一个输出器。把源代码输出为arm的代码,这个应用程序的输出,是靠他自己的环境,而不是当前系统的环境的。
当前系统的各个软件的版本,不能影响交叉编译器输出的环境(理论上,现实有的时候总是从别的地方给你打击……),交叉编译器一般至少有gcc、binutils、glibc库、linuxkernel头文件。
在软件需求上。
头文件谁都不依赖,glibc只需要内核头文件,其他程序全都依赖于glibc。也就是所有程序都不依赖内核,仅仅是依赖于内核头文件。
gcc和binutils是把程序源代码根据上面各个环节的需提供的功能来输出为上面环节里面的二进制程序。
依赖你当前环境的,只有gcc和binutils两个程序的执行、控制环节。
只有他们两个依赖的,而不是你的交叉编译后的程序。
至于编译器版本的选择,新版本功能更好,旧版本兼容更好。
这个要看你的实际需要了。应用程序源代码也调编译器的,同时也依赖于软件库的功能。
arm开发建议稳定、兼容优先。当然也可以尝试最新的编译环境,来获取更好的优化(前提是还有什么代码优化的话)。
另外,团IDC网上有许多产品团购,便宜有口碑
makefile指定交叉编译器
首先说明一下:
在YAFFS2源文件的utils目录下,执行make就可以生成mkyaffs2image工具,执行。
.(要制作yaffs2的目录)(目标镜像)/mkyaffs2image。
acl_2.2.47.orig.tar.gz。
lzo-2.03.tar.gz
mtd-utils_20080508.orig.tar.gz。
zlib-1.2.3.tar.gz
mkfs.jffs2.for.arm-linux-gcc.3.4.1平台.tar.bz2。
mkfs.jffs2.for.arm-linux-gcc.4.3.2平台.tar.bz2。
mkfs.jffs2.for.pc平台.tar.bz2。
如果只需要mkfs.jffs2工具,那么ubuntu8.10下直接安装jffnms软件包即可,。
luther@gliethttp:~$sudoapt-getinstalljffnms。
如果需要将jffs2移植到arm开发板上,那么就需要下载源码进行交叉编译了,这就是本文的内容.
1.下载工具软件源码包
luther@gliethttp:~$wgethttp://ftp.de.debian.org/debian/pool/main/m/mtd-utils/mtd-utils_20080508.orig.tar.gz。
luther@gliethttp:~$wgethttp://www.zlib.net/zlib-1.2.3.tar.gz。
luther@gliethttp:~$wgethttp://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz。
luther@gliethttp:~$mkdirlibs用来存放下面生成的lib库.
2.编译zlib库
luther@gliethttp:~/zlib-1.2.3$./configure--prefix=~/libs--shared。
对于交叉编译输入如下指令
luther@gliethttp:~/zlib-1.2.3$CC=arm-linux-gcc./configure--prefix=~/libs--shared。
luther@gliethttp:~/zlib-1.2.3$make-j4。
luther@gliethttp:~/zlib-1.2.3$makeinstall。
luther@gliethttp:~$tree~/libs。
/home/ubuntu/libs
|--include
||--zconf.h
|`--zlib.h
|--lib
||--libz.so->libz.so.1.2.3。
||--libz.so.1->libz.so.1.2.3。
|`--libz.so.1.2.3
`--share
`--man
`--man3
`--zlib.3
5directories,6files
这就表示完成了.
3.编译lzo库
luther@gliethttp:~/lzo-2.03$./configure--prefix=/home/ubuntu/libs--enable-shared。
对于交叉编译输入如下指令
luther@gliethttp:~/lzo-2.03$CC=arm-linux-gcc./configure--host=arm-linux--prefix=/home/ubuntu/libs--enable-shared--disable-static。
这个还必须要绝对路径才行.
luther@gliethttp:~/lzo-2.03$make。
luther@gliethttp:~/lzo-2.03$makeinstall。
luther@gliethttp:~$tree~/libs。
.
|--include
||--lzo
|||--lzo1.h
|||--lzo1a.h
|||--lzo1b.h
|||--lzo1c.h
|||--lzo1f.h
|||--lzo1x.h
|||--lzo1y.h
|||--lzo1z.h
|||--lzo2a.h
|||--lzo_asm.h
|||--lzoconf.h
|||--lzodefs.h
||`--lzoutil.h
||--zconf.h
|`--zlib.h
|--lib
||--liblzo2.a
||--liblzo2.la
||--liblzo2.so->liblzo2.so.2.0.0。
||--liblzo2.so.2->liblzo2.so.2.0.0。
||--liblzo2.so.2.0.0
|`--libz.a
`--share
`--man
`--man3
`--zlib.3
6directories,22files
手工将静态库删掉就行了,
如果是arm平台还需要strip优化.
4.编译mtd-utils-20080508前的准备工作.
编译之前的代码工作
luther@gliethttp:~$wgethttp://ftp.de.debian.org/debian/pool/main/a/acl/acl_2.2.47.orig.tar.gz。
luther@gliethttp:~$mkdirlibs/include/sys-p。
luther@gliethttp:~$cpacl-2.2.47/include/acl.hlibs/include/sys。
luther@gliethttp:~/mtd-utils-20080508$exportLD_LIBRARY_PATH=~/libs/lib:$LD_LIBRARY_PATH。
如果还找不到-llzo2,那么把他拷到/usr/lib下,对于交叉编译器,就是拷贝到。
比如
luther@gliethttp:~/libs/lib$sudocp-a*/vobs/tools/arm-tools/arm-linux-gcc-3.4.1/arm-linux/lib/。
luther@gliethttp:~/mtd-utils-20080508$vimMakefile。
修改安装路径
DESTDIR=.
SBINDIR=gliethttp/sbin。
MANDIR=gliethttp/share/man。
INCLUDEDIR=gliethttp/include。
修改CFLAGS变量
CFLAGS:=-I./include-I/home/ubuntu/libs/include$(OPTFLAGS)。
如果是arm-linux-gcc定义为
CFLAGS:=-I./include-I/home/ubuntu/libs/include-DAI_ADDRCONFIG=0x0020$(OPTFLAGS)。
来自/usr/include/netdb.h。
luther@gliethttp:~/mtd-utils-20080508$vimubi-utils/Makefile。
DESTDIR:=~/mtd-utils-20080508。
SBINDIR=gliethttp/sbin。
MANDIR=gliethttp/share/man。
INCLUDEDIR=gliethttp/include。
luther@gliethttp:~/mtd-utils-20080508$vimrecv_image.c。
拷贝/usr/include/netinet/in.h文件中。
arm-linux-gcc中不需要拷贝它.
structip_mreq
{
structin_addrimr_multiaddr;。
structin_addrimr_interface;。
};
结构体数据到头部,否则在u盘版的ubuntu8.10上老是提示没有ip_mreq定义,虽然上面明明写了#define_USE_MISC。
arm-linux-gcc中还需要创建如3下个目录。
luther@gliethttp:~/mtd-utils-20080508$mkdirarm-linux。
luther@gliethttp:~/mtd-utils-20080508$cp-rubi-utilsarm-linux/。
luther@gliethttp:~/mtd-utils-20080508$cp-rincludearm-linux/。
luther@gliethttp:~/mtd-utils-20080508$vimubi-utils/src/libpfiflash.c。
将所有EBUF(PFIFLASH_ERRSTR[-rc]);全部替换为EBUF("%s",PFIFLASH_ERRSTR[-rc]);。
vim下替换脚本为
:%s/EBUF(PFIFLASH_ERRSTR\[-rc\]);/EBUF("\%s",PFIFLASH_ERRSTR\[-rc\]);/g。
luther@gliethttp:~/mtd-utils-20080508$vimubi-utils/src/ubimirror.c。
将第206行的
fprintf(stderr,err_buf);。
改为
fprintf(stderr,"%s",err_buf);//想法是好的,因为err_buf中含有%d等format信息,这样接口更加统一,但是编译器似乎还并不支持这样的操作.[luther.gliethttp]。
luther@gliethttp:~/mtd-utils-20080508$vimubi-utils/src/unubi.c。
将第898行
charfname[PATH_MAX];
改为
charfname[PATH_MAX+1];。
luther@gliethttp:~/mtd-utils-20080508$cdubi-utils/new-utils。
因为-O2优化的原因,会导致如下log信息。
error:ignoringreturnvalueof‘scanf’,declaredwithattributewarn_unused_result。
所有手工先编译.o
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$gcc-Iinclude-Isrc-I../../include-Wall-Werror-Wallsrc/ubiformat.c-c-oubiformat.o。
对于交叉编译执行如下1条语句
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$arm-linux-gcc-Iinclude-Isrc-I../../include-Wall-Werror-Wallsrc/ubiformat.c-c-oubiformat.o。
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$cd-。
好了,上面的所有修改完成之后,就可以执行make成功编译了[luther.gliethttp].
luther@gliethttp:~/mtd-utils-20080508$make。
如果是交叉编译,执行
luther@gliethttp:~/mtd-utils-20080508$makeCROSS=arm-linux-。
luther@gliethttp:~/mtd-utils-20080508$makeinstall。
对于交叉编译,执行
luther@gliethttp:~/mtd-utils-20080508$makeCROSS=arm-linux-install。
luther@gliethttp:~/mtd-utils-20080508$treegliethttp/。
gliethttp/
|--sbin
||--bin2nand
||--doc_loadbios
||--docfdisk
||--flash_erase
||--flash_eraseall
||--flash_info
||--flash_lock
||--flash_otp_dump
||--flash_otp_info
||--flash_unlock
||--flashcp
||--ftl_check
||--ftl_format
||--jffs2dump
||--mkbootenv
||--mkfs.jffs2
||--mkpfi
||--mtd_debug
||--nand2bin
||--nanddump
||--nandtest
||--nandwrite
||--nftl_format
||--nftldump
||--pddcustomize
||--pfi2bin
||--pfiflash
||--recv_image
||--rfddump
||--rfdformat
||--serve_image
||--sumtool
||--ubiattach
||--ubicrc32
||--ubicrc32.pl
||--ubidetach
||--ubigen
||--ubimirror
||--ubimkvol
||--ubinfo
||--ubinize
||--ubirmvol
||--ubiupdatevol
|`--unubi
`--share
`--man
`--man1
`--mkfs.jffs2.1.gz
4directories,45files
ep9312开发板上没有任何文件系统flash数据读取。
#./mtd_debugread/dev/mtd00100gliethttp.bin。
Copied100bytesfromaddress0x00000000inflashtogliethttp.bin。
#hexdumpgliethttp.bin。
000000003ffea00350ce59f001ce583410ee3a0。
00000104004e5834a03e3a04001e254fffd1aff。
00000204106e3a04004e583420fe2025000e594。
00000304001e0845000e5944001e0845000e594。
00000404001e0845000e5944010e3a04008e583。
00000504050e3a04001e254fffd1aff4e1ee3a0。
00000604008e583
0000064
#
#./mtd_debugread/dev/mtd20100gliethttp.bin;hexdumpgliethttp.bin-Cv。
Copied100bytesfromaddress0x00000000inflashtogliethttp.bin。
000000001f8b0800ca147d4a0203e45a0f7093e7|......}J...Z.p..|
00000010797f3f4936b2314180a00e38cd577016|y.?I6.1A...8.Wp.|
000000209318f3193b60129ad96008094e22c0a4|....;`...`..N"..|
00000030b481ca42926d0d59d24972022b4ddd60|...B.m.Y.Ir.+M.`|
000000407284e18603a721018ad2b24b2ef35676|r.....!....K..Vv|
0000005063b7340b1dcdb11d6bb39536dc95dbd1|c.4.....k..6....|
000000608b90d1ea|....|
00000064
还没有评论,来说两句吧...