Linux安装RDAC
DS4000存储操作手册 V1.2 final.

DS4000存储操作手册版本 v1.2 final二〇〇八年十二月神州数码 (中国技有限公司文档控制更改记录版本创建 /修改时间编制 /修改者文件 /修改内容审批人贾志锋创建文档贾志锋调整扩容部分内容审阅姓名职位发布姓名职位目录目录 ........................................................................................................................................... .......3 1. DS4000概述 ......................................................................................................................5 1.1、DS4000产品介绍 ...............................................................................................5 1.1.1、IBM System storage server DS4200 Express..................................5 1.1.2、 IBM System storage server DS4700 Express..................................5 1.1.3、 IBM System storageDS4800 storage server..................................6 1.2、 DS4000硬件介绍 ...............................................................................................6 1.2.1、 DS4700 硬件 ...........................................................................................6 1.2.1.1、 DS4700 前视图 ............................................................................6 1.2.1.2、 DS4700-70A 后视图 ...................................................................7 1.2.1.3、 DS4700-72A 后视图 ...................................................................7 1.2.2、 DS4800 硬件 ...........................................................................................8 1.2.2.1、 DS4800 前视图 ............................................................................8 1.2.2.2、 DS4800 后视图 ............................................................................8 1.2.3、 EXP810扩展柜 .........................................................................................9 1.2.3.1、 EXP810前视图 (9)1.2.3.2、 EXP810后视图 (10)2. DS4000配置管理 ............................................................................................................10 2.1、 DS4000管理概述 .............................................................................................10 2.2、安装DS4000 Storage Manager....................................................................12 2.3、对DS4000存储进行管理 .................................................................................14 2.3.1、 DS4000存储服务器基本概念 ..............................................................14 2.3.2、开始使用DS4000 Storage Manager.................................................15 2.3.2.1、准备安装,配置管理客户端 .......................................................16 2.3.2.2、双击DS4700,管理DS4700存储服务器 ................................17 2.3.2.3、使用存储分区 ...............................................................................20 2.3.2.4、在AIX系统中识别磁盘 ................................................................24 2.3.3、安装主机端RDAC ...................................................................................24 2.3.3.1、 AIX操作系统 ................................................................................24 2.3.3.2、 Windows操作系统 (26)2.3.3.3、 Linux操作系统 (26)3. DS4000扩展柜连接 ........................................................................................................27 3.1、 DS4700扩展柜连接 .........................................................................................27 3.1.1、一个DS4700连接一个存储扩展柜 ......................................................27 3.1.2、一个DS4700连接两个存储扩展柜 (28)3.1.3、一个DS4700连接三个存储扩展柜 (28)3.1.4、一个DS4700连接四个存储扩展柜 ......................................................29 3.1.5、一个DS4700连接六个存储扩展柜 ......................................................29 3.2、 DS4800扩展柜连接 .........................................................................................29 3.2.1、一个DS4800连接一个存储扩展柜 ......................................................30 3.2.2、一个DS4800连接两个存储扩展柜 ......................................................30 3.2.3、一个DS4800连接四个存储扩展柜 ......................................................31 3.2.4、一个DS4800连接八个存储扩展柜 (32)3.2.5、一个DS4800连接十四个存储扩展柜 (32)4. DS4000扩容 ....................................................................................................................33 4.1、添加硬盘 . (33)4.2、添加扩展柜 (34)5. 微码升级 (37)1.DS4000概述IBM TotalStorage DS4000存储服务器是一种为多种工业应用提供高可用性、高性能的存储解决方案而设计的存储服务器。
如何在Linux系统中安装驱动程序

如何在Linux系统中安装驱动程序Linux系统作为一个开源的操作系统,广泛应用于各种设备和领域。
而安装驱动程序是在Linux系统中使用外部硬件设备的关键步骤之一。
在本文中,我们将学习如何在Linux系统中安装驱动程序的方法和步骤。
1. 检查硬件设备在安装驱动程序之前,首先需要确定硬件设备的型号和制造商。
可以通过查询设备的型号或者查看设备的相关文档来获取这些信息。
这是非常重要的,因为不同的设备可能需要不同的驱动程序来正确地工作。
2. 更新系统在安装驱动程序之前,确保你的Linux系统已经是最新的状态。
可以通过在终端中运行以下命令来更新系统:```sudo apt-get updatesudo apt-get upgrade```更新系统可以确保你拥有最新的软件包和驱动程序,以获得更好的兼容性和性能。
3. 查找合适的驱动程序一般来说,大部分硬件设备的驱动程序都可以在Linux系统的软件仓库中找到。
可以通过使用包管理器(如apt、yum等)来查找并安装合适的驱动程序。
运行以下命令来搜索并安装特定的驱动程序:```sudo apt-cache search 驱动程序名称sudo apt-get install 驱动程序名称```注意替换“驱动程序名称”为具体的驱动程序名称。
安装驱动程序可能需要输入管理员密码和确认安装。
如果你无法在软件仓库中找到合适的驱动程序,可以转向设备的制造商网站或者开源社区来获取。
下载驱动程序后,根据驱动程序提供的文档和说明来安装。
4. 编译和安装驱动程序有些驱动程序可能需要手动编译和安装。
在这种情况下,你需要确保你的系统已经安装了编译工具(如GCC、make等)。
在终端中切换到驱动程序所在的目录,并按照以下步骤进行编译和安装:```./configuremakesudo make install```以上命令将分别进行配置、编译和安装驱动程序。
在进行安装之前,可能需要输入一些配置选项或者确认安装。
linux系统如何安装软件 (详细文字教程)

linux系统如何安装软件 (详细文字教程)在Linux中安装软件时,我们经常要考虑到这样几个个问题:(1).怎样安装软件;(2).软件安装在什么地方;(3).如何卸载删除不要的软件......下面,我们就一起来认识一下这些方面的问题。
一.认识Linux应用软件安装包通常Linux应用软件的安装包有三种:1) tar包,如software-1.2.3-1.tar.gz。
它是使用UNIX系统的打包工具tar打包的。
2) rpm包,如software-1.2.3-1.i386.rpm。
它是Redhat Linux提供的一种包封装格式。
(现在用的全称叫RPM Package Manager,以前叫Redhat Package Manager)3) dpkg包,如software-1.2.3-1.deb。
它是Debain Linux提供的一种包封装格式。
而且,大多数Linux应用软件包的命名也有一定的规律,它遵循:名称-版本-修正版-类型例如:1) software-1.2.3-1.tar.gz 意味着:软件名称:software版本号:1.2.3修正版本:1类型:tar.gz,说明是一个tar包。
2) sfotware-1.2.3-1.i386.rpm软件名称:software版本号:1.2.3修正版本:1可用平台:i386,适用于Intel 80x86平台。
类型:rpm,说明是一个rpm包。
注:由于rpm格式的通常是已编译的程序,所以需指明平台。
在后面会详细说明。
而software-1.2.3-1.deb就不用再说了吧!大家自己练习一下。
二、了解包里的内容:一个Linux应用程序的软件包中可以包含两种不同的内容:1) 一种就是可执行文件,也就是解开包后就可以直接运行的。
在Windows中所有的软件包都是这种类型。
安装完这个程序后,你就可以使用,但你看不到源程序。
而且下载时要注意这个软件是否是你所使用的平台,否则将无法正常安装。
linux dac机制

