[device] as4630-54pe: update sfputil for get_transceiver_change_event. (#3315)
Signed-off-by: roy_lee <roy_lee@accton.com>
This commit is contained in:
parent
ee4ca2c0c5
commit
4d8a01c26c
@ -1,55 +1,55 @@
|
|||||||
# name lanes alias index
|
# name lanes alias index speed
|
||||||
Ethernet0 26 thousandE1 0
|
Ethernet0 26 thousandE1 1 1000
|
||||||
Ethernet1 25 thousandE2 1
|
Ethernet1 25 thousandE2 2 1000
|
||||||
Ethernet2 28 thousandE3 2
|
Ethernet2 28 thousandE3 3 1000
|
||||||
Ethernet3 27 thousandE4 3
|
Ethernet3 27 thousandE4 4 1000
|
||||||
Ethernet4 30 thousandE5 4
|
Ethernet4 30 thousandE5 5 1000
|
||||||
Ethernet5 29 thousandE6 5
|
Ethernet5 29 thousandE6 6 1000
|
||||||
Ethernet6 32 thousandE7 6
|
Ethernet6 32 thousandE7 7 1000
|
||||||
Ethernet7 31 thousandE8 7
|
Ethernet7 31 thousandE8 8 1000
|
||||||
Ethernet8 38 thousandE9 8
|
Ethernet8 38 thousandE9 9 1000
|
||||||
Ethernet9 37 thousandE10 9
|
Ethernet9 37 thousandE10 10 1000
|
||||||
Ethernet10 40 thousandE11 10
|
Ethernet10 40 thousandE11 11 1000
|
||||||
Ethernet11 39 thousandE12 11
|
Ethernet11 39 thousandE12 12 1000
|
||||||
Ethernet12 34 thousandE13 12
|
Ethernet12 34 thousandE13 13 1000
|
||||||
Ethernet13 33 thousandE14 13
|
Ethernet13 33 thousandE14 14 1000
|
||||||
Ethernet14 36 thousandE15 14
|
Ethernet14 36 thousandE15 15 1000
|
||||||
Ethernet15 35 thousandE16 15
|
Ethernet15 35 thousandE16 16 1000
|
||||||
Ethernet16 46 thousandE17 16
|
Ethernet16 46 thousandE17 17 1000
|
||||||
Ethernet17 45 thousandE18 17
|
Ethernet17 45 thousandE18 18 1000
|
||||||
Ethernet18 48 thousandE19 18
|
Ethernet18 48 thousandE19 19 1000
|
||||||
Ethernet19 47 thousandE20 19
|
Ethernet19 47 thousandE20 20 1000
|
||||||
Ethernet20 42 thousandE21 20
|
Ethernet20 42 thousandE21 21 1000
|
||||||
Ethernet21 41 thousandE22 21
|
Ethernet21 41 thousandE22 22 1000
|
||||||
Ethernet22 44 thousandE23 22
|
Ethernet22 44 thousandE23 23 1000
|
||||||
Ethernet23 43 thousandE24 23
|
Ethernet23 43 thousandE24 24 1000
|
||||||
Ethernet24 2 thousandE25 24
|
Ethernet24 2 thousandE25 25 1000
|
||||||
Ethernet25 1 thousandE26 25
|
Ethernet25 1 thousandE26 26 1000
|
||||||
Ethernet26 4 thousandE27 26
|
Ethernet26 4 thousandE27 27 1000
|
||||||
Ethernet27 3 thousandE28 27
|
Ethernet27 3 thousandE28 28 1000
|
||||||
Ethernet28 6 thousandE29 28
|
Ethernet28 6 thousandE29 29 1000
|
||||||
Ethernet29 5 thousandE30 29
|
Ethernet29 5 thousandE30 30 1000
|
||||||
Ethernet30 8 thousandE31 30
|
Ethernet30 8 thousandE31 31 1000
|
||||||
Ethernet31 7 thousandE32 31
|
Ethernet31 7 thousandE32 32 1000
|
||||||
Ethernet32 10 thousandE33 32
|
Ethernet32 10 thousandE33 33 1000
|
||||||
Ethernet33 9 thousandE34 33
|
Ethernet33 9 thousandE34 34 1000
|
||||||
Ethernet34 12 thousandE35 34
|
Ethernet34 12 thousandE35 35 1000
|
||||||
Ethernet35 11 thousandE36 35
|
Ethernet35 11 thousandE36 36 1000
|
||||||
Ethernet36 14 thousandE37 36
|
Ethernet36 14 thousandE37 37 1000
|
||||||
Ethernet37 13 thousandE38 37
|
Ethernet37 13 thousandE38 38 1000
|
||||||
Ethernet38 16 thousandE39 38
|
Ethernet38 16 thousandE39 39 1000
|
||||||
Ethernet39 15 thousandE40 39
|
Ethernet39 15 thousandE40 40 1000
|
||||||
Ethernet40 18 thousandE41 40
|
Ethernet40 18 thousandE41 41 1000
|
||||||
Ethernet41 17 thousandE42 41
|
Ethernet41 17 thousandE42 42 1000
|
||||||
Ethernet42 20 thousandE43 42
|
Ethernet42 20 thousandE43 43 1000
|
||||||
Ethernet43 19 thousandE44 43
|
Ethernet43 19 thousandE44 44 1000
|
||||||
Ethernet44 22 thousandE45 44
|
Ethernet44 22 thousandE45 45 1000
|
||||||
Ethernet45 21 thousandE46 45
|
Ethernet45 21 thousandE46 46 1000
|
||||||
Ethernet46 24 thousandE47 46
|
Ethernet46 24 thousandE47 47 1000
|
||||||
Ethernet47 23 thousandE48 47
|
Ethernet47 23 thousandE48 48 1000
|
||||||
Ethernet48 67 twentyfiveGigE49 48
|
Ethernet48 67 twentyfiveGigE49 49 25000
|
||||||
Ethernet49 66 twentyfiveGigE50 49
|
Ethernet49 66 twentyfiveGigE50 50 25000
|
||||||
Ethernet50 65 twentyfiveGigE51 50
|
Ethernet50 65 twentyfiveGigE51 51 25000
|
||||||
Ethernet51 68 twentyfiveGigE52 51
|
Ethernet51 68 twentyfiveGigE52 52 25000
|
||||||
Ethernet52 73,74,75,76 hundredGigE53 52
|
Ethernet52 73,74,75,76 hundredGigE53 53 100000
|
||||||
Ethernet56 69,70,71,72 hundredGigE54 56
|
Ethernet56 69,70,71,72 hundredGigE54 54 100000
|
||||||
|
@ -4,19 +4,24 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
import sys
|
||||||
import time
|
import time
|
||||||
|
import string
|
||||||
|
from ctypes import create_string_buffer
|
||||||
from sonic_sfp.sfputilbase import SfpUtilBase
|
from sonic_sfp.sfputilbase import SfpUtilBase
|
||||||
except ImportError as e:
|
except ImportError as e:
|
||||||
raise ImportError("%s - required module not found" % str(e))
|
raise ImportError("%s - required module not found" % str(e))
|
||||||
|
|
||||||
|
SFP_STATUS_INSERTED = '1'
|
||||||
|
SFP_STATUS_REMOVED = '0'
|
||||||
|
|
||||||
class SfpUtil(SfpUtilBase):
|
class SfpUtil(SfpUtilBase):
|
||||||
"""Platform-specific SfpUtil class"""
|
"""Platform-specific SfpUtil class"""
|
||||||
|
|
||||||
|
PORT_START = 49
|
||||||
PORT_START = 48
|
PORT_END = 54
|
||||||
PORT_END = 53
|
|
||||||
PORTS_IN_BLOCK = 54
|
PORTS_IN_BLOCK = 54
|
||||||
|
QSFP_START = 53
|
||||||
|
|
||||||
BASE_OOM_PATH = "/sys/bus/i2c/devices/{0}-0050/"
|
BASE_OOM_PATH = "/sys/bus/i2c/devices/{0}-0050/"
|
||||||
BASE_CPLD_PATH = "/sys/bus/i2c/devices/3-0060/"
|
BASE_CPLD_PATH = "/sys/bus/i2c/devices/3-0060/"
|
||||||
@ -26,12 +31,12 @@ class SfpUtil(SfpUtilBase):
|
|||||||
|
|
||||||
_port_to_eeprom_mapping = {}
|
_port_to_eeprom_mapping = {}
|
||||||
_port_to_i2c_mapping = {
|
_port_to_i2c_mapping = {
|
||||||
48: [18],
|
49: [18],
|
||||||
49: [19],
|
50: [19],
|
||||||
50: [20],
|
51: [20],
|
||||||
51: [21],
|
52: [21],
|
||||||
52: [22],
|
53: [22],
|
||||||
53: [23],
|
54: [23],
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -52,14 +57,9 @@ class SfpUtil(SfpUtilBase):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
eeprom_path = self.BASE_OOM_PATH + "eeprom"
|
eeprom_path = self.BASE_OOM_PATH + "eeprom"
|
||||||
|
for x in range(self.port_start, self.port_end+1):
|
||||||
for x in range(0, self.port_end+1):
|
|
||||||
if x < 48:
|
|
||||||
self.port_to_eeprom_mapping[x] = eeprom_path.format(0)
|
|
||||||
else:
|
|
||||||
self.port_to_eeprom_mapping[x] = eeprom_path.format(
|
self.port_to_eeprom_mapping[x] = eeprom_path.format(
|
||||||
self._port_to_i2c_mapping[x][0])
|
self._port_to_i2c_mapping[x][0])
|
||||||
|
|
||||||
SfpUtilBase.__init__(self)
|
SfpUtilBase.__init__(self)
|
||||||
|
|
||||||
def get_presence(self, port_num):
|
def get_presence(self, port_num):
|
||||||
@ -67,7 +67,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
if port_num < self.port_start or port_num > self.port_end:
|
if port_num < self.port_start or port_num > self.port_end:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
present_path = self.BASE_CPLD_PATH + "module_present_" + str(port_num+1)
|
present_path = self.BASE_CPLD_PATH + "module_present_" + str(port_num)
|
||||||
self.__port_to_is_present = present_path
|
self.__port_to_is_present = present_path
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -86,18 +86,111 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def get_low_power_mode(self, port_num):
|
def get_low_power_mode(self, port_num):
|
||||||
raise NotImplementedError
|
# Check for invalid port_num
|
||||||
|
if port_num < self.QSFP_START or port_num > self.port_end:
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
eeprom = None
|
||||||
|
if not self.get_presence(port_num):
|
||||||
|
return False
|
||||||
|
eeprom = open(self.port_to_eeprom_mapping[port_num], "rb")
|
||||||
|
eeprom.seek(93)
|
||||||
|
lpmode = ord(eeprom.read(1))
|
||||||
|
|
||||||
|
# if "Power override" bit is 1 and "Power set" bit is 1
|
||||||
|
if ((lpmode & 0x3) == 0x3):
|
||||||
|
return True
|
||||||
|
|
||||||
|
# High Power Mode if one of the following conditions is matched:
|
||||||
|
# 1. "Power override" bit is 0
|
||||||
|
# 2. "Power override" bit is 1 and "Power set" bit is 0
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
except IOError as e:
|
||||||
|
print "Error: unable to open file: %s" % str(e)
|
||||||
|
return False
|
||||||
|
finally:
|
||||||
|
if eeprom is not None:
|
||||||
|
eeprom.close()
|
||||||
|
time.sleep(0.01)
|
||||||
|
|
||||||
def set_low_power_mode(self, port_num, lpmode):
|
def set_low_power_mode(self, port_num, lpmode):
|
||||||
raise NotImplementedError
|
# Check for invalid port_num
|
||||||
|
if port_num < self.QSFP_START or port_num > self.port_end:
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
eeprom = None
|
||||||
|
if not self.get_presence(port_num):
|
||||||
|
return False # Port is not present, unable to set the eeprom
|
||||||
|
|
||||||
|
# Fill in write buffer
|
||||||
|
# 0x3:Low Power Mode, 0x1:High Power Mode
|
||||||
|
regval = 0x3 if lpmode else 0x1
|
||||||
|
|
||||||
|
buffer = create_string_buffer(1)
|
||||||
|
buffer[0] = chr(regval)
|
||||||
|
|
||||||
|
# Write to eeprom
|
||||||
|
eeprom = open(self.port_to_eeprom_mapping[port_num], "r+b")
|
||||||
|
eeprom.seek(93)
|
||||||
|
eeprom.write(buffer[0])
|
||||||
|
return True
|
||||||
|
except IOError as e:
|
||||||
|
print "Error: unable to open file: %s" % str(e)
|
||||||
|
return False
|
||||||
|
finally:
|
||||||
|
if eeprom is not None:
|
||||||
|
eeprom.close()
|
||||||
|
time.sleep(0.01)
|
||||||
|
|
||||||
def reset(self, port_num):
|
def reset(self, port_num):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def get_transceiver_change_event(self):
|
@property
|
||||||
"""
|
def _get_presence_bitmap(self):
|
||||||
TODO: This function need to be implemented
|
|
||||||
when decide to support monitoring SFP(Xcvrd)
|
bits = []
|
||||||
on this platform.
|
for x in range(self.port_start, self.port_end+1):
|
||||||
"""
|
bits.append(str(int(self.get_presence(x))))
|
||||||
raise NotImplementedError
|
|
||||||
|
rev = "".join(bits[::-1])
|
||||||
|
return int(rev,2)
|
||||||
|
|
||||||
|
data = {'present':0}
|
||||||
|
def get_transceiver_change_event(self, timeout=0):
|
||||||
|
port_dict = {}
|
||||||
|
|
||||||
|
if timeout == 0:
|
||||||
|
cd_ms = sys.maxint
|
||||||
|
else:
|
||||||
|
cd_ms = timeout
|
||||||
|
|
||||||
|
#poll per second
|
||||||
|
while cd_ms > 0:
|
||||||
|
reg_value = self._get_presence_bitmap
|
||||||
|
changed_ports = self.data['present'] ^ reg_value
|
||||||
|
if changed_ports != 0:
|
||||||
|
break
|
||||||
|
time.sleep(1)
|
||||||
|
cd_ms = cd_ms - 1000
|
||||||
|
|
||||||
|
if changed_ports != 0:
|
||||||
|
for port in range (self.port_start, self.port_end+1):
|
||||||
|
# Mask off the bit corresponding to our port
|
||||||
|
mask = (1 << (port - self.port_start))
|
||||||
|
if changed_ports & mask:
|
||||||
|
if (reg_value & mask) == 0:
|
||||||
|
port_dict[port] = SFP_STATUS_REMOVED
|
||||||
|
else:
|
||||||
|
port_dict[port] = SFP_STATUS_INSERTED
|
||||||
|
|
||||||
|
# Update cache
|
||||||
|
self.data['present'] = reg_value
|
||||||
|
return True, port_dict
|
||||||
|
else:
|
||||||
|
return True, {}
|
||||||
|
return False, {}
|
||||||
|
|
||||||
|
@ -180,8 +180,6 @@ class FanUtil(object):
|
|||||||
def get_fan_fault(self, fan_num):
|
def get_fan_fault(self, fan_num):
|
||||||
return self._get_fan_node_val(fan_num, self.FAN_NODE_FAULT_IDX_OF_MAP)
|
return self._get_fan_node_val(fan_num, self.FAN_NODE_FAULT_IDX_OF_MAP)
|
||||||
|
|
||||||
#def get_fan_speed(self, fan_num):
|
|
||||||
# return self._get_fan_node_val(fan_num, self.FAN_NODE_SPEED_IDX_OF_MAP)
|
|
||||||
|
|
||||||
def get_fan_dir(self, fan_num):
|
def get_fan_dir(self, fan_num):
|
||||||
return self._get_fan_node_val(fan_num, self.FAN_NODE_DIR_IDX_OF_MAP)
|
return self._get_fan_node_val(fan_num, self.FAN_NODE_DIR_IDX_OF_MAP)
|
||||||
@ -196,17 +194,9 @@ class FanUtil(object):
|
|||||||
|
|
||||||
content = val_file.readline().rstrip()
|
content = val_file.readline().rstrip()
|
||||||
val_file.close()
|
val_file.close()
|
||||||
|
|
||||||
return int(content)
|
return int(content)
|
||||||
#self._get_fan_node_val(fan_num, self.FAN_NODE_DUTY_IDX_OF_MAP)
|
|
||||||
#static u32 reg_val_to_duty_cycle(u8 reg_val)
|
|
||||||
#{
|
|
||||||
# reg_val &= FAN_DUTY_CYCLE_REG_MASK;
|
|
||||||
# return ((u32)(reg_val+1) * 625 + 75)/ 100;
|
|
||||||
#}
|
|
||||||
#
|
|
||||||
def set_fan_duty_cycle(self, val):
|
|
||||||
|
|
||||||
|
def set_fan_duty_cycle(self, val):
|
||||||
try:
|
try:
|
||||||
fan_file = open(self.FAN_DUTY_PATH, 'r+')
|
fan_file = open(self.FAN_DUTY_PATH, 'r+')
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
@ -217,9 +207,6 @@ class FanUtil(object):
|
|||||||
fan_file.close()
|
fan_file.close()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
#def get_fanr_fault(self, fan_num):
|
|
||||||
# return self._get_fan_node_val(fan_num, self.FANR_NODE_FAULT_IDX_OF_MAP)
|
|
||||||
|
|
||||||
def get_fanr_speed(self, fan_num):
|
def get_fanr_speed(self, fan_num):
|
||||||
return self._get_fan_node_val(fan_num, self.FANR_NODE_SPEED_IDX_OF_MAP)
|
return self._get_fan_node_val(fan_num, self.FANR_NODE_SPEED_IDX_OF_MAP)
|
||||||
|
|
||||||
@ -232,20 +219,5 @@ class FanUtil(object):
|
|||||||
logging.debug('GET. FAN fault. fan_num, %d', fan_num)
|
logging.debug('GET. FAN fault. fan_num, %d', fan_num)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
#if self.get_fanr_fault(fan_num) is not None and self.get_fanr_fault(fan_num) > 0:
|
|
||||||
# logging.debug('GET. FANR fault. fan_num, %d', fan_num)
|
|
||||||
# return False
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
#def main():
|
|
||||||
# fan = FanUtil()
|
|
||||||
#
|
|
||||||
# print 'get_size_node_map : %d' % fan.get_size_node_map()
|
|
||||||
# print 'get_size_path_map : %d' % fan.get_size_path_map()
|
|
||||||
# for x in range(fan.get_idx_fan_start(), fan.get_num_fans()+1):
|
|
||||||
# for y in range(fan.get_idx_node_start(), fan.get_num_nodes()+1):
|
|
||||||
# print fan.get_fan_to_device_path(x, y)
|
|
||||||
#
|
|
||||||
#if __name__ == '__main__':
|
|
||||||
# main()
|
|
||||||
|
@ -45,7 +45,6 @@ class ThermalUtil(object):
|
|||||||
""" Dictionary where
|
""" Dictionary where
|
||||||
key1 = thermal id index (integer) starting from 1
|
key1 = thermal id index (integer) starting from 1
|
||||||
value = path to fan device file (string) """
|
value = path to fan device file (string) """
|
||||||
#_thermal_to_device_path_mapping = {}
|
|
||||||
|
|
||||||
_thermal_to_device_node_mapping = {
|
_thermal_to_device_node_mapping = {
|
||||||
THERMAL_NUM_1_IDX: ['55', '48'],
|
THERMAL_NUM_1_IDX: ['55', '48'],
|
||||||
@ -121,11 +120,6 @@ def main():
|
|||||||
print "termal3=%d" %thermal._get_thermal_val(3)
|
print "termal3=%d" %thermal._get_thermal_val(3)
|
||||||
print "termal4=%d" %thermal._get_thermal_val(4)
|
print "termal4=%d" %thermal._get_thermal_val(4)
|
||||||
print "termal5=%d" %thermal._get_thermal_val(5)
|
print "termal5=%d" %thermal._get_thermal_val(5)
|
||||||
#
|
|
||||||
# print 'get_size_node_map : %d' % thermal.get_size_node_map()
|
|
||||||
# print 'get_size_path_map : %d' % thermal.get_size_path_map()
|
|
||||||
# for x in range(thermal.get_idx_thermal_start(), thermal.get_num_thermals()+1):
|
|
||||||
# print thermal.get_thermal_to_device_path(x)
|
|
||||||
#
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
@ -9,7 +9,6 @@ ExecStartPre=/usr/local/bin/accton_as4630_54pe_util.py install
|
|||||||
ExecStart=/usr/local/bin/accton_as4630_54pe_monitor.py
|
ExecStart=/usr/local/bin/accton_as4630_54pe_monitor.py
|
||||||
KillSignal=SIGKILL
|
KillSignal=SIGKILL
|
||||||
SuccessExitStatus=SIGKILL
|
SuccessExitStatus=SIGKILL
|
||||||
#StandardOutput=tty
|
|
||||||
|
|
||||||
# Resource Limitations
|
# Resource Limitations
|
||||||
LimitCORE=infinity
|
LimitCORE=infinity
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
Copyright (C) 2016 Accton Networks, Inc.
|
Copyright (C) 2019 Accton Networks, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
It under the terms of the GNU General Public License as published by
|
It under the terms of the GNU General Public License as published by
|
||||||
@ -13,79 +13,29 @@ See the GNU General Public License for more details.
|
|||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Contents of this package:
|
|
||||||
patch - files under patch/ is for kernel and ONIE installer
|
|
||||||
for the kernel:
|
|
||||||
config-accton-as5712_54x.patch
|
|
||||||
for kernel configuration.
|
|
||||||
driver-i2c-muxes-pca954x-always-deselect.patch
|
|
||||||
for i2c_mux deselects after transaction.
|
|
||||||
driver-patches-for-accton-as5712-fan-psu-cpld.patch
|
|
||||||
for as5712's fan/psu/cpld/led/sfp drivers.
|
|
||||||
for ONIE:
|
|
||||||
onie_installer-accton-AS5712-54X.patch
|
|
||||||
for console port setting and copy util script o rootfs.
|
|
||||||
module - Contains source code of as5712 kernel driver modules.
|
|
||||||
|
|
||||||
The late Sonic building scripts, pushed @Dec 5 2016, will automatically
|
|
||||||
create a docker container and run building process under it.
|
|
||||||
User is not necessary to handle docker environment creation.
|
|
||||||
|
|
||||||
1. Download sonic-buildimage environment.
|
|
||||||
- Run "git clone https://github.com/Azure/sonic-buildimage".
|
|
||||||
- cd to sonic-buildimage and run "git submodule update --init --recursive".
|
|
||||||
2. Build kernel
|
|
||||||
- cd ./src/sonic-linux-kernel
|
|
||||||
- Copy patches and series from patch/kernel of this release to
|
|
||||||
sonic-linux-kernel/patch.
|
|
||||||
- Build kernel by "make".
|
|
||||||
- The built kernel package, linux-image-3.16.0-5-amd64_3.16.51-3+deb8u1_amd64.deb
|
|
||||||
, is generated.
|
|
||||||
3. Build installer
|
|
||||||
- Change directory back to sonic-buildimage/.
|
|
||||||
- Get onie_installer-accton-AS5712-54X.patch" from patch/installer.
|
|
||||||
- Change setting for AS5712-54X by patching build_image.sh.
|
|
||||||
"patch -p1 < onie_installer-accton-AS5712-54X.patch"
|
|
||||||
!!NOTICE, patching onie_installer-accton-AS5712-54X.patch comments out the
|
|
||||||
"git status" checking at build_image.sh.
|
|
||||||
- The account and password of installed OS can be given at rules/config.
|
|
||||||
The default user and password are "admin" & "YourPaSsWoRd" respectively.
|
|
||||||
- Run "make configure PLATFORM=broadcom"
|
|
||||||
- Copy the built kernel debian package to target/debs/.
|
|
||||||
The file is linux-image-3.16.0-5-amd64_*_amd64.deb under directory
|
|
||||||
src/sonic-linux-kernel/.
|
|
||||||
- Run "make target/sonic-generic.bin"
|
|
||||||
- Get the installer, target/sonic-generic.bin, to target machine and install.
|
|
||||||
|
|
||||||
All Linux kernel code is licensed under the GPLv1. All other code is
|
All Linux kernel code is licensed under the GPLv1. All other code is
|
||||||
licensed under the GPLv3. Please see the LICENSE file for copies of
|
licensed under the GPLv3. Please see the LICENSE file for copies of
|
||||||
both licenses.
|
both licenses.
|
||||||
|
|
||||||
The code for integacting with Accton AS5712-54X has 2 parts,
|
The code for integacting with Accton AS4630-54pe has 2 parts,
|
||||||
kernel drivers and operational script.
|
kernel drivers and operational script.
|
||||||
The kernel drivers of peripherals are under module/ directory.
|
The kernel drivers of peripherals are under module/ directory.
|
||||||
1. These drivers are patched into kernel by
|
1. These drivers are at module dir.
|
||||||
driver-patches-for-accton-as5712-fan-psu-cpld.patch
|
2. A operational script, accton_as4630_util.py, for device initializatian and
|
||||||
Or you can build the driver under module/ by setting environment variable,
|
|
||||||
KERNEL_SRC, to proper linux built directory and run make.
|
|
||||||
It may be sonic-linux-kernel/linux-3.*/debian/build/build_amd64_none_amd64/.
|
|
||||||
2. A operational script, accton_as5712_util.py, for device initializatian and
|
|
||||||
peripheral accessing should be installed at /usr/bin.
|
peripheral accessing should be installed at /usr/bin.
|
||||||
This script is generated by onie_installer-accton-AS5712-54X.patch.
|
Run "accton_as4630_util.py install" to install drivers.
|
||||||
It's done by patching onie_installer-accton-AS5712-54X.patch at build-image.
|
|
||||||
Run "accton_as5712_util.py install" to install drivers.
|
|
||||||
|
|
||||||
To initialize the system, run "accton_as5712_util.py install".
|
To initialize the system, run "accton_as4630_util.py install".
|
||||||
To clean up the drivers & devices, run "accton_as5712_util.py clean".
|
To clean up the drivers & devices, run "accton_as4630_util.py clean".
|
||||||
To dump information of sensors, run "accton_as5712_util.py show".
|
To dump information of sensors, run "accton_as4630_util.py show".
|
||||||
To dump SFP EEPROM, run "accton_as5712_util.py sff".
|
To dump SFP EEPROM, run "accton_as4630_util.py sff".
|
||||||
To set fan speed, run "accton_as5712_util.py set fan".
|
To set fan speed, run "accton_as4630_util.py set fan".
|
||||||
To enable/disable SFP emission, run "accton_as5712_util.py set sfp".
|
To enable/disable SFP emission, run "accton_as4630_util.py set sfp".
|
||||||
To set system LEDs' color, run "accton_as5712_util.py set led"
|
To set system LEDs' color, run "accton_as4630_util.py set led"
|
||||||
For more information, run "accton_as5712_util.py --help".
|
For more information, run "accton_as4630_util.py --help".
|
||||||
|
|
||||||
====================================================================
|
====================================================================
|
||||||
Besides applying accton_as5712_util.py to access peripherals, you can
|
Besides applying accton_as4630_util.py to access peripherals, you can
|
||||||
access peripherals by sysfs nodes directly after the installation is run.
|
access peripherals by sysfs nodes directly after the installation is run.
|
||||||
|
|
||||||
System LED:
|
System LED:
|
||||||
|
Loading…
Reference in New Issue
Block a user