momo zone

调核人的blog

Monthly Archives: 二月 2012

/arch 下各CPU架构简介

alpha 处理器

Alpha 处理器最早由美国DEC 公司设计制造,在Compaq (康柏)公司收购DEC 之后,Alpha 处理器继续得到发展,并且应用于许多高档的Compaq 服务器上,HP (惠普)收购的Compaq ,Alpha 便为HP(惠普)所有,不过HP (惠普)已经放弃发展alpha 处理器。

 

arm 处理器

Arm 系列处理器 是英国Arm 公司设计的主流嵌入式32 位RISC 处理器,Arm 公司不直接生产Arm 处理器,而是采用IP 授权的方式由第3 方开发生产,著名的公司如Ti 、Samsung 等都有出品Arm 处理器。目前在手机领域广泛应用。

 

avr32 处理器

Avr32 处理器美国 Atmel 公司设计开发的32 位RISC 处理器, 设计目的是在每一个时钟周期内完成更多处理工作,从而在较低的时钟频率下实现相同的吞吐量。适合在工业控制、汽车电子等嵌入式设备领域中使用。Avr32 属于MCU 型的处理器。

 

blackfin 处理器

Blackfin 处理器是美国ADI 公司开发的具有DSP 能力的 32 位RISC 处理器, Blackfin 处理器基于由 ADI 和 Intel 公司联合开发的微信号架构 (MSA ), 适用于 嵌入式音频、视频和通信应用等领域。

 

cris 处理器

Cris 处理器是 瑞典 Axis 通信公司开发的32 位RISC 处理器,主要用于网络设备,属于比较专业的应用领域。因为 Axis 通信公司主要开发网络监控设备,所以 Cris 处理器在其网络监控设备中应用广泛。

 

frv 处理器

Frv 处理器是 日本富士通开发的32 位高性能RISC处理器, 采用VLIW (Very Long Instruction Word )构架,具备良好的多媒体处理能力,在机顶盒(STB )、数码刻录机(DVR )、数码相机(DSC)等嵌入式领域应用广泛。

 

h8300 处理器

H8300 处理器是 日本瑞萨科技开发的32 位高性能RISC 处理器, 具有强大的位操作指令,最适于实时控制应用如汽车电子、家用电器、医疗器械等领域。H8300 属于MCU 型的处理器。

 

ia64 处理器

Ia64 处理器是 美国英特尔开发的面向服务器应用的64 位处理器, 由于具有64 位寻址能力,它能够使用100 万TB 的地址空间,足以运算企业级或超大规模的数据库任务;64 位宽的寄存器可以使CPU 浮点运算达到非常高的精度。

 

m32r 处理器

M32r 处理器是 日本瑞萨科技开发的32 位高性能RISC 处理器, 内置大容量存储器,适用于车载系统、数字AV 设备、数字成像设备等产品领域。属于MCU 型的处理器。

 

m68k 处理器

M68k 处理器是美国 Motorola 公司开发的高性能处理器, 具有高性价比、高集成度等特点,在工业自动化设备、控制设备、医疗仪器系统、安全系统等领域多有应用。现在为Freescale 公司所有, 风头已不敌PowerPC 处理器。

 

microblaze 处理器

Microblaze 处理器是美国 Xilinx 公司提供的嵌入在其FPGA 芯片上的32 位RISC 软核。 它具有运算能力强、外围接口配置灵活等特点,集成在 FPGA之中,可以和FPGA 实现协同设计,具备软硬件可配置的灵活性。

 

mips 处理器

Mips 处理器 是由美国斯坦福大学Hennessy 教授领导的研究小组研制出来, 现为Mips 公司拥有,和Arm 处理器一样采用IP 授权的方式由第3 方开发生产。著名的公司如Broadcom 、Nxp 等都有出品Mips处理器。我国的龙芯CPU 也是采用Mips 体系结构。

 

mn10300 处理器

Mn10300 处理器 日本松下开发的32 位多媒体处理器。

 

parisc 处理器

Parisc 处理器是由 HP (惠普)开发设计的处理器,主要用于HP (惠普)公司的服务器中,目前HP(惠普)已经放弃 Parisc 处理器的开发,不过一些Parisc 处理器技术已经融合到ia64 处理器之中。

 

powerpc 处理器

Powerpc 处理器是由美国IBM 、Apple 、Motorola 联合开发的处理器,Powepc 处理器在IBM 的服务器、Apple 的MAC 电脑中都有应用。不过现在多应用在网络设备、视频系统、工业系统等领域。Sony PS3 游戏机Cell 处理器也是Powerpc 体系结构。

 

s390 处理器

S390 处理器是由美国IBM 开发的面向大型机应用的处理器 。

 

score 处理器

Score 处理器是由台湾 凌阳开发的32 位RISC 处理器。Score 属于MCU 型的处理器。

 

sh 处理器

Sh 处理器又称SuperH 处理器 ,最先由日本Hitachi 公司开发,后由 Hitachi 及 ST Microelectronics 两家公司共同开发,2003 年 瑞萨科技从 Hitachi 公司继承到拥有权。Sh 属于MCU 型的处理器。

 

