요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
==============================
IPMB Driver for a Satellite MC
==============================
The Intelligent Platform Management Bus or IPMB, is an
I2C bus that provides a standardized interconnection between
different boards within a chassis. This interconnection is
between the baseboard management (BMC) and chassis electronics.
IPMB is also associated with the messaging protocol through the
IPMB bus.
The devices using the IPMB are usually management
controllers that perform management functions such as servicing
the front panel interface, monitoring the baseboard,
hot-swapping disk drivers in the system chassis, etc...
When an IPMB is implemented in the system, the BMC serves as
a controller to give system software access to the IPMB. The BMC
sends IPMI requests to a device (usually a Satellite Management
Controller or Satellite MC) via IPMB and the device
sends a response back to the BMC.
For more information on IPMB and the format of an IPMB message,
refer to the IPMB and IPMI specifications.
IPMB driver for Satellite MC
----------------------------
ipmb-dev-int - This is the driver needed on a Satellite MC to
receive IPMB messages from a BMC and send a response back.
This driver works with the I2C driver and a userspace
program such as OpenIPMI:
1) It is an I2C slave backend driver. So, it defines a callback
function to set the Satellite MC as an I2C slave.
This callback function handles the received IPMI requests.
2) It defines the read and write functions to enable a user
space program (such as OpenIPMI) to communicate with the kernel.
Load the IPMB driver
--------------------
The driver needs to be loaded at boot time or manually first.
First, make sure you have the following in your config file:
CONFIG_IPMB_DEVICE_INTERFACE=y
1) If you want the driver to be loaded at boot time:
a) Add this entry to your ACPI table, under the appropriate SMBus::
Device (SMB0) // Example SMBus host controller
{
Name (_HID, "<Vendor-Specific HID>") // Vendor-Specific HID
Name (_UID, 0) // Unique ID of particular host controller
:
:
Device (IPMB)
{
Name (_HID, "IPMB0001") // IPMB device interface
Name (_UID, 0) // Unique device identifier
}
}
b) Example for device tree::
&i2c2 {
status = "okay";
ipmb@10 {
compatible = "ipmb-dev";
reg = <0x10>;
i2c-protocol;
};
};
If xmit of data to be done using raw i2c block vs smbus
then "i2c-protocol" needs to be defined as above.
2) Manually from Linux::
modprobe ipmb-dev-int
Instantiate the device
----------------------
After loading the driver, you can instantiate the device as
described in 'Documentation/i2c/instantiating-devices.rst'.
If you have multiple BMCs, each connected to your Satellite MC via
a different I2C bus, you can instantiate a device for each of
those BMCs.
The name of the instantiated device contains the I2C bus number
associated with it as follows::
BMC1 ------ IPMB/I2C bus 1 ---------| /dev/ipmb-1
Satellite MC
BMC1 ------ IPMB/I2C bus 2 ---------| /dev/ipmb-2
For instance, you can instantiate the ipmb-dev-int device from
user space at the 7 bit address 0x10 on bus 2::
# echo ipmb-dev 0x1010 > /sys/bus/i2c/devices/i2c-2/new_device
This will create the device file /dev/ipmb-2, which can be accessed
by the user space program. The device needs to be instantiated
before running the user space program.
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
IPMB와 Satellite MC
1-25문서 제목은 `IPMB Driver for a Satellite MC`입니다. IPMB(Intelligent Platform Management Bus)는 chassis 안의 서로 다른 board를 standardized 방식으로 연결하는 I2C bus입니다. Baseboard Management Controller(BMC)와 chassis electronics를 연결하며 IPMB bus 위 messaging protocol도 함께 정의됩니다.
IPMB device는 보통 front panel interface 처리, baseboard monitoring, system chassis의 disk drive hot-swap 같은 management function을 수행하는 management controller입니다.
System에 IPMB를 구현하면 BMC가 controller가 되어 system software에 IPMB access를 제공합니다. BMC는 IPMB를 통해 device, 보통 Satellite Management Controller(Satellite MC)에 IPMI request를 보내고 device는 BMC에 response를 반환합니다. Message format 상세는 IPMB와 IPMI specification을 참조해야 합니다.
System software에서 Satellite MC까지의 management message 경로입니다.
Satellite MC용 ipmb-dev-int
26-41`ipmb-dev-int`는 Satellite MC에서 BMC의 IPMB message를 받고 response를 돌려보내는 데 필요한 driver입니다. I2C driver와 OpenIPMI 같은 userspace program과 함께 동작합니다.
첫째, I2C slave backend driver로서 Satellite MC를 I2C slave로 설정하는 callback을 정의하고 그 callback이 수신한 IPMI request를 처리합니다. 둘째, OpenIPMI 같은 userspace program이 kernel과 통신하도록 read·write function을 정의합니다.
Bus-facing backend와 userspace-facing file operation을 구분합니다.
Boot-time driver load
42-80Driver는 boot 때 또는 수동으로 먼저 load해야 합니다. Kernel config에는 `CONFIG_IPMB_DEVICE_INTERFACE=y`가 필요합니다.
Boot-time load를 원하면 적절한 SMBus 아래 ACPI table에 vendor-specific host controller와 HID `IPMB0001`인 IPMB device를 추가할 수 있습니다.
Device (SMB0) // Example SMBus host controller
{
Name (_HID, "<Vendor-Specific HID>") // Vendor-Specific HID
Name (_UID, 0) // Unique ID of particular host controller
:
:
Device (IPMB)
{
Name (_HID, "IPMB0001") // IPMB device interface
Name (_UID, 0) // Unique device identifier
}
}
Device Tree에서는 I2C controller 아래 `ipmb@10` node에 `compatible = "ipmb-dev"`, `reg = <0x10>`, optional `i2c-protocol` property를 정의합니다.
&i2c2 {
status = "okay";
ipmb@10 {
compatible = "ipmb-dev";
reg = <0x10>;
i2c-protocol;
};
};
Data transmit에 SMBus 대신 raw I2C block을 사용하려면 위와 같이 `i2c-protocol`을 정의해야 합니다.
ACPI와 Device Tree 방식의 핵심 identifier입니다.
Linux에서 수동 load
81-85Linux에서 수동으로 load하려면 `modprobe ipmb-dev-int`를 실행합니다.
modprobe ipmb-dev-int
Module load 뒤 device instantiation으로 이어집니다.
IPMB device instantiation
86-101Driver를 load한 뒤 `Documentation/i2c/instantiating-devices.rst`에 설명된 방식으로 device를 instantiate합니다. 여러 BMC가 각각 다른 I2C bus로 Satellite MC에 연결되면 BMC마다 device를 하나씩 instantiate할 수 있습니다.
Instantiated device 이름에는 연결된 I2C bus number가 들어갑니다. 원문의 ASCII topology를 그대로 보존하고 같은 구조를 표로 다시 나타냈습니다.
BMC1 ------ IPMB/I2C bus 1 ---------| /dev/ipmb-1
Satellite MC
BMC1 ------ IPMB/I2C bus 2 ---------| /dev/ipmb-2
Satellite MC가 bus별 character device를 노출합니다.
서로 다른 bus가 같은 Satellite MC의 별도 device node로 연결됩니다.
Userspace instantiation example
102-109예를 들어 bus 2의 7-bit address `0x10`에 `ipmb-dev-int` device를 userspace에서 instantiate하려면 `new_device`에 `ipmb-dev 0x1010`을 씁니다.
# echo ipmb-dev 0x1010 > /sys/bus/i2c/devices/i2c-2/new_device
그러면 userspace program이 접근할 `/dev/ipmb-2`가 생성됩니다. Userspace program을 실행하기 전에 device를 instantiate해야 합니다.
Driver load에서 OpenIPMI access 전까지의 순서입니다.
요약과 해설
ipmb.rst:1-109IPMB는 chassis 내부 BMC와 management controller를 잇는 I2C 기반 management bus입니다. Satellite MC의 ipmb-dev-int는 I2C slave backend와 userspace read/write interface를 제공하며 각 BMC bus별로 /dev/ipmb-N device를 instantiate합니다.