[OSSCA] Linux Kernel Networking Stack #0 발대식 및 환경 설정

문연수·2024년 7월 15일
1

OSSCA

목록 보기
1/4
post-thumbnail

삽화 출처: https://www.contribution.ac/

0. 발대식

- 멘토 & 멘티 소개

Linux Kernel Networking Stack

멘토: 유태희님

- 모임 진행 방식

  • 진행: 격주로 온 & 오프라인 모임 병행.
  • 시간: 토요일 13시부터 모여서 학습 후 자유롭게 퇴실
  • 장소: TOZ 강남컨퍼런스 센터

1. 환경 구성

커널 빌드를 위한 Linux 환경, 커널 테스트를 위한 Linux 환경 구성

- 빌드 환경

 현 시점에서는 IBM Cloud 사용 예정. 08월 이후에는 호스트 머신으로 옮겨서 Native 환경에서 운영할 예정.

- 테스트 환경

 테스트 환경도 위와 동일한 호스트 머신. 빌드 환경 에서 빌드한 리눅스 커널을 QEMU 위에 올리고 NICbind 하여 실행.

* SR-IOV

SR-IOV (Single-Root I/O Virtualization) 는 단일 PCI Express(PCIe) 장치에서 VF (Virtual Function) 라는 여러 개의 개별 PCI 장치를 호스트 시스템에 제공할 수 있도록 하는 사양이다.

출처: https://docs.redhat.com/ko/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_virtualization/managing-sr-iov-devices_managing-virtual-devices

PCI: Peripheral Component Interconnect
VFIO: Virtual Function I/O
NIC: Network Interface Card

 솔직히 잘은 모르겠고 아무튼 NIC 가 이 기능을 지원해줘야 QEMU 에서 NIC 를 당겨 받아서 bind 할 수 있다는 것 같다. 일단 현 시점에서는 NICSR-IOV 지원 여부를 확인해야 한다.

- 생각 중인 장비

  • AMD Ryzen 5 Pro 4650G
  • MSI A520M-A PRO
    - 확장 PCIe 3.0 포트 지원 (NIC 용도)
    - 내장 Serial Port 지원 (Serial Console 용도)
  • DDR4 16GB RAM
  • 512GB SSD

* Internal Serial Port

출처: https://www.digikey.kr/ko/products/detail/startech.com/PNL9M16/21398508

 요즈음 나오는 메인보드는 Serial Port 를 외부로 빼지 않고 Internal Serial Port (10-pin) 만을 지원한다. 따라서 위의 경우 COM 포트 변환 장비를 따로 사용해야 한다.

2. 배경 지식

  1. 리눅스 커널 지식
  2. 네트워크 지식

추천서적: 리눅스 네트워크의 이해 (크리스찬 벤베누띠)
어찌저찌 간신히 중고로 구함. 사장님께서 감사하게도 군인이라고 배송비를 깎아주셨다 ^^

일단은 여기에 있는 글을 읽고 네트워크에 대한 배경지식을 확보할 예정.
https://d2.naver.com/helloworld/47667

3. 커널 및 rootfs 빌드

 사용할 리눅스 커널 네트워킹 스택은 netnet-next 이다. net branch 는 bugfix 용도로만 사용되며, 그 외의 모든 패치는 net-next 에서 진행된다.

net branch 는 2주에 한번 꼴로 토발즈 tree 로 PR 을 날리고, net-next 는 정식 릴리즈(non-RC) 될때만 PR 을 날리며 이는 대략 2~3달 정도이다.

https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/

- Kernel 빌드하기

* 다운로드

git clone https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
mv net linux-kernel

what?????

* 빌드

sudo dnf install bc

mkdir build
make ARCH=x86_64 O=build/ defconfig
make ARCH=x86_64 O=build/ -j$(nproc)

- rootfs 빌드하기

* buildroot 다운로드

# https://buildroot.org/download.html
wget https://buildroot.org/downloads/buildroot-2024.02.4.tar.gz
tar -xvzf buildroot-2024.02.4.tar.gz

rm buildroot-2024.02.4.tar.gz
mv buildroot-2024.02.4 buildroot

필자는 최신 버전으로 다운로드 받았다.

* 빌드

make qemu_x86_64_defconfig
make menuconfig
# System Configuration > Run a getty (login prompt) after boot >
# TTY port = ttyS0
make -j$(nproc)

엄청 오래 걸린다. 대략 1시간?

4. 실행

#/bin/bash
qemu-system-x86_64																	\
-M pc																				\
-kernel $HOME/linux-kernel/build/arch/x86_64/boot/bzImage							\
-drive file=$HOME/buildroot/output/images/rootfs.ext2,if=virtio,format=raw,id=hd0	\
-append "console=ttyS0 root=/dev/vda"												\
-net nic																			\
-nographic

 지금은 아쉽게도 클라우드 환경인지라 Host 머신의 NIC 를 당겨와도 여전히 가상 장치이다. 아무튼 여기까지가 환경 설정이다.

profile
2000.11.30

0개의 댓글