BMC_RD450X_MLK_Baidu_V3.24.1145_SVT
/*******************************************************************************
* Release Information
* Project: Lenovo-RD450X-MLK-Baidu
* Version: 3.24.1145
* Date: 2016-12-19
********************************************************************************/
Features:
- картинка работает
- прошивка BIOS работает
- управление питанием работает
Screenshot

Проблемы и их решение
Белый экран в хроме
Открой фаерфоксом
Какой логин/пасс?
По умолчанию ADMIN:ADMIN (именно капсом)
Не могу получить картинку через джаву
Полный мануал что и как можно посмотреть тут
Если вставляю в dedicated порт кабель, то bmc не стартует
Скорее всего физически умер порт даже если радостно мигает светодиодами. Используйте только shared порт или из системы через ipmi_si.
dmesg
С одним шеред шнурком ака eth0
# ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:00:00:00:00:11 brd ff:ff:ff:ff:ff:ff
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 6c:0b:84:d7:09:ce brd ff:ff:ff:ff:ff:ff
5: sit0: <NOARP> mtu 1480 qdisc noop state DOWN
link/sit 0.0.0.0 brd 0.0.0.0
6: ip6tnl0: <NOARP> mtu 1460 qdisc noop state DOWN
link/tunnel6 :: brd ::
7: eth0.401@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1496 qdisc noqueue state UP
link/ether 00:00:00:00:00:11 brd ff:ff:ff:ff:ff:ff
Воткнул и дедикейтед ака eth1
# ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:00:00:00:00:11 brd ff:ff:ff:ff:ff:ff
4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 6c:0b:84:d7:09:ce brd ff:ff:ff:ff:ff:ff
5: sit0: <NOARP> mtu 1480 qdisc noop state DOWN
link/sit 0.0.0.0 brd 0.0.0.0
6: ip6tnl0: <NOARP> mtu 1460 qdisc noop state DOWN
link/tunnel6 :: brd ::
7: eth0.401@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1496 qdisc noqueue state UP
link/ether 00:00:00:00:00:11 brd ff:ff:ff:ff:ff:ff
Отвал по вачдогу и смерть до сброса питания
# dmesg
...
<4>------------[ cut here ]------------
<4>WARNING: at net/sched/sch_generic.c:226 dev_watchdog+0x13c/0x224()
<6>NETDEV WATCHDOG: eth1 (): transmit timed out
<4>Modules linked in: watchdog_hw pwmtach_hw peci_hw kcs_hw i2c_hw gpio_hw cipher_hw bt_hw adc_hw ncsi watchdog uartroute sdhc_hw hid usb0_hw cipher adc hdisk floppy cdrom usb1_hw iUSB videocap bt pwmtach gpio kcs peci usbe cpld_hw jtag_hw reset_hw jtag reset helper platform netmon
<4>[<c02d9138>] (dump_stack+0x0/0x14) from [<c0037c2c>] (warn_slowpath+0x5c/0x78)
<4>[<c0037bd0>] (warn_slowpath+0x0/0x78) from [<c022f2c8>] (dev_watchdog+0x13c/0x224)
<4> r3:ccc43000 r2:c038c38f
<4> r5:c03ec730 r4:ccc43000
<4>[<c022f18c>] (dev_watchdog+0x0/0x224) from [<c0040af8>] (run_timer_softirq+0x14c/0x1d4)
<4> r6:cc33c000 r5:00000100 r4:c03d9500
<4>[<c00409ac>] (run_timer_softirq+0x0/0x1d4) from [<c003c804>] (__do_softirq+0x74/0x120)
<4> r7:00000100 r6:cc33c000 r5:c03d93e0 r4:00000041
<4>[<c003c790>] (__do_softirq+0x0/0x120) from [<c003cbfc>] (irq_exit+0x48/0x50)
<4> r8:0000000a r7:42085fcd r6:00010000 r5:00000010 r4:00000000
<4>[<c003cbb4>] (irq_exit+0x0/0x50) from [<c0028064>] (__exception_text_start+0x64/0x80)
<4>[<c0028000>] (__exception_text_start+0x0/0x80) from [<c0028c64>] (__irq_usr+0x44/0x120)
<4>Exception stack(0xcc33dfb0 to 0xcc33dff8)
<4>dfa0: 00000001 00000000 0000000a 00000000
<4>dfc0: 00000001 00000000 40fc1094 42085fcd 0000000a 00000000 40fc112c 42085e70
<4>dfe0: 00000000 42085e08 40f5ce58 40f5d198 80000010 ffffffff
<4> r5:fe6c0000 r4:ffffffff
<4>---[ end trace 99f0d631d2e5e8bd ]---
<4>eth1: transmit timed out
BMC умер совсем и никак не получается достучаться до него
Прошить bmc можно либо прищепкой, либо сервисной утилитой ASPEED iRMP SOC Flash.
Dumps
Download BMC_RD450X_MLK_Baidu_V3.24.1145_SVT.tar.gz
Получение рутового шелла
Способ был проверен на этой версии, но уверен что и с другими поедет!
Скачиваем config_sh.bak, заливаем его через Maintenance => Backup/Restore Configuration, идём по ssh на bmc и вуаля.
$ ssh -oHostKeyAlgorithms=+ssh-dss sysadmin@192.168.1.212
sysadmin@192.168.1.149's password: superuser
Executing [-/bin/sh]
BusyBox v1.13.2 (2016-12-19 15:55:17 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
# uname -a
Linux 2.6.28.10-ami #1 Mon Dec 19 15:59:10 CST 2016 armv5tejl unknown
Подробнее о том как это работает: bak2shell.
Manual fan control
Для вертушек смотрите блок 3.3 Set Fan Configuration Command in Lenovo BMC Command List V0.1.1
Общий концепт такой:
public enum LenovoIpmiFanType
{
ALL = 0,
SYS_FAN1 = 1,
SYS_FAN2 = 2,
SYS_FAN3 = 3,
SYS_FAN4 = 4,
CPU_FAN1 = 5,
CPU_FAN2 = 6,
}
public async Task SetFanSpeedAsync(LenovoIpmiFanType fan, int percentage)
{
if (percentage > 100)
percentage = 100;
if (percentage < 0)
percentage = 100;
$"ipmitool raw 0x2e 0x30 00 {(int)fan} {percentage}";
}
Networking
| ipmi channel | purpose | mac label | UBoot IF |
|---|---|---|---|
| 1 | shared | верхняя наклейка IPMI: XX:XX:XX:XX:XX:XX | ethaddr |
| 8 | dedicated | нижняя наклейка IPMI: XX:XX:XX:XX:XX:XX | eth1addr |
MAC repair
После прошивки не из web ui нужно восстановить MAC'и. На данный момент получилось это сделать простым способом через ipmitools (вариант с 1 MAC'ом) и более муторным с изменением UBoot env (все MAC'и).
Для более муторного варианта ниже есть уже готовая таблица разделов и 11-boot-env.json в который нужно только вставить указать MAC'и и вшить в файл для прошивки с этой странички.
{
"partitions": [
{
// uboot env
"fileName": "11-boot-env.bin",
"beginAddress": "0x00030000",
"endAddress": "0x00040000",
}
]
}
{
"size": 65536,
"paddingSize": 4,
"hash": 1817084383,
"hashMatched": true,
"variables": {
"bootcmd": "bootfmh",
"bootdelay": "3",
"baudrate": "0x9600",
"loads_echo": "1",
"ethaddr": "6c:0b:84:d7:09:cd", // change to shared
"eth1addr": "6c:0b:84:d7:09:ce", // change to dedicated
"autoload": "no",
"bootselector": "1",
"recentlyprogfw": "1",
"do_memtest": "0",
"memtest_pass": "idle",
"stdin": "serial",
"stdout": "serial",
"stderr": "serial",
"ethact": "ast_eth0"
}
}
Разметка флеша
partitions table
{
"partitions": [
{
// uboot
"fileName": "10-boot.bin",
"beginAddress": "0x00000000",
"endAddress": "0x0002F198"
},
{
// uboot env
"fileName": "11-boot-env.bin",
"beginAddress": "0x00030000",
"endAddress": "0x00040000",
},
{
// mount as '/conf' (jffs2)
"fileName": "20-conf.bin",
"beginAddress": "0x00050000",
"endAddress": "0x000C0000"
},
{
// mount as '/bkupconf' (jffs2)
"fileName": "30-conf.bin",
"beginAddress": "0x000D0000",
"endAddress": "0x00140000"
},
{
// mount as '/' (uimage ramdisk)
"fileName": "40-root-header.bin",
"beginAddress": "0x00150000",
"endAddress": "0x01252040"
},
// Откуда инфо что это uimage header + cramfs? Это заметка от меня из будущего который уже посмотрел внутрь через binwalk
{
// mount as '/' (uimage header)
"fileName": "41-root-header.bin",
"beginAddress": "0x00150000",
"endAddress": "0x00150040"
},
{
// mount as '/' (uimage content (cramfs))
"fileName": "42-root-content.bin",
"beginAddress": "0x00150040",
"endAddress": "0x01252040"
},
{
// kernel (uimage)
"fileName": "50-osimage.bin",
"beginAddress": "0x01260040",
"endAddress": "0x0143A02C"
},
{
// mount as '/usr/local/www' (cramfs)
"fileName": "60-www.bin",
"beginAddress": "0x01450000",
"endAddress": "0x01670000"
},
{
// build info (string)
"fileName": "70-ast2400e.bin",
"beginAddress": "0x01FF0040",
"endAddress": "0x01FF00B4"
}
]
}