Linux 中的DAC(Data Access Control)机制是一种数据访问控制策略,用于确保对系统资源(如硬件设备、文件等)的安全访问。
在Linux 系统中,DAC 是实现自主访问控制(Discretionary Access Control,DAC)的一种方式,与强制访问控制(Mandatory Access Control,MAC)共同构成了Linux 系统的访问控制策略。
DAC 机制主要通过权限位、所有权和访问控制列表(ACL)来实现。
以下是DAC 机制在Linux 中的主要组成部分:1. 权限位:Linux 系统中的每个文件和目录都包含一组权限位,用于表示文件或目录的所有者、组和其他用户的访问权限。
这些权限位包括:- 所有权:文件或目录的所有者(用户ID)和组(组ID);- 权限:文件或目录对所有者、组和其他用户的读、写和执行权限。
2. 所有权:Linux 系统中的所有权机制允许文件和目录的所有者对其资源进行自由操作,包括修改权限、删除等。
所有权机制保证了资源的原始创建者对其资源的控制权。
3. 访问控制列表(ACL):Linux 系统中的ACL 是一种扩展的访问控制机制,允许对文件和目录的访问权限进行更细粒度的控制。
ACL 可以设置每个用户的访问权限,包括读、写和执行等。
这使得DAC 机制能够实现对系统资源的精细控制。
DAC 机制在Linux 系统中的优势如下:1. 灵活性:DAC 机制允许文件和目录的所有者根据需要调整权限,方便地实现对资源的共享和保护。
2. 易于管理:DAC 机制通过统一的权限位和ACL 实现对系统资源的管理,降低了维护成本。
3. 安全性:DAC 机制通过对文件和目录的访问权限进行控制,有效地防止了未经授权的访问,提高了系统的安全性。
4. 兼容性:DAC 机制在Linux 系统中的实现,保证了与其他操作系统和软件的兼容性。
Linux 系统中的DAC 机制是一种有效的数据访问控制策略,通过权限位、所有权和访问控制列表等手段,实现了对系统资源的安全管理和控制。
kali linux常用安装软件

kali linux常用安装软件2014-7-12 12:31:37 阅读(7300) 评论(1)vim /etc/apt/sources.listdeb /kali kali main non-free contribdeb-src /kali kali main non-free contribdeb /kali-security kali/updates main contrib non-free完成后按Esc键进入命令行模式,键入:wq来保存2apt-get install network-manager-pptp-gnomeapt-get install iceweasel-l10n-zh-cnapt-get install fcitxfcitx-pinyinfcitx-module-cloudpinyinfcitx-googlepinyinim-config一些常用软件:当然得安装geditapt-get install geditgedit --encoding=gbk xxx 解决gedit 中文乱码火狐显示http地址栏输入about:config 设置browser.urlbar.trimURLs为false地址栏输入about:config 设置browser.urlbar.trimURLs为false安装steam/usr/bingedit steam# Don’t allow running as rootif [ "$(id -u)" == "0" ]; thenshow_message –error $”Cannot run as root user”exit 1fi0修改为11.官方源中的软件(可以通过apt-get install直接安装):apt-get install gnome-tweak-tool(gnome-shell管理软件可以修改字体、管理插件、管理桌面主题。
wm8960 linux codec 代码,修改过了,支持录音

