eFuse技术

近日从Hexus网站传出消息,ATI宣布已经开发出名为eFuse的芯片控制技术,这种特殊的技术可以对芯片的特定部分提供更高的控制权,使芯片能够对自身进行监控、调节和修复,能够在系统需要或出现故障时进行自我动态调整。最终结果就是芯片的智能程度更高、同时也能提高产能! 

    eFuse技术的原理就是在设计之初,为每一块芯片上增加了大量的微电溶丝,它们与特定的随机软件结合时,eFuse可使芯片分配自身内部电路以应对不同计算任务,或者增加芯片的运算频率。这种微电溶丝被焊接在芯片上而无需增加成本,它的功能是控制各个电路的速度,从而可以管理电路性能与电力消耗。 

    eFuse还可以随意的彻底切断芯片内某些缓存或者是功能模块,当然不会影响到其他部分的正常运行。因此eFuse技术能够更加合理的利用瑕疵芯片、或者是动态关闭芯片功能从而大幅降低功耗(比如移动GPU)。 

GPU产能/智能更高!ATI开发eFuse技术 

    eFuse的这种功能有助于修复芯片的某些缺陷或围绕缺陷做善后工作。例如,当芯片电路运行过快或过慢时,微电溶丝可以改变电路的电压或者提高和减缓速度,以适应任务的需要。或者是干脆关闭这些有问题的模块,从而衍生出不同规格的产品。目前广泛应用在GPU上面的屏蔽管线技术仅仅是“屏蔽”,实际上被屏蔽的部分还是要消耗一部分电力的。如果芯片的作用被改变,用户需要芯片用较少电力,或者是让芯片发挥出较强的性能,此时eFuse技术可被用于对芯片重新编程。 

    实际上几年前IBM公司就提出了eFuse技术的概念,不过eFuse技术需要90nm或者更先进工艺的支持
什么是eFuse? 

  eFuse的诞生源于几年前IBM工程师的一个发现:与更旧的激光熔断技术相比,电子迁移(EM)特性可以用来生成小得多的熔丝结构。EM熔丝可以在芯片上编程,不论是在晶圆探测阶段还是在封装中。采用I/O电路的片上电压(通常为2.5V),一个持续200微秒的10毫安直流脉冲就足以编程单根熔丝。 

  不同于大多数FPGA使用的SRAM阵列,eFuse一次只有一根熔丝能够被编程,这是该方法的配置能力存在限制范围的原因。但当与日益成熟的内置自测试(BIST)引擎组合使用时,这些熔丝就变成了强大的工具,能减少测试和自修复的成本,而这正是复杂芯片设计所面临的重大挑战。  

  eFuse就好像在硅片上建立了无数个交通岗哨,控制信号的传输或停止,据悉这将把芯片中的电路运行效率提高上千倍。这种功能将会为电子领域带来一种“大规模市场效应。”FPGA提供商加州Xilinx公司CTO里奥.波尔森先生表示:“比如您购买了一个新的控制器,最开始的时候控制器的功能是空的,不过在把它带回家后,它重新识别了您家中的所有系统,电视、音响、DVD、并且自动对自身进行改造,来控制这些电器。”

关于UNIX标准 /Linux /POSIX

关于UNIX标准

POSIX(Portable Operating System Interface)是由IEEE制定的标准,致力于统一各种UNIX系统的接口,促进各种UNIX系统向互相兼容的发向发展。IEEE 1003.1(也称为POSIX.1)定义了UNIX系统的函数接口,既包括C标准库函数,也包括系统调用和其它UNIX库函数。POSIX.1只定义接口而不定义实现,所以并不区分一个函数是库函数还是系统调用,至于哪些函数在用户空间实现,哪些函数在内核中实现,由操作系统的开发者决定,各种UNIX系统都不太一样。IEEE 1003.2定义了Shell的语法和各种基本命令的选项等。本书的第三部分不仅讲解基本的系统函数接口,也顺带讲解Shell、基本命令、帐号和权限以及系统管理的基础知识,这些内容合在一起定义了UNIX系统的基本特性。

在UNIX的发展历史上主要分成BSD和SYSV两个派系,各自实现了很多不同的接口,比如BSD的网络编程接口是socket,而SYSV的网络编程接口是基于STREAMS的TLI。POSIX在统一接口的过程中,有些接口借鉴BSD的,有些接口借鉴SYSV的,还有些接口既不是来自BSD也不是来自SYSV,而是凭空发明出来的(例如本书要讲的pthread库就属于这种情况),通过Man Page的COMFORMING TO部分可以看出来一个函数接口属于哪种情况。Linux的源代码是完全从头编写的,并不继承BSD或SYSV的源代码,没有历史的包袱,所以能比较好地遵照POSIX标准实现,既有BSD的特性也有SYSV的特性,此外还有一些Linux特有的特性,比如epoll(7),依赖于这些接口的应用程序是不可移植的,但在Linux系统上运行效率很高。

