『2장』 질문: 라즈베리 파이에서 디렉터리에 파일을 저장하거나 이동할 수 없습니다.
By Guillermo Austin Kim | 2020년 6월 20일 |
『디버깅을 통해 배우는 리눅스 커널의 구조와 원리』 책의 저자 김동현입니다. 몇몇 독자분들이 실습을 하시면서 질문을 주셨는데요, 한 가지 공유드릴 사항이 있어 글을 남깁니다.먼저 질문을 소개합니다. 질문 Q); 라즈비안에서 제공하는 파일 관리자를 통해 파일을 저장을 시도했는데, 저장이 되지 않는다. '2.3.3 라즈비안 리눅스 커널 빌드' 절의 53 페이지에서 소개된 'build_rpi_kernel.sh' 라는 이름으로 저장했다. 'rpi_kernel_src' 디렉터리에 저장하려 했는데 다음과 같은 에러 창이 보이면서 build_rpi_kernel.sh이 저장돼지 않는다. Answer A) 리눅스 터미널을 열고 다음과 같이 하시면 됩니다. * root@raspberrypi:/home/pi/r
[리눅스커널][SoftIRQ] 디버깅: ftrace Soft IRQ 이벤트 소개
By Guillermo Austin Kim | 2019년 4월 16일 |
6.12.1 ftrace Soft IRQ 이벤트 소개 이번 시간에 Soft IRQ 실행 흐름을 추적하는 ftrace event를 소개합니다. ftrace는 커널의 주요 동작을 추적하며 이를 이벤트로 정의합니다. Soft IRQ 도 커널의 중요 기능이니 ftrace에서 다음 이벤트를 제공합니다.- softirq_raise: Soft IRQ 서비스를 요청- softirq_entry: Soft IRQ 서비스 실행 시작- softirq_exit: Soft IRQ 서비스 실행 마무리 먼저 ftrace 이벤트를 활성화하는 방법을 알아보고 ftrace에서 각 로그를 분석해보겠습니다. Soft IRQ ftrace 이벤트 켜기 Soft IRQ 이벤트는 다음 명령어로 활성화할 수 있습니다."echo 1 >
[리눅스커널][태스크릿] 태스크릿(struct tasklet_struct)은 어떻게 등록할까?
By Guillermo Austin Kim | 2019년 4월 10일 |
먼저 태스크릿을 등록하는 2가지 방법을 소개합니다.1. 태스크릿 전역 변수 선언 : DECLARE_TASKLET() 혹은 DECLARE_TASKLET_DISABLED() 함수 호출2. 태스크릿 초기화 함수 호출 : tasklet_init() 함수 DECLARE_TASKLET() 혹은 DECLARE_TASKLET_DISABLED() 함수로 태스크릿 등록하기 DECLARE_TASKLET() 혹은 DECLARE_TASKLET_DISABLED() 매크로를 써서 태스크릿을 초기화하는 방법입니다. 태스크릿 전역 변수는 컴파일 타임에 자료구조가 정해집니다.[https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/interrupt.h]1 #define DE
[리눅스커널] 시스템 콜: 유저 공간에서 전달한 문자열 처리 방법
By Guillermo Austin Kim | 2019년 7월 12일 |
유저 공간에서 시스템 콜 아규먼트로 지정한 파일 이름은 커널 공간에 그대로 전달됩니다. 한 가지 예를 들어볼까요?[https://elixir.bootlin.com/linux/v4.19.30/source/fs/open.c]SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode){ if (force_o_largefile()) flags |= O_LARGEFILE; return do_sys_open(AT_FDCWD, filename, flags, mode);} 위 sys_open() 함수 첫 번째 아규먼트로 filename이 전달됩니다.이번에는 다른 예시를 들겠습니다.[https://elixir.bootlin.com/l