Kernel12 module signing Device driver 설치 과정에서 아래의 Error Message가 출력되는 경우my_driver: module verification failed: signature and/or required key missing - tainting kernel 아래 2개의 Configuration 활성화 되어 있으면, signing 되지 않은 module의 install을 허용하지 않는다.CONFIG_MODULE_SIG=yCONFIG_MODULE_SIG_SHA512=y 다음 명령어를 이용해서 Kernel build 時 생성된 key를 이용해서 signing 가능하다.kernel_path/scripts/sign-file kernel_path/sha512 certs/signing_key.pem kernel_pat.. 2024. 9. 21. Scatter Gather List scatterlist CPU 및 Device 관점에서의 address와 length 정보 (page 內 offset 정보 포함) page_link 기능 SG_CHAIN 설정 時, 현재 sgl은 데이터를 포함하지 않은 link 用 sgl SG_END 설정 時, 현재 sgl은 마지막 sgl이며 data를 가르키고 있음 CHAIN이 아닌 경우, page_link는 첫번째 page 정보를 가르킴 SGL Type non-chained SGL 여러개의 SGL이 연속적으로 위치 SG_MAX_SINGLE_ALLOC : non-chained SGL의 최대 크기 해당값 초과 時, 자동으로 chained-SGL 적용 chained SGL 하나의 chain 內 SGL은 연속적으로 위치 마지막 SGL은 chain을 연결하는 기.. 2024. 4. 10. Block IO 분석 Kernel의 Block Layer 내용 정리 Storage IO Framework File System Layer Disk와 Memory 사이의 Mapping 작업 수행 Search 및 Access를 위한 Data 저장 未 구성 Block Layer File System 요청에 따라 Data를 전달 IO Scheduling 기능을 이용하여 요청을 병합/분할 SCSI Layer Data 전송 기능을 수행하며 SCSI Disk 식별 일반적인 임베디드 환경에서는 SCSI Layer 도움 없이 Device로 바로 연결 LLDD (Low Level Device Dirver) Data 전송 기능을 수행하며 특정 Device 구동 기능 제공 IO submit/complete 각 Layer는 하위에 요청을 전달할때 .. 2024. 3. 24. [QEMU] ARM64 Ubuntu - Custom Kernel 목적QEMU를 이용한 Ubuntu ARM64 가상화Custom Kernel Build / Run 환경Host : Ubuntu 22.04.3 LTS (x86_64) - jammyGuest : Ubuntu 22.04.3 LTS (arm64) - jammy먼저 아래 링크의 결과로 Guest OS 설치 및 부팅에 성공한 상황을 가정[QEMU] ARM64 Ubuntu (with Bridge Network) (tistory.com) [QEMU] ARM64 Ubuntu (with Bridge Network)목적 QEMU를 이용한 Ubuntu ARM 가상화 Guest OS의 네트워크 설정 (Host와 동일한 네트워크 사용) Host와 Guest의 공유 디렉토리 설정 환경 Host : Ubuntu 22.10 (x86_6.. 2024. 2. 5. [QEMU][RaspberryPi] RPI 3B+ Emulation (arm64) 목적 QEMU를 이용해서 Raspberry Pi 3B+ 가상화 Host : Ubuntu v22.10 (x86_64) Target : Raspberry Pi 3B+ (arm64) QEMU Source Code 다운로드 현 시점 우분투 패키지에서 배포되고 있는 QEMU v7.0은 최신 Raspberry Pi Kernel의 Fram Buffer와 호환성이 맞지 않기 때문에, Soruce Code 다운로드 하여 v7.2로 직접 빌드한다. git clone https://gitlab.com/qemu-project/qemu.git cd qemu/ git tag | grep 7.2 git checkout v7.2.0-rc4 cd .. QEMU Build Build Dependency 설치 sudo apt-get bu.. 2024. 2. 5. [QEMU][GDB] Kernel Debugging (arm64) 목적 QEMU & GDB를 이용해서 Kernel Debugging HW 가상화 기능을 이용 : Host/Target이 서로 다른 상황(Host: Ubuntu x86, Target: arm64) QEMU arm64 실행방법 QEMU의 HW 가상화 기능을 이용해서 arm64 kernel을 실행하는 방법은 아래 링크 참조 [QEMU][BusyBox] MainLine Kernel Emulation(arm64) (tistory.com) [QEMU][BusyBox] MainLine Kernel Emulation(arm64) 목적 MainLine Kernel(=Vanilla)를 가상머신에서 구동 Cross Compile 및 HW 가상화 사용 (Host:Ubuntu x64, Target:arm64) QEMU 및 Bus.. 2024. 2. 5. [QEMU][BusyBox] MainLine Kernel Emulation(arm64) 목적 MainLine Kernel(=Vanilla)를 가상머신에서 구동 Cross Compile 및 HW 가상화 사용 (Host:Ubuntu x64, Target:arm64) QEMU 및 BusyBox 사용 Kernel Build Build Dependency 설치 Kernel Build Dependency 설치 및 CrossComplier 설치 sudo apt-get build-dep linux linux-image-$(uname -r) sudo apt-get install libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf llvm sudo apt-get.. 2024. 2. 5. kwork 사용 例 kernel work interface를 이용하여 worker thread를 생성하는 방법 (kernel module)매 1초마다 thread 실행 /* * example_work.c */#include #include #include #define TEST_WORK_QUEUE_NAME "Test_Work_Queue"#define TEST_WORK_PERIOD (1 * HZ) // every 1 secstatic ulong test_number_iteration;static bool test_work_die;static void test_work_handler(struct work_struct * wrk);static struct workqueue_struct *test_workqueue;static D.. 2024. 2. 2. Device Tree 분석 (Kernel Source) .dts파일은 컴파일 후, HexFile로 생성된다. 해당 HexFile을 Linux Kernel이 Parsing 하면 아래그림과 같이 Tree 구조를 가진다. Linux Source Code 흐름을 따라가보면 아래 그림과 같다. 동일한 내용을 텍스트로 작성. setup_arch(&command_line) setup_machine_fdt(__atags_pointer) | 인수로 전달받은 디바이스 트리(fdt)가 물리 주소에 있는지 검색 | 해당 machine을 찾고 machine_desc구조체 포인터로 알아온다 | 디바이스 트리로부터 초기 부트업 과정에 미리(early) 설정해야 정보를 얻어온다 | 초기 정보에는 커맨드 라인 정보나 메모리 정보가 있다 early_init_dt_verify(phys_to_.. 2024. 2. 2. Device Tree 문법 개요 PC에서는 BIOS가 있어서 하드웨어 장치가 변경되면 자동적으로 검출하여 동작하도록 해주는 작업이 쉽다. ARM 프로세서는 BIOS가 없어서 리눅스 커널이 모든 역할을 다해주고 있어서 리눅스 커널을 믿는 수밖에 없다. 그러므로, 리눅스 커널에 도입된 해결책이 디바이스 트리(Device Tree)이며, Open Firmware(Abbreviated OF) 혹은 Flattened Device Tree(FDT)라고 언급되기도 한다. Device Tree는 정해진 API가 특정 데이터에 접근하도록 표준화된 Tree 구조체를 사용하도록 한다. 주변장치들의 버스, 주소, 인터럽트, 변수들은 정해진 관례를 지켜서 Device Tree에 표현한다. 디바이스 트리는 커널의 일부분으로서 하드웨어 정보를 추가, 제거,.. 2024. 2. 2. ZRAM 분석 . zram은 memory swap 시, flash가 아닌 ram을 사용하는 방법이다. 이때, block device의 구조를 가지고 동작하며 메모리 압축기법을 사용한다. 자세한 개념은 아래의 링크를 참고하기 바라며, 해당 포스팅 에서는 source code 분석에 대해서 얘기하고자 한다. zram - Wikipedia From Wikipedia, the free encyclopedia Linux module for compressed RAM This article is about the Linux kernel feature. For the memory hardware technology, see Z-RAM. For the Linux kernel compressed swap cache, see zswap.. 2024. 2. 2. ELF 실행 & execve ELF 실행되는 과정 요약 Source Code 분석 먼저 실행가능한 파일(ELF)에 대한 정보를 담게될 linux_binprm에 대해서 살펴보자. /* * This structure is used to hold the arguments that are used when loading binaries. */ struct linux_binprm { char buf[BINPRM_BUF_SIZE]; // ELF Header의 128개 문자르 저장한다 #ifdef CONFIG_MMU struct vm_area_struct *vma; unsigned long vma_pages; #else # define MAX_ARG_PAGES32 struct page *page[MAX_ARG_PAGES]; #endif stru.. 2024. 2. 2. 이전 1 다음