POSIX定义的接口有些规定是必须实现的,而另外一些是可以选择实现的。有些非UNIX系统也实现了POSIX中必须实现的部分,那么也可以声称自己是POSIX兼容的,然而要想声称自己是UNIX,还必须要实现一部分在POSIX中规定为可选实现的接口,这由另外一个标准SUS(Single UNIX Specification)规定。SUS是POSIX的超集,一部分在POSIX中规定为可选实现的接口在SUS中规定为必须实现,完整实现了这些接口的系统称为XSI(X/Open System Interface)兼容的。SUS标准由The Open Group维护,该组织拥有UNIX的注册商标(http://www.unix.org/),XSI兼容的系统可以从该组织获得授权使用UNIX这个商标。

tcpdump参数及使用介绍

tcpdump -i eth0 -s0 -x tcp port  9999 host 
tcpdump  -s0 -x tcp port  3306,8001
tcpdump -s0 -x -vv -n
tcpdump tcp port 8001 -vvv -xxx -tttt -s0 -n 
tcpdump tcp port 9999 -vvv -xxx -tttt -s400 -n 
tcpdump udp port 9999 -vvv -xxx -tttt -s400 -n 
tcpdump -vvv -s 0 -n -Ai eth0 port 80 and tcp and  host 192.168.1.99

参数解释
 -a    将网络地址和广播地址转变成名字;
   -d    将匹配信息包的代码以人们能够理解的汇编格式给出;
   -dd    将匹配信息包的代码以c语言程序段的格式给出;
   -ddd   将匹配信息包的代码以十进制的形式给出;
   -e    在输出行打印出数据链路层的头部信息;
   -f    将外部的Internet地址以数字的形式打印出来;
   -l    使标准输出变为缓冲行形式;
   -n    不把网络地址转换成名字;
   -t    在输出的每一行不打印时间戳;
   -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
   -vv    输出详细的报文信息;
   -c    在收到指定的包的数目后,tcpdump就会停止;
   -F    从指定的文件中读取表达式,忽略其它的表达式;
   -i    指定监听的网络接口;
   -r    从指定的文件中读取包(这些包一般通过-w选项产生);
   -w    直接将包写入文件中,并不分析和打印出来;
   -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp


tcpdump的参数介绍
   -a    将网络地址和广播地址转变成名字;
   -d    将匹配信息包的代码以人们能够理解的汇编格式给出;
   -dd    将匹配信息包的代码以c语言程序段的格式给出;
   -ddd    将匹配信息包的代码以十进制的形式给出;
   -e    在输出行打印出数据链路层的头部信息;
   -f    将外部的Internet地址以数字的形式打印出来;
   -l    使标准输出变为缓冲行形式;
   -n    不把网络地址转换成名字;
   -t    在输出的每一行不打印时间戳;
   -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
   -vv    输出详细的报文信息;
   -c    在收到指定的包的数目后,tcpdump就会停止;
   -F    从指定的文件中读取表达式,忽略其它的表达式;
   -i    指定监听的网络接口;
   -r    从指定的文件中读取包(这些包一般通过-w选项产生);
   -w    直接将包写入文件中,并不分析和打印出来;
   -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议)
        -p         指定协议tcp,udp,icmp,arp
        -s         指定捕获数包字的大小,单位byte,默认96最大65536


可使用关键字:

协议,-p tcp,udp,icmp,arp等
数据包:dst,src,port,dst port,src port,host
运算符:or and not(!)
多条件:dst \(172.16.1.1 or 172.16.1.13 \) 用括号及\转义

在进行嗅探的时候,必须置于混杂模式才能嗅探,系统会有日志记录
grep "promiscuous" /var/log/messages //混杂模式

用TCPDUMP捕获的TCP包的一般输出信息是:
  src.port > dst.port: flags data-Seq ack win urgent options

  src.port > dst.port: 源地址.源端口 到 目的地址.目的端口
      flags:                 TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH)
                           R (RST) "." (没有标记)
    
      data-Seq:      是数据包中Sequence number(顺序号码)
      ack:              Acknowledge number(确认号码) 
      window是接收缓存的窗口大小, 
      urgent表明数据包中是否有紧急指针.

注tcp标志位:
SYN(synchronous建立联机) ACK(acknowledgement 确认) 
PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)

查看icmp包:
1,tcpdump -i eth0 -p icmp    (and src 192.168.1.xxx)

查看广播包:
2,tcpdump -i eth0 -p broadcast

查看arp包
3,tcpdump -i eth0 -p arp