sparc 处理器

Sparc 处理器是由美国SUN 和TI 公司共同开发的RISC 微处理器,最突出的特点就是它的可扩展性。SUN 公司将它做为高端处理器应用到服务器产品。

 

x86 处理器

X86 处理器是由美国Intel 推出的 复杂指令集(cisc ) 处理器,广泛应用在PC 电脑领域和服务器领域,在工业控制领域也有应用。目前主要是Intel、AMD 、VIA 在开发x86 体系结构的处理器。

 

xtensa 处理器

Xtensa 处理器是由美国 Tensilica (泰思立达)公司开发的可配置及可扩展的微处理器

Advertisements

编译busybox

在openSuSE11.2  上编译 ,采用静态编译的方式。

最后链接的阶段报错:

  LINK    busybox_unstripped
Trying libraries: crypt m
Failed: -Wl,–start-group -lcrypt -lm -Wl,–end-group
Output of:
gcc -Wall -Wshadow -Wwrite-strings -Wundef -Wstrict-prototypes -Wunused -Wunused-parameter -Wunused-function -Wunused-value -Wmissing-prototypes -Wmissing-declarations -Wdeclaration-after-statement -Wold-style-definition -fno-builtin-strlen -finline-limit=0 -fomit-frame-pointer -ffunction-sections -fdata-sections -fno-guess-branch-probability -funsigned-char -static-libgcc -falign-functions=1 -falign-jumps=1 -falign-labels=1 -falign-loops=1 -Os -static -o busybox_unstripped -Wl,–sort-common -Wl,–sort-section,alignment -Wl,–start-group applets/built-in.o archival/lib.a archival/libarchive/lib.a console-tools/lib.a coreutils/lib.a coreutils/libcoreutils/lib.a debianutils/lib.a e2fsprogs/lib.a editors/lib.a findutils/lib.a init/lib.a libbb/lib.a libpwdgrp/lib.a loginutils/lib.a mailutils/lib.a miscutils/lib.a modutils/lib.a networking/lib.a networking/libiproute/lib.a networking/udhcp/lib.a printutils/lib.a procps/lib.a runit/lib.a selinux/lib.a shell/lib.a sysklogd/lib.a util-linux/lib.a util-linux/volume_id/lib.a archival/built-in.o archival/libarchive/built-in.o console-tools/built-in.o coreutils/built-in.o coreutils/libcoreutils/built-in.o debianutils/built-in.o e2fsprogs/built-in.o editors/built-in.o findutils/built-in.o init/built-in.o libbb/built-in.o libpwdgrp/built-in.o loginutils/built-in.o mailutils/built-in.o miscutils/built-in.o modutils/built-in.o networking/built-in.o networking/libiproute/built-in.o networking/udhcp/built-in.o printutils/built-in.o procps/built-in.o runit/built-in.o selinux/built-in.o shell/built-in.o sysklogd/built-in.o util-linux/built-in.o util-linux/volume_id/built-in.o -Wl,–end-group -Wl,–start-group -lcrypt -lm -Wl,–end-group
==========
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: cannot find -lcrypt
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: cannot find -lm
collect2: ld returned 1 exit status
make: *** [busybox_unstripped] Error 1
在centos 5.6 上编译 ,采用静态编译的方式。以及在openSuSE11.2  交叉编译到mipsel 平台上 ,采用静态编译的方式,却都没有问题。
看到-lXXX 的错误我就想到so没有链接正确,对比openSuSE 和CentOS  ldconfig如下:

libm.so.6 (libc6,x86-64, OS ABI: Linux 2.6.16) => /lib64/libm.so.6
libm.so.6 (libc6, OS ABI: Linux 2.6.16) => /lib/libm.so.6
libm.so (libc6,x86-64, OS ABI: Linux 2.6.16) => /usr/lib64/libm.so

libm.so.6 (libc6,x86-64, OS ABI: Linux 2.6.9) => /lib64/libm.so.6
libm.so.6 (libc6, hwcap: 0x0018000000000000, OS ABI: Linux 2.6.9) => /lib/i686/nosegneg/libm.so.6
libm.so.6 (libc6, OS ABI: Linux 2.6.9) => /lib/libm.so.6
libm.so (libc6,x86-64, OS ABI: Linux 2.6.9) => /usr/lib64/libm.so
libm.so (libc6, OS ABI: Linux 2.6.9) => /usr/lib/libm.so

貌似openSuSE 缺少libm.so 的x86 链接 ,于是ln -s /lib/libm.so.6 /usr/lib/libm.so  但问题依旧。

