전체 글 287

리눅스 커널 소스의 구조 ( Linux Kernel Structure )

arch 아키텍처별로 동작하는 커널 코드가 있음 - arm : 32bit 계열 arm 아키텍쳐 - arm64 : 64bit 계열 Arm 아키텍쳐 - x86 : 인텔 x86 아키텍쳐 include 커널 코드 빌드에 필요한 헤더 Documentation 커널 기술문서 kernel 커널의 핵심 코드가 있는 폴더 다음과 같은 하위 디렉토리 irq 인터럽트 관련 sched 스케쥴링 코드 power 커널 파워매니지먼트 locking 커널 동기화 관련코드 printk 커널 콘솔 관련 코드 trace ftrace 관련 코드 위 디렉토리에는 아키텍처와 무관한 커널 공통 코드가 있고, 아키텍쳐 별로 동작하는 커널 코드는 arch/*/kernel 에 있습니다. 라즈비안의 경우 ARMv7 아키텍쳐 관련 코드는 arch/arm..

Unix & Linux/Kernel 2022.07.07

커널 컴파일 디버깅 노트 (2) - 전처리 코드 생성

리눅스 커널을 빌드하는 과정에서 전처리 코드를 생성하는 방법은 아래와 같다. 리눅스 커널 소스를 분석하다보면 수많은 매크로를 만난다. 이러한 이 매크로가 소스 분석의 걸림돌 중하나이다. 전처리 코드는 이러한 매크로를 모두 풀어서 표현한다. 따라서 훨씬 편하게 소스코드로 분석할 수 있으며, 리눅스 커널 코드 를 분석할 때는 전처리 코드를 함께 봐야한다. 전체 전처리 파일을 추출 linux 폴더의 makefile 수정 -save-temps=obj \ 을 위와 같이 Makefile 을 수정하면된다. 그리고 다시 커널 빌드하면 전처리코드가 out폴더에 생성됩니다. /out/kernel/sched 에 들어가보면 *.i 뿐만아니라 *.s 파일도 생성되어있습니다. 용량은 5G 정도 늘어납니다.

Unix & Linux/Kernel 2022.07.07

라즈베리파이3, BCM2709 ? 뭘까?

BCM2709 커널 컴파일하다보면 BCM2709 라는 뭔가 칩셋명같은 것이 보인다. 무엇일까? 구글에서 뭔가 실마리가 될만한 표를 찾았다. 하드웨어칸에 BCM2709 라고있다 . CPU 명일지도 몰랐다고 생각했는데 CPU 는 브로드컴 BCM2837 을 사용한다. 쿼드코어 64bit 그러면 BCM2709 는 어떤칩일까? 찾았다. 바로 Base 가 되는 칩? 이라는 것이다. BCM2709 에 살을 붙여서 2837 이 나왔다는 이야기 실제로 불일치는 실리콘 및 칩 패키지의 지정 때문입니다. 원래 BCM2708로 알려진 실리콘 다이가 있었고 모든 초기 개발은 이를 중심으로 이루어졌습니다. 256MB DRAM이 있는 스택형 9x9 패키지에서는 BCM2763으로 알려져 있습니다. (스택은 말 그대로 프로세서 상단에..

커널 컴파일 디버깅 노트 (1) - O=$OUTPUT 추가시 error

아래와 같이 O=$OUTPUT 을 추가하면 아래와 같이 Error 가 발생 왜그럴까? O=$OUTPUT 만 빼면 괜찮다 echo "kernel build" make O=$OUTPUT -j4 zImage modules dtbs -j4 2>&1 | tee $BUILD_LOG 위에 설명한대로 linux 폴더에서 make mrproper하면된다 make mrproper : 이전의 컴파일시 설정되었던 설정을 제거 (최초 커널 컴파일시나 이전 설정한 컴파일 환경을 재사용한다면 생략 가능 ) make menuconfig : 텍스트 환경 혹은 make xconfig : x윈도우 환경 혹은 make oldconfig : 기존의 환경을 불러와서 새로운 것만 설정 make dep : 설정한 영역의 의존성 검사 make cl..

Unix & Linux/Kernel 2022.07.05

리눅스 커널 용어 정리 (1) - zImage , modules , dtbs

zImage Kernel Image 커널 바이너리, 보통 make 명령어로 커널을 빌드하면 만들어진다. 자동 압축 해제되는 Linux 커널 이미지의 압축된 버전 커널이 하나의 파일로 디스크에 저장되어 있는 것 커널은 원래 파일에 저장되어있는 것이 아니라 컴퓨터가 꺼지기 전까지는 메모리에 존재 부트로더에 의해 로드될 최종적인 복합 커널 이미지 Modules 커널에서 사용되는 네트워크 드라이브를 모두 가지고있으면 발생하는 비효율적인 문제를 해결하기위해 모듈이라는 파일로 커널 외부에 별도로 가지고있음으로써 새로운 장치 추가시 커널 바꿀필요없이 해당모듈만 적재후 제거한 후 사용 가능 모듈 관련 명령어 리눅스 커널에 적재된 모듈 정보 출력 lsmod 모듈에 대한 정보 출력 modinfo [module name] ..

Unix & Linux/Kernel 2022.07.04

Raspberry Pi Zero, 초소형 캠 만들어보기 (1) - 일단 따라하기

일단 따라하기위해서는 알리익스프레스에서 구입한 저렴한 카메라 모듈 구매링크 : [link] 라즈베리파이의 sd카드 이미지를 write 한 후 raspi-config 를 사용해 카메라를 활성화 그리고 스틸이미지가 잘 출력되는지 한번 보자 raspistill -o image.jpg 출력이 잘된다면 이제 vlc 를 설치하자 apt-get install vlc cvlc v4l2:///dev//video0:width=640:height=480:fps=30:chroma=mjpg --noaudio --no-sout-audio --sout '#standard{access=http, mux=mpjpeg,dst=:8090/}' 부팅시마다 자동으로 vlc 서버 동작하려면 rc.local 으로는 안된다. 이유는 아직 모르겠다..

카테고리 없음 2022.06.24

(SSD1306) Adafruit_SSD1306 안될 때 ( 다른 Package 우회 사용)

SSD1306 드라이버를 사용하는 저렴한 OLED 를 사용하는분들이 많습니다. 특히 파이썬으로 사용시에 간단하게 pip 으로 Adafruit_SSD1306 패키지 설치하고 바로 사용이 가능했습니다. 2022년 6월 기준으로 라즈베리파이4에서 동작하지 않습니다. 구글링해보니 대체 패키지가 배포되고 있습니다. https://pypi.org/project/adafruit-circuitpython-ssd1306/ adafruit-circuitpython-ssd1306 CircuitPython library for SSD1306 OLED displays. pypi.org pip3 install adafruit-circuitpython-ssd1306 상세설명은 github 에 자세히 나와있으니 따로 설명하는게 도움..