4,tcpdump -X -i eth0 -p tcp port 21 //嗅探21端口数据并解包
获取ftp密码实例:
tcpdump -X -i eth0 -p tcp port 21 > 21.log &
cat 21.log | grep "USER\."
cat 21.log | grep "PASS\."

更精确的嗅探:
嗅探从172.16.1.1到172.16.1.2端口为21的数据包:
tcpdump -i eth0 -X -tnn -p tcp and src 172.16.1.1 and dst 172.16.1.2 and port 21

5.tcpdump -X -n -p tcp dst port 80 //嗅探80端口数据,并解包 (加-t就不显示时间)

6.tcpdump -i eth0 host 202.96.128.68 //指定主机

7,//嗅探从172.16.1.2到172.16.1.1 或者172.16.1.13的数据包
tcpdump -i eth0 -tnn src 172.16.1.2 and dst \(172.16.1.1 or 172.16.1.13 \)

8,利用tcpdump统计各类数据包:

//统计1000个数据包中的ip连接量,并按从多到少的顺序排序,列出前3名
tcpdump -i ethp -tnn -c 1000 | awk -F "." "{print $1"."$2"."$3"."$4}' | sort | uniq -c |sort -nr | head -n 3//按从大到小的顺

序排序并列出并三名

tcpdump -i ethp -tnn -c 1000 | awk -F "." "{print $1"."$2"."$3"."$4}' | sort | uniq -c | awk '$1 > 100'//显示大于100数据包

sort:排序 -nr 从大到小 -rn 从小到大
uniq -c:过滤重复并在前面打印重复的行数
awk '$1 > 100':如果$1参数(数字)大于100
head -n 3:显示头3行

9,tcpdump -i eth0 -tnn host 192.168.1.100 and -p tcp or udp or icmp    //嗅探所有 tcp,udp,icmp消息所不转换网络名称(加快速度)

10,嗅探dhcp服务器的ip(捕获非法DHCP Server):
tcpdump -i eth0 -tnn port 67
然后用dhclient eth0进行dhcp请求,捉dhcp server的ip地址
或者直接看日志啦cat /var/messages | grep "DHCPACK from"

configure交叉编译

分类: Tools


交叉编译某个应用程序时,通常需要 ./configure 来生成对应的 Makefile
./configure 最关键的三个选项是:

--host=HOST
指定软件运行的系统平台.如果没有指定,将会运行`config.guess'来检测.

--build=BUILD
指定软件包安装的系统平台.如果没有指定,默认值将是'--host'选项的值.

--target=GARGET
指定软件面向(target to)的系统平台.这主要在程序语言工具如编译器和汇编器上下文中起作用.如果没有指定,默认将使用'--host'选项的值. 

一般而言,我们只要指定 --host 就可以了
记住:--host 指定的是交叉编译工具链的前缀

##################################################################################################################################

在 i686 开发机上交叉编译出 ethtool,让其在powerpc开发板上运行

1.下载源代码并解压
#cd /home/wanghui/
#tar xvfz ethtool-6.tar.gz
#cd ethtool-6

2.交叉编译
确保交叉编译工具链的bin文件在PATH环境变量里
#echo $PATH
/usr/local/bin:/bin:/usr/bin:/opt/montavista41/montavista/cge/devkit/ppc/85xx/bin/:/home/wanghui/bin
#./configure --host=ppc-linux
#make

3.查看生成文件
#file ethtool
ethtool: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped

shit! 交叉编译失败,肿么还是X86的bin文件,肯定是configure出了问题,导致Makefile用的不是交叉编译工具链的gcc

4.查看config.log

有这么一句:
configure:1790: checking for ppc-linux-gcc
configure:1819: result: no
configure:1828: checking for gcc
configure:1844: found /usr/bin/gcc

我擦,没找到ppc-linux-gcc
cd /opt/montavista41/montavista/cge/devkit/ppc/85xx/bin
到里面一看,崩溃了,原来是 ppc_85xx-gcc,所有bin文件前缀是 ppc_85xx

5.重新交叉编译
#./configure --host=ppc_85xx
#make

6.查看生成文件
#file ethtool
ethtool: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

查看cofig.log
configure:1662: checking for ppc_85xx-strip
configure:1678: found /opt/montavista41/montavista/cge/devkit/ppc/85xx/bin//ppc_85xx-strip
configure:1688: result: ppc_85xx-strip
configure:1757: checking whether to enable maintainer-specific portions of Makefiles
configure:1766: result: no
configure:1790: checking for ppc_85xx-gcc
configure:1806: found /opt/montavista41/montavista/cge/devkit/ppc/85xx/bin//ppc_85xx-gcc
configure:1816: result: ppc_85xx-gcc


7.把ethtool文件放到开发板下运行,OK