๐Ÿ› ๏ธAI ๋„๊ตฌ2026-01-28

ํ•˜๋“œ์›จ์–ด ์—†์ด ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋งˆ๋ฒ• ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ

๐Ÿ’ก ํ•œ์ค„ ์š”์•ฝ|ํ•˜๋“œ์›จ์–ด ์—†์ด ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋งˆ๋ฒ• ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ. ์œ ์ € ์ŠคํŽ˜์ด์Šค์—์„œ ๊ฐ€์งœ PCIe ์นด๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค.

Source: cakehonolulu/pciem

๐ŸŽฃ Hook: ๋ธ”๋ฃจ์Šคํฌ๋ฆฐ(Kernel Panic) ์—†๋Š” ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ?

๋ฆฌ๋ˆ…์Šค ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ์ž์˜ ์ผ์ƒ์€ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ํ•œ ์ค„ ์ž˜๋ชป ์งœ๋ฉด ์‹œ์Šคํ…œ์ด ๋ฉˆ์ถ”๊ณ , ์žฌ๋ถ€ํŒ…ํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ์š”. "ํ•˜๋“œ์›จ์–ด๊ฐ€ ์•„์ง ์•ˆ ๋‚˜์™”๋Š”๋ฐ ๋“œ๋ผ์ด๋ฒ„๋ถ€ํ„ฐ ์งœ์•ผ ํ•˜๋Š”" ์ƒํ™ฉ์ด๋ผ๋ฉด ๋” ๋ง‰๋ง‰ํ•ฉ๋‹ˆ๋‹ค.

PCIem์€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋“œ์›จ์–ด๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด(Userspace)๋กœ ์—๋ฎฌ๋ ˆ์ด์…˜ํ•˜์—ฌ, ๋ฆฌ๋ˆ…์Šค ์ปค๋„์ด "์•„, ์ง„์งœ PCIe ์นด๋“œ๊ฐ€ ๊ฝ‚ํ˜”๊ตฌ๋‚˜"๋ผ๊ณ  ์ฐฉ๊ฐํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ How-to: ์„ค์น˜ ๋ฐ ์‹คํ–‰

์ด ๋„๊ตฌ๋Š” ์ปค๋„ ๋ชจ๋“ˆ(pciem.ko)๊ณผ ์œ ์ € ์ŠคํŽ˜์ด์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: ๋นŒ๋“œ ๋ฐ ์ปค๋„ ๋ชจ๋“ˆ ๋กœ๋“œ

git clone https://github.com/cakehonolulu/pciem.git
cd pciem
make
sudo insmod kernel/pciem.ko

2๋‹จ๊ณ„: ๊ฐ€์งœ ๋””๋ฐ”์ด์Šค ๋งŒ๋“ค๊ธฐ (Userspace)

์œ ์ € ์ŠคํŽ˜์ด์Šค์—์„œ C ์ฝ”๋“œ๋กœ ๊ฐ€์งœ ํ•˜๋“œ์›จ์–ด์˜ ๋™์ž‘์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

// ๊ฐ€์งœ BAR(Base Address Register) ์„ค์ •
struct pciem_bar my_bar = {
    .size = 4096,
    .flags = PCI_BASE_ADDRESS_SPACE_MEMORY,
};

// ๊ฐ€์งœ ๋””๋ฐ”์ด์Šค ๋“ฑ๋ก
pciem_register_device(&my_dev);

์ด์ œ lspci ๋ช…๋ น์–ด๋ฅผ ์น˜๋ฉด ๋‹น์‹ ์ด ๋งŒ๋“  ๊ฐ€์งœ ๋””๋ฐ”์ด์Šค๊ฐ€ ๋ฆฌ์ŠคํŠธ์— ๋œน๋‹ˆ๋‹ค!

๐Ÿง  The Strategy: ์•„ํ‚คํ…์ฒ˜์˜ ๋ฏธํ•™

1. ํ•˜๋“œ์›จ์–ด ๋กœ์ง์„ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๊ฒฉ๋ฆฌ

์ผ๋ฐ˜์ ์ธ ์—๋ฎฌ๋ ˆ์ดํ„ฐ(QEMU ๋“ฑ)๋Š” ์ „์ฒด ์‹œ์Šคํ…œ์„ ๊ฐ€์ƒํ™”ํ•˜์ง€๋งŒ, PCIem์€ Host OS ์œ„์—์„œ ํŠน์ • ๋””๋ฐ”์ด์Šค๋งŒ ๊ฐ€์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • ์žฅ์ : ์—๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ๋А๋ฆฐ ์†๋„ ์—†์ด, ๋„ค์ดํ‹ฐ๋ธŒ ์†๋„๋กœ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ™œ์šฉ: ์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์€ ASIC ์นฉ์„ ์œ„ํ•œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋ฏธ๋ฆฌ ๊ฐœ๋ฐœํ•  ๋•Œ ์ตœ์ ์ž…๋‹ˆ๋‹ค.

2. ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ์ง€์›

๋‹จ์ˆœํžˆ ๋ ˆ์ง€์Šคํ„ฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ๋งŒ ํ‰๋‚ด ๋‚ด๋Š” ๊ฒŒ ์•„๋‹™๋‹ˆ๋‹ค.

  • DMA(Direct Memory Access): ๊ฐ€์งœ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ์ฒ™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (IOMMU ์ง€์›)
  • Interrupts: MSI/MSI-X ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋“œ๋ผ์ด๋ฒ„์˜ ISR(์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ)์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MAX5์˜ ์ƒ๊ฐ ๐ŸŽฏ

๐Ÿ‘จโ€๐Ÿ’ป ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ ๋ ˆ์‹œํ”ผ

Claude์—๊ฒŒ ๊ฐ€์งœ ํ•˜๋“œ์›จ์–ด ์ŠคํŽ™์„ ๋˜์ ธ์ฃผ๊ณ  ๋“œ๋ผ์ด๋ฒ„ ์ดˆ์•ˆ์„ ์งœ๋ผ๊ณ  ํ•ด๋ด. "๊ฐ€์ƒ์˜ 10G ๋„คํŠธ์›Œํฌ ์นด๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์–ด. PCIem ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ, ํŒจํ‚ท์„ ๋ฐ›์œผ๋ฉด ๋กœ๊ทธ๋ฅผ ์ฐ๊ณ  ํ๊ธฐํ•˜๋Š” ๊ฐ„๋‹จํ•œ Userspace C ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค˜."

๐Ÿ’ธ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ์•„์ด๋””์–ด

"Driver Dojo": ์‹ค์ œ ํ•˜๋“œ์›จ์–ด ์—†์ด ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋“œ๋ผ์ด๋ฒ„ ์ž‘์„ฑ์„ ์—ฐ์Šตํ•  ์ˆ˜ ์žˆ๋Š” ๊ต์œก์šฉ ํ”Œ๋žซํผ. "์˜ค๋Š˜์€ ๊ฐ€์งœ ์‚ฌ์šด๋“œ์นด๋“œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”" ๊ฐ™์€ ๋ฏธ์…˜์„ ์ฃผ๋Š” ๊ฑฐ์ง€.


์นดํ…Œ๊ณ ๋ฆฌ: ai_tools, ``

์ด ๊ธ€์ด ์–ด๋• ๋‚˜์š”?