본문 바로가기

Tech/linux

(22)
linux patch 업스트림 방법 (B4) 리눅스는 워낙 다양한 사람들이 다양한 방식으로 기여를 하기 때문에 특정 방법을 강제 하지 않는다. 그대로 대중적?인 기존 패치를 보내는 방법은 커널 ./script 디렉토리 밑에 있는 체크 패치와 체크 메인테이너 스크립트를 통해서 패치를 점검하고, 관련 메인테이너에게 메일을 보낸다. 하지만 초보자의 경우 실수하는 경우가 많고, 하나하나 정리하기도 어렵다.최근 b4를 사용하였는데 매우 간단하고 잘만든 툴이다. 만약 리눅스 패치를 보내야하는데 익숙하지 않다면,꼭 b4 prep, b4 send를 통해서 패치를 보내도록 하자. https://www.youtube.com/watch?v=QBR06ml2YLQ
Hailo AI pci driver 빌드 요즘 AI 매우 중요해지면서 SoC에서 지원하지 않고 PCI형태의 AI 가속기들이 나오고 있다. 그중 Hailo-8 가 많이 사용되는 듯 하다.https://hailo.ai/products/ai-accelerators/hailo-8-ai-accelerator/ AI Processor Hailo-8 For Edge Devices | Up to 26 Tops HardwareThe Hailo-8 AI processor, with 26 TOPS hardware, surpasses other GPUs for machine learning. With unmatched efficiency in a penny-sized space.hailo.ai 드라이버 코드가 open 되어 있지만, 아쉽게도 upstream형태는 아..
linux drm debug message 활성화 DRM 서브시스템 코드를 보면 drm_dev_debug_kms 등 디버그 메세지를 print 할 수 있는 명령어들이 있다.이를 활성화 시키면 print가 되는데 방법은* Dynamic debug가 off될때 기준으로, on이라면 dynamic debug control file을 조정해야할 수 도 있다. 1. dmesg 출력 레벨을 debug로 높여야한다. (dmesg -n 8)2. echo 0xf > /sys/module/drm/parameters/debug 으로 하면 된다. 0xf 의 의미는 DRM은 너무 크고 방대하기 때문에, 코드에서 특정 영역을 구분하였다.drm_dev_debug_kms에서 kms는 kms debug bit을 키면 kms 디버그 메세지만 출력되게 된다. 각 비트는 소스코드로 보는 ..
rootfs 만들기 만약 특별한 이유가 있지 않다면 buildroot를 사용하면 된다.이후 debian등을 직접 만들고 싶다면. 1. dd를 이용해서 이미지 파일 만들기.2. mkfs를 이용해서 img파일을 파일시스템으로 만들기.3. loop mount를 통해서 host에 마운트4. 이후 target rootfs을 마운트 된 곳에 설치 (debian의 경우 debootstrap)5. unmount
Kernel driver upstream 순서 내가 느낀 몇가지 중요한 사실들 1. BSP작업이 안된 드라이버는 시도 안하는 것이 좋다.2. clock, power, regulator, irq 등 서브시스템에 기본적인 사항은 체크하기도 어렵고,코드만 보기보다는 물어볼 사람이 있어야한다.3. data sheet가 있어도 서브시스템 도메인이 없으면 정말 쉽지 않다. (data sheet가 정보가 많이 누락되어있는 경우가 많다.)4. 계획을 먼저 정하고 시작해야 한다. + 만약 여러개의 드라이버를 구현해야 한다면,clk, memory, irq가 기본적으로 완벽해야하고, serial, usb 순으로 작업하는 것이 좋다.
serial minicom terminal이 깨져서 나올 경우 이런 경우 확인해야할 것은 크게 2가지이다. 1. minicom 포트, baud rate, hardware control flow 등 을 맞추기보통은 115200에 하드웨어 컨트롤 등은 모두 끄는 방식을 사용한다.포트가 맞는지 꼭 확인할 것. 2. 다른 serial cable로 테스트해보기.이건 전혀 생각 못했어서 엄청 고생했었다. (parity도 수정해보고 드라이버 코드만 계속 봤음..)특징은 일정 시간동안은 긴 텍스트도 엄청 잘 나오지만, 갑자기 어느순간 문자들이 깨지면서 (부분적으로) 작동이 잘 안되는 것이다. serial 케이블은 오래되면 이런 현상이 나타나기도 한다.특히 init console의 경우는 드라이버 디버깅도 쉽지 않기 때문에 일단 다른 케이블로 확인해보는 것을 추천한다.
kernel module_platform_driver 드라이버를 개발하다보면, 처음은 보통 모듈로 시작하게 된다.module_platform_driver 의 경우 몇가지 조건이 있는데, 1. dt에 compatible에 맞는 디바이스가 존재해야한다.2. .c 파일에서 dt의 경우 MODULE 매크로로 감싸야한다. 역시 가장 좋은 방법은 기존에 존재하는 비슷한 드라이버를 참고하는 것이 좋다.
Linux kernel dynamic debug 리눅스 커널 드라이버를 개발하다보면 dev_dbg가 안나오는 경우가 있다.이런경우 몇 가지 방법을 시도해야한다. 1. Dynamic debug요즘 많이 사용되는 방식으로 기존 전통적인 방식 대비 깔끔하지만 여러가지 설정이 필요하다. config에서 dynamic_debug를 켜주고 빌드하여야 한다.이후 debugfs 를 mount 한 후,/dynamic_debug/control 에 원하는 파일을 추가로 기술해주어야 한다. (이미 써져있는 경우도 있음) 2. Traditional debugdev_dbg의 경우 dynamic_debug가 기본적으로 off이다. (on 일 경우 전통적인 방식은 안먹힘.)보통 2가지를 해주면 되는데, 본인이 원하는 드라이버에 (.c or .h)#define DEBUG 매크로 정..