另外一个就是红色标注的那个了,我尝试在CentOS 中删除这个链接,好像也不影响编译。
后来无意间发现CentOS 及 mips编译链中都有libm.a ,在想到我编译busybox为静态方式 。所以… 赶紧find 下openSuSE的库文件,果然没有libm.a 。 用rpm -qf 找到libm.a 属于CentOS 的glibc-devel 包 ,但在openSuSE 下属于glibc-devel-static包 ~~~ 这个真是把人害苦了。
接下来继续报错:
networking/lib.a(nslookup.o): In function `print_host’:
nslookup.c:(.text.print_host+0x3f): warning: Using ‘getaddrinfo’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
networking/lib.a(ipcalc.o): In function `ipcalc_main’:
ipcalc.c:(.text.ipcalc_main+0x201): warning: Using ‘gethostbyaddr’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
util-linux/lib.a(mount.o): In function `nfsmount’:
mount.c:(.text.nfsmount+0xd4): warning: Using ‘gethostbyname’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
networking/lib.a(inetd.o): In function `reread_config_file’:
inetd.c:(.text.reread_config_file+0x75b): warning: Using ‘getservbyname’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
networking/lib.a(netstat.o): In function `ip_port_str’:
netstat.c:(.text.ip_port_str+0x3e): warning: Using ‘getservbyport’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
networking/lib.a(inetd.o): In function `reread_config_file’:
inetd.c:(.text.reread_config_file+0x6dd): warning: Using ‘getrpcbyname’ in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
networking/lib.a(inetd.o): In function `unregister_rpc’:
inetd.c:(.text.unregister_rpc+0x1f): undefined reference to `pmap_unset’
networking/lib.a(inetd.o): In function `register_rpc’:
inetd.c:(.text.register_rpc+0x57): undefined reference to `pmap_unset’
inetd.c:(.text.register_rpc+0x73): undefined reference to `pmap_set’
networking/lib.a(inetd.o): In function `prepare_socket_fd’:
inetd.c:(.text.prepare_socket_fd+0x7e): undefined reference to `bindresvport’
util-linux/lib.a(mount.o): In function `xdr_fhstatus’:
mount.c:(.text.xdr_fhstatus+0xb): undefined reference to `xdr_u_int’
mount.c:(.text.xdr_fhstatus+0x2a): undefined reference to `xdr_opaque’
util-linux/lib.a(mount.o): In function `xdr_dirpath’:
mount.c:(.text.xdr_dirpath+0x6): undefined reference to `xdr_string’
util-linux/lib.a(mount.o): In function `xdr_mountres3′:
mount.c:(.text.xdr_mountres3+0xa): undefined reference to `xdr_enum’
mount.c:(.text.xdr_mountres3+0x29): undefined reference to `xdr_bytes’
mount.c:(.text.xdr_mountres3+0x42): undefined reference to `xdr_int’
mount.c:(.text.xdr_mountres3+0x50): undefined reference to `xdr_array’
util-linux/lib.a(mount.o): In function `nfsmount’:
mount.c:(.text.nfsmount+0x845): undefined reference to `pmap_getmaps’
mount.c:(.text.nfsmount+0x9de): undefined reference to `clntudp_create’
mount.c:(.text.nfsmount+0xa2f): undefined reference to `clnttcp_create’
mount.c:(.text.nfsmount+0xa56): undefined reference to `clnt_spcreateerror’
mount.c:(.text.nfsmount+0xa68): undefined reference to `authunix_create_default’
mount.c:(.text.nfsmount+0xaeb): undefined reference to `clnt_sperror’
mount.c:(.text.nfsmount+0xb12): undefined reference to `clnt_sperror’
mount.c:(.text.nfsmount+0xca5): undefined reference to `bindresvport’
mount.c:(.text.nfsmount+0xcee): undefined reference to `pmap_getport’
collect2: ld returned 1 exit status
make: *** [busybox_unstripped] Error 1
 
好像是和glibc版本过高有关,找不到相关函数,这个好办,make menuconfig 去掉如下选项
Linux System Utilities  —>  [ ]   Support mounting NFS file systems 网络文件系统
Networking Utilities  —> [ ] inetd (Internet 超级服务器 )
然后就ok 了,不过这两个错误在CentOS 和mispel 交叉编译链中都没有出现。

yast 使用 proxy

step 1.

edit:  /etc/sysconfig/proxy

step 2.

run this :

export ZYPP_ARIA2C=0
yast

ddwrt ipkg问题

搜了一下,几乎都提到要起用jffs ,其实关键的是“服务” 中挂在usb 到/jffs ,因为即使用mount -o bind 好像也无法让 ipkg正常工作。 如果要把ddwrt 的软件环境搞成和openwrt 差不多,可以参考这个 http://www.dd-wrt.com/wiki/index.php/Optware

这篇文章中最重要的是这个脚本:http://www.3iii.dk/linux/optware/optware-install-ddwrt.sh

wget 后直接执行后它实际上就是装两个包 ipkg-opt 和 uclibc-opt ,前面的依赖后面的。如果后面的不装,ipkg-opt 执行的时候将提示ipkg-opt 找不到,其实不是找不到而是缺少uclibc ,无法执行。貌似ddwrt 下的busybox 环境只要缺少库文件就报某程序找不到 ,把我给耍到了。ipkg-opt 最大的改进是把设置目录改到/opt/etc 这样就可以写了。另外它还增加了一些功能选项。

 

bash 中的IFS

这个符号比较特殊用echo ${IFS} 是不会打印出IFS 符号的,要用echo “${IFS}” 才能显示哦。

设置IFS 要用 IFS=’,’ 或IFS=”,” 设置