* wm8960.c -- WM8960 ALSA SoC Audio driver** Copyright 2007-11 Wolfson Microelectronics, plc** Author: Liam Girdwood** This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as* published by the Free Software Foundation.*/#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/pm.h>#include <linux/i2c.h>#include <linux/slab.h>#include <sound/core.h>#include <sound/pcm.h>#include <sound/pcm_params.h>#include <sound/soc.h>#include <sound/initval.h>#include <sound/tlv.h>#include <sound/wm8960.h>#include "wm8960.h"/* R25 - Power 1 */#define WM8960_VMID_MASK 0x180#define WM8960_VREF 0x40/* R26 - Power 2 */#define WM8960_PWR2_LOUT1 0x40#define WM8960_PWR2_ROUT1 0x20#define WM8960_PWR2_OUT3 0x02/* R28 - Anti-pop 1 */#define WM8960_POBCTRL 0x80#define WM8960_BUFDCOPEN 0x10#define WM8960_BUFIOEN 0x08#define WM8960_SOFT_ST 0x04#define WM8960_HPSTBY 0x01/* R29 - Anti-pop 2 */#define WM8960_DISOP 0x40#define WM8960_DRES_MASK 0x30/** wm8960 register cache* We can't read the WM8960 register space when we are* using 2 wire for device control, so we cache them instead.*/static const u16 wm8960_reg[WM8960_CACHEREGNUM] = {0x0097, 0x0097, 0x0000, 0x0000,0x0000, 0x0008, 0x0000, 0x000a,0x01c0, 0x0000, 0x00ff, 0x00ff,0x0000, 0x0000, 0x0000, 0x0000,0x0000, 0x007b, 0x0100, 0x0032,0x0000, 0x00c3, 0x00c3, 0x01c0,0x0000, 0x0000, 0x0000, 0x0000,0x0000, 0x0000, 0x0000, 0x0000,0x0100, 0x0100, 0x0050, 0x0050,0x0050, 0x0050, 0x0000, 0x0000,0x0000, 0x0000, 0x0040, 0x0000,0x0000, 0x0050, 0x0050, 0x0000,0x0002, 0x0037, 0x004d, 0x0080,0x0008, 0x0031, 0x0026, 0x00e9,};struct wm8960_priv {enum snd_soc_control_type control_type;int (*set_bias_level)(struct snd_soc_codec *,enum snd_soc_bias_level level);struct snd_soc_dapm_widget *lout1;struct snd_soc_dapm_widget *rout1;struct snd_soc_dapm_widget *out3;bool deemph;int playback_fs;};#define wm8960_reset(c) snd_soc_write(c, WM8960_RESET, 0)/* enumerated controls */static const char *wm8960_polarity[] = {"No Inversion", "Left Inverted", "Right Inverted", "Stereo Inversion"};static const char *wm8960_3d_upper_cutoff[] = {"High", "Low"};static const char *wm8960_3d_lower_cutoff[] = {"Low", "High"};static const char *wm8960_alcfunc[] = {"Off", "Right", "Left", "Stereo"}; static const char *wm8960_alcmode[] = {"ALC", "Limiter"};static const struct soc_enum wm8960_enum[] = {SOC_ENUM_SINGLE(WM8960_DACCTL1, 5, 4, wm8960_polarity),SOC_ENUM_SINGLE(WM8960_DACCTL2, 5, 4, wm8960_polarity),SOC_ENUM_SINGLE(WM8960_3D, 6, 2, wm8960_3d_upper_cutoff),SOC_ENUM_SINGLE(WM8960_3D, 5, 2, wm8960_3d_lower_cutoff),SOC_ENUM_SINGLE(WM8960_ALC1, 7, 4, wm8960_alcfunc),SOC_ENUM_SINGLE(WM8960_ALC3, 8, 2, wm8960_alcmode),};static const int deemph_settings[] = { 0, 32000, 44100, 48000 };static int wm8960_set_deemph(struct snd_soc_codec *codec){struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);int val, i, best;/* If we're using deemphasis select the nearest available sample* rate.*/if (wm8960->deemph) {best = 1;for (i = 2; i < ARRAY_SIZE(deemph_settings); i++) {if (abs(deemph_settings[i] - wm8960->playback_fs) <abs(deemph_settings[best] - wm8960->playback_fs))best = i;}val = best << 1;} else {val = 0;}dev_dbg(codec->dev, "Set deemphasis %d\n", val);return snd_soc_update_bits(codec, WM8960_DACCTL1,0x6, val);}static int wm8960_get_deemph(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_value *ucontrol){struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);ucontrol->value.enumerated.item[0] = wm8960->deemph;return 0;}static int wm8960_put_deemph(struct snd_kcontrol *kcontrol,struct snd_ctl_elem_value *ucontrol){struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);int deemph = ucontrol->value.enumerated.item[0];if (deemph > 1)return -EINVAL;wm8960->deemph = deemph;return wm8960_set_deemph(codec);}static const DECLARE_TLV_DB_SCALE(adc_tlv, -9700, 50, 0);static const DECLARE_TLV_DB_SCALE(dac_tlv, -12700, 50, 1);static const DECLARE_TLV_DB_SCALE(bypass_tlv, -2100, 300, 0);static const DECLARE_TLV_DB_SCALE(out_tlv, -12100, 100, 1);static const struct snd_kcontrol_new wm8960_snd_controls[] = {SOC_DOUBLE_R_TLV("Capture Volume", WM8960_LINVOL, WM8960_RINVOL, 0, 63, 0, adc_tlv),SOC_DOUBLE_R("Capture Volume ZC Switch", WM8960_LINVOL, WM8960_RINVOL, 6, 1, 0),SOC_DOUBLE_R("Capture Mute Switch", WM8960_LINVOL, WM8960_RINVOL, 7, 1, 0),SOC_DOUBLE_R_TLV("Playback Volume", WM8960_LDAC, WM8960_RDAC,0, 255, 0, dac_tlv),SOC_DOUBLE_R_TLV("ADC Digital Volume", WM8960_LADC, WM8960_RADC, 0, 255, 0, dac_tlv),SOC_DOUBLE_R_TLV("Headphone Playback Volume", WM8960_LOUT1, WM8960_ROUT1, 0, 127, 0, out_tlv),SOC_DOUBLE_R("Headphone Playback ZC Switch", WM8960_LOUT1, WM8960_ROUT1, 7, 1, 0),SOC_DOUBLE_R_TLV("Speaker Playback Volume", WM8960_LOUT2, WM8960_ROUT2, 0, 127, 0, out_tlv),SOC_DOUBLE_R("Speaker Playback ZC Switch", WM8960_LOUT2, WM8960_ROUT2, 7, 1, 0),SOC_SINGLE("Speaker DC Volume", WM8960_CLASSD3, 3, 5, 0),SOC_SINGLE("Speaker AC Volume", WM8960_CLASSD3, 0, 5, 0),SOC_SINGLE("PCM Playback -6dB Switch", WM8960_DACCTL1, 7, 1, 0),SOC_ENUM("ADC Polarity", wm8960_enum[0]),SOC_SINGLE("ADC High Pass Filter Switch", WM8960_DACCTL1, 0, 1, 0),SOC_ENUM("DAC Polarity", wm8960_enum[2]),SOC_SINGLE_BOOL_EXT("DAC Deemphasis Switch", 0,wm8960_get_deemph, wm8960_put_deemph),SOC_ENUM("3D Filter Upper Cut-Off", wm8960_enum[2]),SOC_ENUM("3D Filter Lower Cut-Off", wm8960_enum[3]),SOC_SINGLE("3D Volume", WM8960_3D, 1, 15, 0),SOC_SINGLE("3D Switch", WM8960_3D, 0, 1, 0),SOC_ENUM("ALC Function", wm8960_enum[4]),SOC_SINGLE("ALC Max Gain", WM8960_ALC1, 4, 7, 0),SOC_SINGLE("ALC Target", WM8960_ALC1, 0, 15, 1),SOC_SINGLE("ALC Min Gain", WM8960_ALC2, 4, 7, 0),SOC_SINGLE("ALC Hold Time", WM8960_ALC2, 0, 15, 0),SOC_ENUM("ALC Mode", wm8960_enum[5]),SOC_SINGLE("ALC Decay", WM8960_ALC3, 4, 15, 0),SOC_SINGLE("ALC Attack", WM8960_ALC3, 0, 15, 0),SOC_SINGLE("Noise Gate Threshold", WM8960_NOISEG, 3, 31, 0),SOC_SINGLE("Noise Gate Switch", WM8960_NOISEG, 0, 1, 0),SOC_DOUBLE_R("Mic Boot Gain", WM8960_LINPATH, WM8960_RINPATH, 4, 3, 0),SOC_SINGLE_TLV("Left Output Mixer Boost Bypass Volume",WM8960_BYPASS1, 4, 7, 1, bypass_tlv),SOC_SINGLE_TLV("Left Output Mixer LINPUT3 Volume",WM8960_LOUTMIX, 4, 7, 1, bypass_tlv),SOC_SINGLE_TLV("Right Output Mixer Boost Bypass Volume",WM8960_BYPASS2, 4, 7, 1, bypass_tlv),SOC_SINGLE_TLV("Right Output Mixer RINPUT3 Volume",WM8960_ROUTMIX, 4, 7, 1, bypass_tlv),//add by lyqSOC_SINGLE("MICB Switch", WM8960_POWER1, 1, 1, 0),};static const struct snd_kcontrol_new wm8960_lin_boost[] = {SOC_DAPM_SINGLE("LINPUT2 Switch", WM8960_LINPATH, 6, 1, 0),SOC_DAPM_SINGLE("LINPUT3 Switch", WM8960_LINPATH, 7, 1, 0),SOC_DAPM_SINGLE("LINPUT1 Switch", WM8960_LINPATH, 8, 1, 0),};static const struct snd_kcontrol_new wm8960_lin[] = {SOC_DAPM_SINGLE("Boost Switch", WM8960_LINPATH, 3, 1, 0),};static const struct snd_kcontrol_new wm8960_rin_boost[] = {SOC_DAPM_SINGLE("RINPUT2 Switch", WM8960_RINPATH, 6, 1, 0),SOC_DAPM_SINGLE("RINPUT3 Switch", WM8960_RINPATH, 7, 1, 0),SOC_DAPM_SINGLE("RINPUT1 Switch", WM8960_RINPATH, 8, 1, 0),};static const struct snd_kcontrol_new wm8960_rin[] = {SOC_DAPM_SINGLE("Boost Switch", WM8960_RINPATH, 3, 1, 0),};static const struct snd_kcontrol_new wm8960_loutput_mixer[] = { SOC_DAPM_SINGLE("PCM Playback Switch", WM8960_LOUTMIX, 8, 1, 0), SOC_DAPM_SINGLE("LINPUT3 Switch", WM8960_LOUTMIX, 7, 1, 0),SOC_DAPM_SINGLE("Boost Bypass Switch", WM8960_BYPASS1, 7, 1, 0), };static const struct snd_kcontrol_new wm8960_routput_mixer[] = { SOC_DAPM_SINGLE("PCM Playback Switch", WM8960_ROUTMIX, 8, 1, 0), SOC_DAPM_SINGLE("RINPUT3 Switch", WM8960_ROUTMIX, 7, 1, 0),SOC_DAPM_SINGLE("Boost Bypass Switch", WM8960_BYPASS2, 7, 1, 0), };static const struct snd_kcontrol_new wm8960_mono_out[] = {SOC_DAPM_SINGLE("Left Switch", WM8960_MONOMIX1, 7, 1, 0),SOC_DAPM_SINGLE("Right Switch", WM8960_MONOMIX2, 7, 1, 0),};static const struct snd_soc_dapm_widget wm8960_dapm_widgets[] = {SND_SOC_DAPM_INPUT("RINPUT1"),SND_SOC_DAPM_INPUT("LINPUT2"),SND_SOC_DAPM_INPUT("RINPUT2"),SND_SOC_DAPM_INPUT("LINPUT3"),SND_SOC_DAPM_INPUT("RINPUT3"),SND_SOC_DAPM_SUPPLY("MICB", WM8960_POWER1, 1, 0, NULL, 0),SND_SOC_DAPM_MIXER("Left Boost Mixer", WM8960_POWER1, 5, 0,wm8960_lin_boost, ARRAY_SIZE(wm8960_lin_boost)),SND_SOC_DAPM_MIXER("Right Boost Mixer", WM8960_POWER1, 4, 0,wm8960_rin_boost, ARRAY_SIZE(wm8960_rin_boost)),SND_SOC_DAPM_MIXER("Left Input Mixer", WM8960_POWER3, 5, 0,wm8960_lin, ARRAY_SIZE(wm8960_lin)),SND_SOC_DAPM_MIXER("Right Input Mixer", WM8960_POWER3, 4, 0,wm8960_rin, ARRAY_SIZE(wm8960_rin)),SND_SOC_DAPM_ADC("Left ADC", "Capture", WM8960_POWER1, 3, 0),SND_SOC_DAPM_ADC("Right ADC", "Capture", WM8960_POWER1, 2, 0),SND_SOC_DAPM_DAC("Left DAC", "Playback", WM8960_POWER2, 8, 0),SND_SOC_DAPM_DAC("Right DAC", "Playback", WM8960_POWER2, 7, 0),SND_SOC_DAPM_MIXER("Left Output Mixer", WM8960_POWER3, 3, 0, &wm8960_loutput_mixer[0],ARRAY_SIZE(wm8960_loutput_mixer)),SND_SOC_DAPM_MIXER("Right Output Mixer", WM8960_POWER3, 2, 0, &wm8960_routput_mixer[0],ARRAY_SIZE(wm8960_routput_mixer)),SND_SOC_DAPM_PGA("LOUT1 PGA", WM8960_POWER2, 6, 0, NULL, 0),SND_SOC_DAPM_PGA("ROUT1 PGA", WM8960_POWER2, 5, 0, NULL, 0),SND_SOC_DAPM_PGA("Left Speaker PGA", WM8960_POWER2, 4, 0, NULL, 0),SND_SOC_DAPM_PGA("Right Speaker PGA", WM8960_POWER2, 3, 0, NULL, 0),SND_SOC_DAPM_PGA("Right Speaker Output", WM8960_CLASSD1, 7, 0, NULL, 0), SND_SOC_DAPM_PGA("Left Speaker Output", WM8960_CLASSD1, 6, 0, NULL, 0),SND_SOC_DAPM_OUTPUT("SPK_LP"),SND_SOC_DAPM_OUTPUT("SPK_LN"),SND_SOC_DAPM_OUTPUT("HP_L"),SND_SOC_DAPM_OUTPUT("SPK_RP"),SND_SOC_DAPM_OUTPUT("SPK_RN"),SND_SOC_DAPM_OUTPUT("OUT3"),};static const struct snd_soc_dapm_widget wm8960_dapm_widgets_out3[] = { SND_SOC_DAPM_MIXER("Mono Output Mixer", WM8960_POWER2, 1, 0, &wm8960_mono_out[0],ARRAY_SIZE(wm8960_mono_out)),};/* Represent OUT3 as a PGA so that it gets turned on with LOUT1/ROUT1 */ static const struct snd_soc_dapm_widget wm8960_dapm_widgets_capless[] = { SND_SOC_DAPM_PGA("OUT3 VMID", WM8960_POWER2, 1, 0, NULL, 0),};static const struct snd_soc_dapm_route audio_paths[] = {{ "Left Boost Mixer", "LINPUT1 Switch", "LINPUT1" },{ "Left Boost Mixer", "LINPUT2 Switch", "LINPUT2" },{ "Left Boost Mixer", "LINPUT3 Switch", "LINPUT3" },{ "Left Input Mixer", "Boost Switch", "Left Boost Mixer", },{ "Left Input Mixer", NULL, "LINPUT1", }, /* Really Boost Switch */ { "Left Input Mixer", NULL, "LINPUT2" },{ "Left Input Mixer", NULL, "LINPUT3" },{ "Right Boost Mixer", "RINPUT1 Switch", "RINPUT1" },{ "Right Boost Mixer", "RINPUT2 Switch", "RINPUT2" },{ "Right Boost Mixer", "RINPUT3 Switch", "RINPUT3" },{ "Right Input Mixer", "Boost Switch", "Right Boost Mixer", },{ "Right Input Mixer", NULL, "RINPUT1", }, /* Really Boost Switch */ { "Right Input Mixer", NULL, "RINPUT2" },{ "Right Input Mixer", NULL, "LINPUT3" },{ "Left ADC", NULL, "Left Input Mixer" },{ "Right ADC", NULL, "Right Input Mixer" },{ "Left Output Mixer", "LINPUT3 Switch", "LINPUT3" },{ "Left Output Mixer", "Boost Bypass Switch", "Left Boost Mixer"} , { "Left Output Mixer", "PCM Playback Switch", "Left DAC" },{ "Right Output Mixer", "RINPUT3 Switch", "RINPUT3" },{ "Right Output Mixer", "Boost Bypass Switch", "Right Boost Mixer" } , { "Right Output Mixer", "PCM Playback Switch", "Right DAC" },{ "LOUT1 PGA", NULL, "Left Output Mixer" },{ "ROUT1 PGA", NULL, "Right Output Mixer" },{ "HP_L", NULL, "LOUT1 PGA" },{ "HP_R", NULL, "ROUT1 PGA" },{ "Left Speaker PGA", NULL, "Left Output Mixer" },{ "Right Speaker PGA", NULL, "Right Output Mixer" },{ "Left Speaker Output", NULL, "Left Speaker PGA" },{ "Right Speaker Output", NULL, "Right Speaker PGA" },{ "SPK_LN", NULL, "Left Speaker Output" },{ "SPK_LP", NULL, "Left Speaker Output" },{ "SPK_RN", NULL, "Right Speaker Output" },{ "SPK_RP", NULL, "Right Speaker Output" },};static const struct snd_soc_dapm_route audio_paths_out3[] = { { "Mono Output Mixer", "Left Switch", "Left Output Mixer" },{ "Mono Output Mixer", "Right Switch", "Right Output Mixer" },{ "OUT3", NULL, "Mono Output Mixer", }};static const struct snd_soc_dapm_route audio_paths_capless[] = { { "HP_L", NULL, "OUT3 VMID" },{ "HP_R", NULL, "OUT3 VMID" },{ "OUT3 VMID", NULL, "Left Output Mixer" },{ "OUT3 VMID", NULL, "Right Output Mixer" },};static int wm8960_add_widgets(struct snd_soc_codec *codec){struct wm8960_data *pdata = codec->dev->platform_data;struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);struct snd_soc_dapm_context *dapm = &codec->dapm;struct snd_soc_dapm_widget *w;snd_soc_dapm_new_controls(dapm, wm8960_dapm_widgets,ARRAY_SIZE(wm8960_dapm_widgets));snd_soc_dapm_add_routes(dapm, audio_paths, ARRAY_SIZE(audio_paths));/* In capless mode OUT3 is used to provide VMID for the* headphone outputs, otherwise it is used as a mono mixer.*/if (pdata && pdata->capless) {snd_soc_dapm_new_controls(dapm, wm8960_dapm_widgets_capless,ARRAY_SIZE(wm8960_dapm_widgets_capless));snd_soc_dapm_add_routes(dapm, audio_paths_capless,ARRAY_SIZE(audio_paths_capless));} else {snd_soc_dapm_new_controls(dapm, wm8960_dapm_widgets_out3,ARRAY_SIZE(wm8960_dapm_widgets_out3));snd_soc_dapm_add_routes(dapm, audio_paths_out3,ARRAY_SIZE(audio_paths_out3));}/* We need to power up the headphone output stage out of* sequence for capless mode. To save scanning the widget* list each time to find the desired power state do so now* and save the result.*/list_for_each_entry(w, &codec->card->widgets, list) {if (w->dapm != &codec->dapm)continue;if (strcmp(w->name, "LOUT1 PGA") == 0)wm8960->lout1 = w;if (strcmp(w->name, "ROUT1 PGA") == 0)wm8960->rout1 = w;if (strcmp(w->name, "OUT3 VMID") == 0)wm8960->out3 = w;}return 0;}static int wm8960_set_dai_fmt(struct snd_soc_dai *codec_dai,unsigned int fmt){struct snd_soc_codec *codec = codec_dai->codec;u16 iface = 0;/* set master/slave audio interface */ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { case SND_SOC_DAIFMT_CBM_CFM:iface |= 0x0040;break;case SND_SOC_DAIFMT_CBS_CFS:break;default:return -EINVAL;}/* interface format */switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { case SND_SOC_DAIFMT_I2S:iface |= 0x0002;break;case SND_SOC_DAIFMT_RIGHT_J:break;case SND_SOC_DAIFMT_LEFT_J:iface |= 0x0001;break;case SND_SOC_DAIFMT_DSP_A:iface |= 0x0003;break;case SND_SOC_DAIFMT_DSP_B:iface |= 0x0013;break;default:return -EINVAL;}/* clock inversion */switch (fmt & SND_SOC_DAIFMT_INV_MASK) { case SND_SOC_DAIFMT_NB_NF:break;case SND_SOC_DAIFMT_IB_IF:iface |= 0x0090;break;case SND_SOC_DAIFMT_IB_NF:iface |= 0x0080;break;case SND_SOC_DAIFMT_NB_IF:iface |= 0x0010;break;default:return -EINVAL;}/* set iface */snd_soc_write(codec, WM8960_IFACE1, iface);return 0;}static struct {int rate;unsigned int val;} alc_rates[] = {{ 48000, 0 },{ 44100, 0 },{ 32000, 1 },{ 22050, 2 },{ 24000, 2 },{ 16000, 3 },{ 11250, 4 },{ 12000, 4 },{ 8000, 5 },};static int wm8960_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params,struct snd_soc_dai *dai){struct snd_soc_codec *codec = dai->codec;struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);u16 iface = snd_soc_read(codec, WM8960_IFACE1) & 0xfff3;int i;/* bit size */switch (params_format(params)) {case SNDRV_PCM_FORMAT_S16_LE:break;case SNDRV_PCM_FORMAT_S20_3LE:iface |= 0x0004;break;case SNDRV_PCM_FORMAT_S24_LE:iface |= 0x0008;break;}/* Update filters for the new rate */if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {wm8960->playback_fs = params_rate(params);wm8960_set_deemph(codec);} else {for (i = 0; i < ARRAY_SIZE(alc_rates); i++)if (alc_rates[i].rate == params_rate(params))snd_soc_update_bits(codec,WM8960_ADDCTL3, 0x7,alc_rates[i].val);}/* set iface */snd_soc_write(codec, WM8960_IFACE1, iface);return 0;}static int wm8960_mute(struct snd_soc_dai *dai, int mute){struct snd_soc_codec *codec = dai->codec;if (mute)snd_soc_update_bits(codec, WM8960_DACCTL1, 0x8, 0x8);elsesnd_soc_update_bits(codec, WM8960_DACCTL1, 0x8, 0);return 0;}static int wm8960_set_bias_level_out3(struct snd_soc_codec *codec, enum snd_soc_bias_level level){switch (level) {case SND_SOC_BIAS_ON:break;case SND_SOC_BIAS_PREPARE:/* Set VMID to 2x50k */snd_soc_update_bits(codec, WM8960_POWER1, 0x180, 0x80);break;case SND_SOC_BIAS_STANDBY:if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) {snd_soc_cache_sync(codec);/* Enable anti-pop features */snd_soc_write(codec, WM8960_APOP1,WM8960_POBCTRL | WM8960_SOFT_ST |WM8960_BUFDCOPEN | WM8960_BUFIOEN);/* Enable & ramp VMID at 2x50k */snd_soc_update_bits(codec, WM8960_POWER1, 0x80, 0x80);msleep(100);/* Enable VREF */snd_soc_update_bits(codec, WM8960_POWER1, WM8960_VREF,WM8960_VREF);/* Disable anti-pop features */snd_soc_write(codec, WM8960_APOP1, WM8960_BUFIOEN);}/* Set VMID to 2x250k */snd_soc_update_bits(codec, WM8960_POWER1, 0x180, 0x100);break;case SND_SOC_BIAS_OFF:/* Enable anti-pop features */snd_soc_write(codec, WM8960_APOP1,WM8960_POBCTRL | WM8960_SOFT_ST |WM8960_BUFDCOPEN | WM8960_BUFIOEN);/* Disable VMID and VREF, let them discharge */snd_soc_write(codec, WM8960_POWER1, 0);msleep(600);break;}codec->dapm.bias_level = level;return 0;}static int wm8960_set_bias_level_capless(struct snd_soc_codec *codec,enum snd_soc_bias_level level){struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec); int reg;switch (level) {case SND_SOC_BIAS_ON:break;case SND_SOC_BIAS_PREPARE:switch (codec->dapm.bias_level) {case SND_SOC_BIAS_STANDBY:/* Enable anti pop mode */snd_soc_update_bits(codec, WM8960_APOP1,WM8960_POBCTRL | WM8960_SOFT_ST |WM8960_BUFDCOPEN,WM8960_POBCTRL | WM8960_SOFT_ST |WM8960_BUFDCOPEN);/* Enable LOUT1, ROUT1 and OUT3 if they're enabled */reg = 0;if (wm8960->lout1 && wm8960->lout1->power)reg |= WM8960_PWR2_LOUT1;if (wm8960->rout1 && wm8960->rout1->power)reg |= WM8960_PWR2_ROUT1;if (wm8960->out3 && wm8960->out3->power)reg |= WM8960_PWR2_OUT3;snd_soc_update_bits(codec, WM8960_POWER2,WM8960_PWR2_LOUT1 |WM8960_PWR2_ROUT1 |WM8960_PWR2_OUT3, reg);/* Enable VMID at 2*50k */snd_soc_update_bits(codec, WM8960_POWER1,WM8960_VMID_MASK, 0x80);/* Ramp */msleep(100);/* Enable VREF */snd_soc_update_bits(codec, WM8960_POWER1,WM8960_VREF, WM8960_VREF);msleep(100);break;case SND_SOC_BIAS_ON:/* Enable anti-pop mode */snd_soc_update_bits(codec, WM8960_APOP1,WM8960_POBCTRL | WM8960_SOFT_ST |WM8960_BUFDCOPEN,WM8960_POBCTRL | WM8960_SOFT_ST |WM8960_BUFDCOPEN);/* Disable VMID and VREF */snd_soc_update_bits(codec, WM8960_POWER1,WM8960_VREF | WM8960_VMID_MASK, 0);break;case SND_SOC_BIAS_OFF:snd_soc_cache_sync(codec);break;default:break;}break;case SND_SOC_BIAS_STANDBY:switch (codec->dapm.bias_level) {case SND_SOC_BIAS_PREPARE:/* Disable HP discharge */snd_soc_update_bits(codec, WM8960_APOP2,WM8960_DISOP | WM8960_DRES_MASK,0);/* Disable anti-pop features */snd_soc_update_bits(codec, WM8960_APOP1,WM8960_POBCTRL | WM8960_SOFT_ST |WM8960_BUFDCOPEN,WM8960_POBCTRL | WM8960_SOFT_ST |WM8960_BUFDCOPEN);break;default:break;}break;case SND_SOC_BIAS_OFF:break;}codec->dapm.bias_level = level;return 0;}/* PLL divisors */struct _pll_div {u32 pre_div:1;u32 n:4;u32 k:24;};/* The size in bits of the pll divide multiplied by 10* to allow rounding later */#define FIXED_PLL_SIZE ((1 << 24) * 10)static int pll_factors(unsigned int source, unsigned int target, struct _pll_div *pll_div){unsigned long long Kpart;unsigned int K, Ndiv, Nmod;pr_debug("WM8960 PLL: setting %dHz->%dHz\n", source, target);/* Scale up target to PLL operating frequency */target *= 4;Ndiv = target / source;if (Ndiv < 6) {source >>= 1;pll_div->pre_div = 1;Ndiv = target / source;} elsepll_div->pre_div = 0;if ((Ndiv < 6) || (Ndiv > 12)) {pr_err("WM8960 PLL: Unsupported N=%d\n", Ndiv);return -EINVAL;}pll_div->n = Ndiv;Nmod = target % source;Kpart = FIXED_PLL_SIZE * (long long)Nmod;do_div(Kpart, source);K = Kpart & 0xFFFFFFFF;/* Check if we need to round */if ((K % 10) >= 5)K += 5;/* Move down to proper range now rounding is done */K /= 10;pll_div->k = K;pr_debug("WM8960 PLL: N=%x K=%x pre_div=%d\n",pll_div->n, pll_div->k, pll_div->pre_div);return 0;}static int wm8960_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, int source, unsigned int freq_in, unsigned int freq_out){struct snd_soc_codec *codec = codec_dai->codec;u16 reg;static struct _pll_div pll_div;int ret;if (freq_in && freq_out) {ret = pll_factors(freq_in, freq_out, &pll_div);if (ret != 0)return ret;}/* Disable the PLL: even if we are changing the frequency the* PLL needs to be disabled while we do so. */snd_soc_update_bits(codec, WM8960_CLOCK1, 0x1, 0);snd_soc_update_bits(codec, WM8960_POWER2, 0x1, 0);if (!freq_in || !freq_out)return 0;reg = snd_soc_read(codec, WM8960_PLL1) & ~0x3f;reg |= pll_div.pre_div << 4;reg |= pll_div.n;if (pll_div.k) {reg |= 0x20;snd_soc_write(codec, WM8960_PLL2, (pll_div.k >> 18) & 0x3f);snd_soc_write(codec, WM8960_PLL3, (pll_div.k >> 9) & 0x1ff);snd_soc_write(codec, WM8960_PLL4, pll_div.k & 0x1ff);}snd_soc_write(codec, WM8960_PLL1, reg);/* Turn it on */snd_soc_update_bits(codec, WM8960_POWER2, 0x1, 0x1);msleep(250);snd_soc_update_bits(codec, WM8960_CLOCK1, 0x1, 0x1);return 0;}static int wm8960_set_dai_clkdiv(struct snd_soc_dai *codec_dai, int div_id, int div){struct snd_soc_codec *codec = codec_dai->codec;u16 reg;switch (div_id) {case WM8960_SYSCLKDIV:reg = snd_soc_read(codec, WM8960_CLOCK1) & 0x1f9;snd_soc_write(codec, WM8960_CLOCK1, reg | div);break;case WM8960_DACDIV:reg = snd_soc_read(codec, WM8960_CLOCK1) & 0x1c7;snd_soc_write(codec, WM8960_CLOCK1, reg | div);break;case WM8960_OPCLKDIV:reg = snd_soc_read(codec, WM8960_PLL1) & 0x03f;snd_soc_write(codec, WM8960_PLL1, reg | div);break;case WM8960_DCLKDIV:reg = snd_soc_read(codec, WM8960_CLOCK2) & 0x03f;snd_soc_write(codec, WM8960_CLOCK2, reg | div);break;case WM8960_TOCLKSEL:reg = snd_soc_read(codec, WM8960_ADDCTL1) & 0x1fd;snd_soc_write(codec, WM8960_ADDCTL1, reg | div);break;default:return -EINVAL;}return 0;}static int wm8960_set_bias_level(struct snd_soc_codec *codec,enum snd_soc_bias_level level){struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);return wm8960->set_bias_level(codec, level);}#define WM8960_RATES SNDRV_PCM_RATE_8000_48000#define WM8960_FORMATS \(SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \SNDRV_PCM_FMTBIT_S24_LE)static const struct snd_soc_dai_ops wm8960_dai_ops = { .hw_params = wm8960_hw_params,.digital_mute = wm8960_mute,.set_fmt = wm8960_set_dai_fmt,.set_clkdiv = wm8960_set_dai_clkdiv,.set_pll = wm8960_set_dai_pll,};static struct snd_soc_dai_driver wm8960_dai = {.name = "wm8960-hifi",.playback = {.stream_name = "Playback",.channels_min = 1,.channels_max = 2,.rates = WM8960_RATES,.formats = WM8960_FORMATS,},.capture = {.stream_name = "Capture",.channels_min = 1,.channels_max = 2,.rates = WM8960_RATES,.formats = WM8960_FORMATS,},.ops = &wm8960_dai_ops,.symmetric_rates = 1,};static int wm8960_suspend(struct snd_soc_codec *codec){struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);wm8960->set_bias_level(codec, SND_SOC_BIAS_OFF);return 0;}static int wm8960_resume(struct snd_soc_codec *codec){struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);wm8960->set_bias_level(codec, SND_SOC_BIAS_STANDBY);return 0;}static int wm8960_probe(struct snd_soc_codec *codec){struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);struct wm8960_data *pdata = dev_get_platdata(codec->dev);int ret;wm8960->set_bias_level = wm8960_set_bias_level_out3;if (!pdata) {dev_warn(codec->dev, "No platform data supplied\n");} else {if (pdata->dres > WM8960_DRES_MAX) {dev_err(codec->dev, "Invalid DRES: %d\n", pdata->dres);pdata->dres = 0;}if (pdata->capless)wm8960->set_bias_level = wm8960_set_bias_level_capless;}ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8960->control_type);if (ret < 0) {。
浪潮存储系统AS500H用户手册V2.0

