Kernel, menuconfig <raspberrypi 3> menuconfig 도구를 올바로 컴파일하기 위해서는 ncurses 개발 헤더가 필요 sudo apt install libncurses5-dev 그리고 cd linux KERNEL=kernel7 make menuconfig Unix & Linux/Kernel 2022.10.27
리눅스 커널, 프로세스 란 - 작성중 - 프로세스라는 용어는 추상적일 수 있다. 프로세스란 간단하게 말해서 리눅스 시스템 메모리에서 실행 중인 프로그램을 말한다 스케쥴링 대상인 타스크 와 유사한 의미로도 쓰인다. 다수의 프로세스를 실시간으로 사용하는 기법을 멀티프로세싱이라고하고, 같은 시간에 여러 프로그램을 실행하는 방식을 멀티타스킹이라고 한다. 리눅스 개발자 입장에서 프로세스는 무엇일까? 리눅스 시스템 메모리에 적재되어 실행을 대기하거나 실행하는 실행 흐름을 의미 - 프로세스가 실행을 대기한다면 실행할 때 어떤 과정을 거칠까? - 프로세스는 어떤 구조체로 식별할까? 프로세스를 관리하는 자료구조이자 객체를 태스크 디스크립터 (Task descriptor) 라고 부르고 task_struct 구조체로 표현 이 구조체에 프로세스가 쓰는 메모리 리소스.. Unix & Linux/Kernel 2022.07.13
Kernel log (커널로그) 보는 방법 , domes "/var/log/dmesg" : 부팅하는 동안 로그 기록 하는 파일 dmesg 원하는 내용 검색시 예를들어 sshd dmesg | grep -i sshd Unix & Linux/Kernel 2022.07.12
ftrace 디버깅 노트(1), 샘플 pid 1723 인 cat 프로세스가 rpi_get_interrupt_info 함수를 호출한다. 5번째 줄 seq_read() 함수에서 show_interrupts() 함수를 호출 했다. 10번째 줄 sys_read() 함수가 호출됐으니 유저공간에서 read 시스템 콜을 실행했다. Unix & Linux/Kernel 2022.07.11
objdump 바이너리 유틸리티 GNU 바이너리 유틸리티의 일부로서, 라이브러리, 컴파일된 오브젝트 모듈, 공유 오브젝트 파일, 독립 실행파일등의 바이너리 파일들의 정보를 보여주는 프로그램 사실 컴파일된 o 파일은 바이너리 어셈으로 본다는것인데 이것은 하이레벨 리눅스 개발자가 되면 공부하도록 합니다. Unix & Linux/Kernel 2022.07.07
리눅스 커널 소스의 구조 ( 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
커널 컴파일 디버깅 노트 (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
리눅스 커널 용어 정리 (2) - make modules_install modules The default target for external modules. It has the same functionality as if no target was specified. modules_install Install the external module(s). The default location is /lib/modules//extra/, but a prefix maybe added with INSTALL_MOD_PATH INSTALL_MOD_PATH Above are the default directories but as always some level of customization is possible. A prefix can be added to the installation.. 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