本文主要简单记录C6000在启动装载过程和中断向量表的配置。
1. Bootloader
如上图,
(1)在Device Reset阶段:
设备初始化为默认状态,大部分三态输出都配置为高阻态。
(2)在CPU Reset阶段:
从RS上升沿处开始(这个时候,根据HD[4:3]配置启动模式,HD8配置大小端模式,CLKMODE配置输入时钟源,根据HPI_EN配置外设功能),处理器检查启动模式HD[4:3],启动bootloader程序。
EDMA自动将CE1开始位置的1KB代码拷贝到内部程序存储器的0地址。
(3)RESET信号恢复高电平,CPU从内存0地址处开始运行程序
2. Interrupt Vector Table(Interrupt Service Table, IST)
处理器在RESET为低电平时复位,在RESET的上升沿,启动配置被锁定,开始从0地址处执行程序。一旦ROM启动完成(将外部ROM的1KB程序拷贝到内存0地址完成),寄存器初始化为默认值,程序计数器PC装载复位中断向量(复位中断向量需要在0地址处),CPU开始从0地址开始执行,这个地址称为复位向量。
默认的,中断服务表(IST)也在0地址处。IST是中断向量的一个集合,当CPU中断发生时,PC自动通过中断向量跳转到对应的中断服务程序。每个中断向量都是8个字(WORD)对齐。IST可以重映射到任意的以0x4000-byte对齐的位置,但需要修改中断服务表指针(ISTP),在复位时,ISTP初始化为0值,IST首地址与复位向量对齐。
(1)创建中断向量表
IST由32个服务向量组成,每个向量对应一个CPU中断,特殊的:中断号0对应复位向量,中断号1对应不可屏蔽中断(NMI)。中断4~15对应各种信号事件的中断。中断号为n的中断向量的地址为
比如,ISTP重定位到0x1000,中断号为4的中断向量地址为Addr=0x1000+0x20*4=0x1080。
每个中断向量必须在8条指令内完成,若无法在8条指令内完成,必须将一些工作放到中断服务程序(Interrupt Service Routine, ISR)中完成。
.sect vectors RESET: MVK .S2 Start, B0 ; Load Start address MVKH .S2 Start, B0 ; Load Start address B .S2 B0 ; Branch to start NOP NOP NOP NOP NOP NMI_ISR: MVK .S2 Nmi_isr, B0 MVKH .S2 Nmi_isr, B0 B .S2 B0 NOP NOP NOP NOP NOP上面是包含了复位和不可屏蔽中断的中断向量表的一个例子,主要是完成一个跳转到中断服务程序的功能。
(2)中断服务程序(ISR)
当使用-c或-cr链接器选项时,DSP的C编译器自动的创建了函数_c_int00,这个函数对应C程序的入口地址,复位向量必须跳转到_c_int00地址处。当C程序遇到一个CPU中断时,在中断向量表中或中断服务程序中要使用的CPU寄存器都将先被压入堆栈,一旦中断服务程序完成,堆栈中的值弹出到对应的寄存器,继续执行原C程序。
中断服务程序需要使用关键字interrupt声明,
interrupt void myISR(void) { /* Code for myISR */ … }
中断服务程序没有返回值,也没有参数,interrupt的功能就是在执行该中断服务程序前自动将寄存器压栈,执行完后自动的弹栈。
********************************************************************************* * vecs.asm * Copyright 2003 by SEED Electronic Technology Ltd. * All rights reserved. Property of SEED Electronic Technology Ltd. * * Designed by: Hongshuai.Li * ********************************************************************************* *------------------------------------------------------------------------------ * Global symbols defined here and exported out of this file *------------------------------------------------------------------------------ .global _vectors .global _c_int00 .global _vector1 .global _vector2 .global _vector3 .global _vector4 .global _vector5 .global _vector6 .global _vector7 .global _c_int08 ; Hookup the c_int08 ISR in main() .global _vector9 .global _vector10 .global _vector11 .global _vector12 .global _vector13 .global _vector14 .global _vector15 *------------------------------------------------------------------------------ * Global symbols referenced in this file but defined somewhere else. * Remember that your interrupt service routines need to be referenced here. *------------------------------------------------------------------------------ .ref _c_int00 *------------------------------------------------------------------------------ * This is a macro that instantiates one entry in the interrupt service table. *------------------------------------------------------------------------------ VEC_ENTRY .macro addr STW B0,*--B15 MVKL addr,B0 MVKH addr,B0 B B0 LDW *B15++,B0 NOP 2 NOP NOP .endm *------------------------------------------------------------------------------ * This is a dummy interrupt service routine used to initialize the IST. *------------------------------------------------------------------------------ _vec_dummy: B B3 NOP 5 *------------------------------------------------------------------------------ * This is the actual interrupt service table (IST). It is properly aligned and * is located in the subsection .text:vecs. This means if you don't explicitly * specify this section in your linker command file, it will default and link * into the .text section. Remember to set the ISTP register to point to this * table. *------------------------------------------------------------------------------ .sect ".text:vecs" .align 1024 _vectors: _vector0: VEC_ENTRY _c_int00 ;RESET _vector1: VEC_ENTRY _vec_dummy ;NMI _vector2: VEC_ENTRY _vec_dummy ;RSVD _vector3: VEC_ENTRY _vec_dummy _vector4: VEC_ENTRY _vec_dummy _vector5: VEC_ENTRY _vec_dummy _vector6: VEC_ENTRY _vec_dummy _vector7: VEC_ENTRY _vec_dummy _vector8: VEC_ENTRY _c_int08 ; Hookup the c_int08 ISR in main() _vector9: VEC_ENTRY _vec_dummy _vector10: VEC_ENTRY _vec_dummy _vector11: VEC_ENTRY _vec_dummy _vector12: VEC_ENTRY _vec_dummy _vector13: VEC_ENTRY _vec_dummy _vector14: VEC_ENTRY _vec_dummy _vector15: VEC_ENTRY _vec_dummy *------------------------------------------------------------------------------ ******************************************************************************** * End of vecs.asm ********************************************************************************上面是一个实际使用的C6713的中断向量表的汇编文件(vecs.asm),其中定义了全部15个中断向量,复位向量跳转到_c_int00地址,8号中断向量跳转到_c_int08函数地址,在C主程序中应该做如下定义,
/* * interrupt function */ interrupt void c_int08(void) { }另外,由于在C程序中的PC跳转到中断向量地址是远跳转,因此有时需要在C程序中声明中断向量地址为远地址,如下,
项目编号
编写人 成
编写日期 2013/07/29
审核
修订说明
目录
JDK6、ORACLE11G、WEBLOGIC10 FOR LINUX64BIT安装部署说明 1
1. JDK 1.6.0_37 FOR LINUX安装 3
1.1 下载JDK1.6 FOR LINUX 64-BIT版本 3
1.2 安装JDK6 3
1.3 设置环境变量 4
2. ORACLE11G FOR RADHAT6.4安装说明 5
2.1 系统: 5
2.2 检查基本需求 5
2.3 检查RPM支持包,没有的需要手动补全安装 6
2.4 配置内核文件(SYSCTL.CONF) 7
2.5 编辑参数文件( /ETC/SECURITY/LIMITS.CONF) 9
2.6 编辑 文件(/ETC/PAM.D/LOGIN) 9
2.7 编辑 文件(/ETC/PROFILE) 9
2.8 创建操作系统用户,作为软件安装和支持组的拥有者 10
2.9 创建软件安装目录 10
2.10 编辑文件( /HOME/ORACLE/.BASH_PROFILE) 10
2.11 配置好参数之后,重启操作系统 11
2.12 以ROOT身份打开另一个终端窗口 11
2.13 ORACLE用户安装数据库 11
2.14 XMANAGER ENTERPRISE 4安装ORACLE图形界面 11
2.15 遇到的问题: 13
问题1: 13
解决: 13
问题2: 14
解决: 14
3. WEBLOGIC10.3安装 15
3.1 检测JAVA运行环境 15
3.2 获取WEBLOGIC10.3安装文件 15
3.3 集群组成 15
3.4 执行 15
3.5 WEBLOGIC集群安装部署 21
3.6 配置数据源 30
3.7 配置JMS模块 34
4. INFORMATICA安装 39
4.1 安装INFA系统要求 39
4.2 ORACLE数据库配置 39
4.3 安装INFA SERVERS 41
1. JDK 1.6.0_37 For Linux安装
1.1 下载jdk1.6 for linux 64-Bit版本
按照操作系统版本选择下载,例子是jdk-6u37-linux-x64.bin,JDK1.6 Linux64-bit。并通过CuteFTP 工具传输到/usr/local/jdk目录。(注○注 此处CuteFTP配置协议的时候,需要配置SSH2协议,如果选择默认的FTP协议时,还需要其他配置.@新手)
先卸载RedHat5.7自带的jdk1.4.2
用root用户登录到系统
# rpm –qa | grep gcj
java-1.4.2-gcj-compat-1.4.2.0-27jpp
java-1.4.2-gcj-compat-devel-l.4.2.0-27jpp
卸载
# rpm -e java-1.4.2-gcj-compat-devel-l.4.2.0-27jpp
# rpm -e java-1.4.2-gcj-compat-l.4.2.0-27jpp
1.2 安装jdk6
#cd /usr/local
#mkdir jdk
#cd jdk
给所有用户添加可执行的权限
#chmod +x jdk-6u37-linux-x64.bin
#./jdk-6u37-linux-x64.bin
有提示就y(yes)
1.3 设置环境变量
#vi /etc/profile
在有export PATH的后面加入:
#set java path
export JAVA_HOME=/usr/local/jdk/jdk1.6.0_37
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin
保存退出。
检查JDK是否安装成功
java –version
最终要的结果,就成功了。
2. Oracle11g For RadHat6.4安装说明
2.1 系统:
操作系统: Red Hat Enterprise Linux 5 64-Bit
数据库版本: Oracle Database 11g R1 x64Bit
2.2 检查基本需求
安装Oracle需要基本条件
查看内存信息 1.0G
grep MemTotal /proc/meminfo
交换分区大小 2.9G,swap空间是内存的2倍以上
grep SwapTotal /proc/meminfo
没有的话就增加交换空间,可增加交换分区
创建/home/swap这么一个分区文件。文件的大小是5120000个block,一般情况下1个block为1K,所以这里空间是5G,实际需要占空间5.2G。
执行命令:
dd if=/dev/zero of=/home /swap bs=1024 count=5120000
接着再把这个分区变成swap分区。
mkswap –f /home /swap 参数-f 是格式化swap分区(必须的)
生效
swapon swap
然后把它加到fstab里面
echo "/home/ swap swap swap defaults 0 0" >> /etc/fstab
如下图:
防火墙基本配置
无防火墙
是否禁用SELinux:禁用
2.3 检查rpm支持包,没有的需要手动补全安装
Oracle Database 11g R1 x64Bit需要的全部补丁如下(经我安装一次失败截图下来整理共需要如下的包):
rpm -q elfutils-libelf-devel glibc-headers gcc-c++ libaio-devel libstdc++-devel sysstat unixODBC unxiODBC-devel glibc-devel make bintuils gcc libaio libaio-devel glic compat-libstdc elfutils-libelf glibc-devel libgcc libstdc++ ksh
本机执行后:
由于各种操作系统的差异,缺少的rpm包可以去Oracle官网上下载,如果安装OS是用光盘,那也可以到里面去找相应的rmp包。
主要问题是需要的rpm支持包之间的版本和依赖关系,如果选择在网上找,得注意选择统一的操作系统版本下的。
推荐用挂载方法:
#mkdir /mnt/cdrom/
#mount /dev/cdrom /mnt/cdrom
提示:mount:block device /dev/cdrom is write-protected,mounting read-only这个时候表示挂载成功。不要像我一样看字面意思还以为出现情况,嘘嘘。
各操作系统部一样,需要的补丁自然也不一样,以RedHat5.7本机为例:有下面补丁需要打的。
rpm -q gcc make binutils openmotif setarch compat-db compat-gcc compat-gcc-c compat-libstdc
结果如下图:
(注)由图提示有的rpm还没有安装,这个时候就需要找到相应的文件,一步一个脚印的安装确认完了。下图检查确认安装成功的包:
2.4 配置内核文件(sysctl.conf)
编辑 /etc/sysctl.conf
将以下内容添加至文件
# Kernel paramaters required by Oracle 11gR1
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
要使 /etc/sysctl.conf 更改立即生效,执行以下命令。
sysctl –p
2.5 编辑参数文件( /etc/security/limits.conf)
添加以下行:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 65536
oracle hard nofile 65536
安装Oracle会检查参数,这个地方第一列是进程名。
2.6 编辑 文件(/etc/pam.d/login)
在有session添加以下行:
session required /lib/security/pam_limits.so
session required pam_limits.so
2.7 编辑 文件(/etc/profile)
添加以下行:
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
其中oracle为安装Oracle的用户,必须指配的用户。
2.8 创建操作系统用户,作为软件安装和支持组的拥有者
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
2.9 创建软件安装目录
mkdir -p /oracle_11/app/
chown -R oracle.oinstall /oracle_11/
chmod -R 755 /oracle_11/
参数注释:chmod -R 授权[目录]及其子目录,递归地
2.10 编辑文件( /home/oracle/.bash_profile)
在有export PATH的后面 添加以下行:
export ORACLE_BASE=/oracle_11/app
export ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/db_1
export ORACLE_SID=ORAC
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
2.11 配置好参数之后,重启操作系统
#reboot
2.12 以root身份打开另一个终端窗口
#xhost +
#xhost + localhost
2.13 Oracle用户安装数据库
#su - oracle
#cd database/
#./runInstaller
如果database文件对组或者其他用户没有x(执行)权限,得授权:(切换到root)
#chmod -R 755 database
2.14 Xmanager Enterprise 4安装Oracle图形界面
可以用Xshlle>./runInstaller启动安装图形界面
需要选择的地方如下: 其他略
选择单例安装。Real Application Clusters 是安装集群数据库,示例选择单实例安装
可以选择典型安装,若要选择Oracle字符集就选择高级安装。字符集选择UTF8
2.15 遇到的问题:
问题1:
Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using 'localhost:0.0' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:59)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:58)
at java.awt.Window.<init>(Window.java:188)
at java.awt.Frame.<init>(Frame.java:315)
at java.awt.Frame.<init>(Frame.java:262)
……..
或者报Not Found Class (Swing*.java , JDK版本不同),找不到Swing包下面的类。
解决:
以root用户登录
输入命令xdpyinfo,记录下里面的name of display:后的字符串,如 name of display:127.0.0.1:1.0
在执行xhost +命令(使得所有客户都可以访问)
返回信息为:access control disabled,clients can connect from any host(正常)如果xhost +不能执行,可以输入命令export DISPLAY=:0执行一下
再执行xhost +
xhost + ip (ip机器可以使用该服务)如:127.0.0.1(localhost)
再执行xhost +
返回信息为:access control disabled,clients can connect from any host说明问题解决咯
问题2:
sqlplus / as sysdba
sqlplus: error while loading shared libraries: /oracle_11/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1: cannot restore segment prot after re
简单的Log4j使用只需要导入下面的包就可以了 // import log4j packages import org.apache.log4j.Logger; 然后你需要在类的开头写上下面一句 private final static Logger log = Logger.getLogger(ClassName.class);//注意这里写的是当前类的类名。 这样你就有了一个日志对象叫做 log,这个log有以下集中用法 log.info();//一般信息 文章转自Java中文网:http://www.javaweb.cc/ide/log4j/081413.shtml log.debug();//调试信息 log.error();//错误信息 log.warn();//警告信息 log.fatal();//致命错误信息 上面列出的就是所谓log4j的输出级别,log4j建议只使用4个级别,它们从上到下分别为 ERROR、WARN、INFO、DEBUG,假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息就不显示了。 知道了上面的内容还不够,要想很好的使用log4j你还需要配置log4j的环境。因为每个log都可以通过配置它的属性文件来达到控制日志输出的格式的目的,下面我给出一个在weblogic下使用log4j的配置过程,首先给出这个配置文件的完整信息。 #log4j.rootLogger=INFO,A1,R //这一句指定了日志输出的级别为info,A1和R分别代表日志输出到什么地方。 log4j.category.hybl_wshabcm=debug,A1,R //这一句指定了日志具体输出哪个包的信息,以及输出位置 log4j.appender.A1=org.apache.log4j.ConsoleAppender //这里指定了日志输出的第一个位置A1是控制台ConsoleAppender /* *其中,Log4j提供的appender有以下几种: *org.apache.log4j.ConsoleAppender(控制台), *org.apache.log4j.FileAppender(文件), *org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), *org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), *org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) * */ log4j.appender.A1.layout=org.apache.log4j.PatternLayout //指定A1的布局模式 /* *其中,Log4j提供的layout有以下几种: ×org.apache.log4j.HTMLLayout(以HTML表格形式布局), *org.apache.log4j.PatternLayout(可以灵活地指定布局模式), *org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), *org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) */ log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n //指定日志的输出格式 log4j.appender.R=org.apache.log4j.RollingFileAppender //指定以文件的方式输出日志 log4j.appender.R.File=c:/sys.html //文件位置 log4j.appender.R.MaxFileSize=500KB //文件最大尺寸 log4j.appender.R.MaxBackupIndex=1 //备份数 log4j.appender.R.layout=org.apache.log4j.HTMLLayout //文件的格式为Html格式 #log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n 有了上面的这个文件我们还要在weblogic启动的时候通过一个类加载这个文件,可以使用下面的方式 1、加载配置文件的Servlet package hybl_wshabcm.servelet; import java.io.File; import java.io.LineNumberReader; import java.io.FileReader; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Vector; import java.sql.Driver; import java.sql.DriverManager; // import servlet packages import javax.servlet.http.HttpServlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; // import log4j packages import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class SetupServlet extends HttpServlet{ public void init(ServletConfig config) throws ServletException{ super.init(config); // first thing to do, is to set up the Driver that we might be using // in case of JDBCAppender try{ Driver d = (Driver)(Class.forName( "org.gjt.mm.mysql.Driver").newInstance()); DriverManager.registerDriver(d); //加载JDBC驱动程序,当准备将日志记录到数据库的时候可以使用 }catch(Exception e){ System.err.println(e); } // next load up the properties //启动时从web.xml中获得配置文件的信息 String props = config.getInitParameter("props"); if(props == null || props.length() == 0 || !(new File(props)).isFile()){ System.err.println( "ERROR: Cannot read the configuration file. " + "Please check the path of the config init param in web.xml"); throw new ServletException(); } } public void destroy(){ super.destroy(); } } 2、web.xml文件的部署 上面的这个Servlet在服务器启动的时候将一些初始化信息加载,那么如何在weblogic启动的时候将这个类也 加载呢?看一个例子 setup hybl_wshabcm.servelet.SetupServlet//启动时装载的类 props /WEB-INF/log4j.properties//部署文件的位置