安全细则
1. 本系统中的电源设备可能会产生高电压和危险电能,从而导致人身伤害。请勿自行卸 下主机盖并拆装、更换系统内部的任何组件,除非另外得到浪潮的通知,否则只有经过浪潮培 训的维修技术人员才有权拆开主机盖及拆装、更换内部组件。
2. 请将设备连接到适当的电源,仅可使用额定输入标签上指明的外部电源类型为设备供 电,为保护您的设备免受电压瞬间升高或降低所导致的损坏,请使用相关的稳压设备或不间断 电源设备。
3. 如果必须使用延长电缆,请使用配有正确接地插头的三芯电缆,并查看延长电缆的额 定值,确保插入延长电缆的所有产品的额定电流总和不超过延长电缆额定电流限制的百分之八 十。
4. 请务必使用随机配备的供电组件如电源线、电源插座(如果随机配备)等,为了设备 及使用者的安全,不要随意更换电源电缆或插头。
5. 为防止系统漏电造成电击危险,务必将系统和外围设备的电源电缆插入已正确接地的 电源插座。请将 3 芯电源线插头插入接地良好、伸手可及的 3 芯交流电源插座中,务必使用电 源线的接地插脚,不要使用转接插头或拔下电缆的接地插脚,在未安装接地导线及不确定是否 已有适当接地保护的情况下,请勿操作使用本设备,可与电工联系咨询。
6. 切勿将任何物体塞入系统的开孔处。如果塞入物体,可能会导致内部组件短路而引起 火灾或电击。
7. 请将系统置于远离散热片和有热源的地方,切勿堵塞通风孔。 8. 切勿让食物或液体散落在系统内部或其它组件上,不要在高潮湿、高灰尘的环境中使 用产品。 9. 用错误型号的电池更换会有爆炸危险,需要更换电池时,请先向制造商咨询并使用制 造商推荐型号相同或相近的电池,切勿拆开、挤压、刺戳电池或使其外部接点短路,不要将其 丢入火中或水中,也不要暴露在温度超过 60 摄氏度的环境中,请勿尝试打开或维修电池,务必 合理处置用完的电池,不要将用完的电池及可能包含电池的电路板及其它组件与其它废品放在 一起,有关电池回收请与当地废品回收处理机构联系。
LinuxR安装

LinuxR安装安装方法有如下三种:一、源码安装1、下载R 安装包R-3.0.3.tar.gz /src/base/R-3/R-3.0.3.tar.gz2、解压tar xvf R-3.0.3.tar.gz3、./configure --enable-R-shlibcd R-3.0.3./configure --enable-R-shlib1)./configure 报错configure: error: No F77 compiler found解决方法:yum install gcc-gfortran2)./configure 报错configure: error: --with-readline=yes (default) and headers/libs are not available解决方法:yum install readline-devel3)./configure 报错configure: error: --with-x=yes (default) and X11 headers/libs are not available解决方法:yum install libXt-devel4)./configure 报错configure: error: C++ preprocessor '/lib/cpp' fails sanity check解决方法:yum install gcc-c++ glibc-headers4、make5、make install二、yum安装1、安装epel yum源(机器是OEL5.9 64bit系统,选择相应版本的epel源)1)安装rpm -ivh /epel/6/x86_64/epel-release-6-8.noarch.rpm2)查看# rpm -qa|grep epelepel-release-6-8.noarch3)导入KEYrpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-62、yum 安装R (在OEL5.9里只运行了下面的运行命令就完成了安装)yum install R三、rpm 包安装 (只能访问内网yum源,不能访问epel外部源)/epel/6/x86_64/R-3.0.2-1.el6.x86_64.rpm/epel/6/x86_64/R-devel-3.0.2-1.el6.x86_64.rpm/epel/6/x86_64/R-core-3.0.2-1.el6.x86_64.rpm/epel/6/x86_64/R-core-devel-3.0.2-1.el6.x86_64.rpm/epel/6/x86_64/R-java-3.0.2-1.el6.x86_64.rpm/epel/6/x86_64/R-java-devel-3.0.2-1.el6.x86_64.rpm/epel/6/x86_64/libRmath-3.0.2-1.el6.x86_64.rpm/epel/6/x86_64/libRmath-devel-3.0.2-1.el6.x86_64.rpm1)下载以上rpm包2)安装rpm包yum install libRmath-3.0.2-1.el6.x86_64.rpmyum install libRmath-devel-3.0.2-1.el6.x86_64.rpmyum install R-core-3.0.2-1.el6.x86_64.rpm报错Requires: libjpeg.so.62(LIBJPEG_6.2)(64bit)解决方法:(因为centos6.3 yum安装源中没有libjpeg-turbo) 下载 /project/libjpeg-turbo/1.2.1/libjpeg-turbo-1.2.1.x86_64.rpmrpm -ivh libjpeg-turbo-1.2.1.x86_64.rpmyum install R-core-devel-3.0.2-1.el6.x86_64.rpmyum install R-java-3.0.2-1.el6.x86_64.rpmyum install R-java-devel-3.0.2-1.el6.x86_64.rpmyum install R-3.0.2-1.el6.x86_64.rpm R-devel-3.0.2-1.el6.x86_64.rpm。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 使用uname -r 命令查看当前Linux系统的内核版本1.[root@test01 ~]# uname -r2. 2.6.18-128.el52. 下载RDAC驱动,登陆/sep/Pages/rdac/ds4000.aspx,/sep/Pages/rdac/rdac_4000_archive.aspx,找到与当前Linux 系统内核版本一致的RDAC驱动。
根据我实验中的版本,选择下载了Version 09.03.0C05.0331(rdac-LINUX-09.03.0C05.0331-source.tar.gz)3. 将rdac的安装包上传至~目录(root用户根目录)1.[root@test01 ~]# pwd2./root3.[root@test01 ~]# ls -l|greprdac4.-rw-r--r-- 1 root root 399735 Jun 20 19:33rdac-LINUX-09.03.0C05.0331-source.tar.gz4. 解压源码包1.[root@test01 ~]# tar -zxvf rdac-LINUX-09.03.0C05.0331-source.tar.gz2.[root@test01 ~]# ls -l|greprdac3.drwxr-xr-x 5 root root 4096 Apr 15 2010 linuxrdac-09.03.0C05.03314.-rw-r--r-- 1 root root 399735 Jun 20 19:33rdac-LINUX-09.03.0C05.0331-source.tar.gz5. 参考解压出来的目录中的Readme.txt文件,编译并安装RDAC软件Linux一定要安装下面的包(此段内容未经我验证):gccglibc-develkernel-headersglibc-headerslibgompkernel-devel或kernel-xen-devel(如果使用启用Xen的内核的话)1.[root@test01 linuxrdac-09.03.0C05.0331]# make2.make[1]: Entering directory `/usr/src/kernels/2.6.18-128.el5-x86_64' [M] /root/linuxrdac-09.03.0C05.0331/MPP_hba.o [M] /root/linuxrdac-09.03.0C05.0331/mppLnx26p_upper.o [M] /root/linuxrdac-09.03.0C05.0331/mppLnx26p_sysdep.o [M] /root/linuxrdac-09.03.0C05.0331/mppCmn_s2tos3.o [M] /root/linuxrdac-09.03.0C05.0331/mppCmn_SysInterface.o [M] /root/linuxrdac-09.03.0C05.0331/mppLnx26p_vhbamisc.o [M] /root/linuxrdac-09.03.0C05.0331/mppLnx26p_vhbatask.o10.C C [M] /root/linuxrdac-09.03.0C05.0331/mppLnx26p_vhba.o11.C C [M] /root/linuxrdac-09.03.0C05.0331/mppLnx26p_vhbaproc.o12.C C [M] /root/linuxrdac-09.03.0C05.0331/mppLnx26p_vhbalib.o13.C C [M] /root/linuxrdac-09.03.0C05.0331/mppLnx26p_vhbaio.o14.L D [M] /root/linuxrdac-09.03.0C05.0331/mppUpper.o15.L D [M] /root/linuxrdac-09.03.0C05.0331/mppVhba.o16.B uilding modules, stage 2.17.M ODPOST18.C C /root/linuxrdac-09.03.0C05.0331/mppUpper.mod.o19.L D [M] /root/linuxrdac-09.03.0C05.0331/mppUpper.ko20.C C /root/linuxrdac-09.03.0C05.0331/mppVhba.mod.o21.L D [M] /root/linuxrdac-09.03.0C05.0331/mppVhba.ko22.m ake[1]: Leaving directory `/usr/src/kernels/2.6.18-128.el5-x86_64'23.m ake[1]: Entering directory `/usr/src/kernels/2.6.18-128.el5-x86_64'24.B uilding modules, stage 2.25.M ODPOST26.m ake[1]: Leaving directory `/usr/src/kernels/2.6.18-128.el5-x86_64'27.g cc -I/root/linuxrdac-09.03.0C05.0331-I/root/linuxrdac-09.03.0C05.0331/mpp_linux_headers/-I/root/linuxrdac-09.03.0C05.0331/mpp_linux_sys_headers/-c ./utility/mppUtil.c -o mppUtil.o28./bin/bash ./genfileattributesbld29.g cc -I/root/linuxrdac-09.03.0C05.0331-I/root/linuxrdac-09.03.0C05.0331/mpp_linux_headers/-I/root/linuxrdac-09.03.0C05.0331/mpp_linux_sys_headers/-c ./utility/mppUtil26p_sysdep.c -o mppUtilSysdep.o30.g ccmppUtil.omppUtilSysdep.o -o mppUtil31.g cc -o genuniqueidgenuniqueid.c32.33.[root@test01 linuxrdac-09.03.0C05.0331]# make install34.m ake[1]: Entering directory `/usr/src/kernels/2.6.18-128.el5-x86_64'35.B uilding modules, stage 2.36.M ODPOST37.m ake[1]: Leaving directory `/usr/src/kernels/2.6.18-128.el5-x86_64'38.m ake[1]: Entering directory `/usr/src/kernels/2.6.18-128.el5-x86_64'39.B uilding modules, stage 2.40.M ODPOST41.m ake[1]: Leaving directory `/usr/src/kernels/2.6.18-128.el5-x86_64'42./bin/bash ./genfileattributesbld43.g cc -I/root/linuxrdac-09.03.0C05.0331-I/root/linuxrdac-09.03.0C05.0331/mpp_linux_headers/-I/root/linuxrdac-09.03.0C05.0331/mpp_linux_sys_headers/-c ./utility/mppUtil26p_sysdep.c -o mppUtilSysdep.o44.g ccmppUtil.omppUtilSysdep.o -o mppUtil45.C hecking Host Adapter Configuration...46.D etected 2 Emulex Host Adapter Port(s) on the system47.D etected 2 QLogic Host Adapter Port(s) on the system48.H ost Adapters from different supported vendors co-exists on your system.49.P lease wait while we modify the system configuration files.50.Y our kernel version is 2.6.18-128.el551.P reparing to install MPP driver against this kernel version...52.G enerating module dependencies...53.C reating new MPP initrd image...54.Y ou must now edit your boot loader configuration file, /boot/grub/menu.lst, to55.a dd a new boot menu, which uses mpp-2.6.18-128.el5.img as the initrd image.56.N ow Reboot the system for MPP to take effect.57.T he new boot menu entry should look something like this (note that it may58.v ary with different system configuration):59.60....61.62.t itle Red Hat Linux (2.6.18-128.el5) with MPP support63.r oot (hd0,5)64.k ernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=RH965.i nitrd /mpp-2.6.18-128.el5.img66....67.M PP driver package has been successfully installed on your system.请注意观察安装完成后的最后几行内容,意思是在/boot目录下会产生一个mpp-<version>.img的文件,并提示必须修改启动列表的文件"You must now edit your boot loader configuration file, /boot/grub/menu.lst…."。