리눅스커널
Posts
154 posts[리눅스커널][디버깅] printk에 대해서
printk printk는 printf와 유사한 기능입니다. printf는 윈도우 콘솔 프로그램이나 리눅스 시스템 프로그램에서 로그를 출력합니다. 마찬가지로 printk() 함수를 호출하면 커널 로그를 볼 수 있습니다. printk 를 커널 함수에 적절히 추가하면 유용한 디버깅 정보를 얻을 수 있습니다. 리눅스 커널 핵심 함수도 printk를 이용해 시스템 정보를 출력합니다. 커널 핵심 코드에서 printk를 쓰는 예시 코드를 소개합니다.[https://elixir.bootlin.com/linux/v4.14.70/source/arch/arm/kernel/process.c]01 void __show_regs(struct pt_regs *regs)02 {...03 printk("pc : [<%08l
[리눅스커널][디버깅] 커널 디버깅이란 무엇인가?
디버깅은 '디버그'와 'ing' 합성어로 버그를 잡는 과정을 뜻합니다. 누군가 '디버깅을 하고 있다.' 라고 말하면 '버그를 수정하고 있다.'고 볼 수 있습니다. 이번 절에서 디버깅 방법을 소개하기 전 디버깅이 중요한 이유를 다음 관점으로 알아보겠습니다. 문제 해결 능력 커널 코드 학습 능력 필자는 디버깅을 단지 버그를 잡는 과정으로만 보지 않습니다. 리눅스 커널과 드라이버가 정상 동작할 때 자료구조와 함수 호출까지 파악하는 과정을 디버깅이라고 생각합니다. 그 이유를 더 알아볼까요? 디버깅은 문제 해결을 키우는 지름길 신입 개발자들은 실전 리눅스 개발에서 어떤 업무를 하는지 궁금해합니다. 임베디드 리눅스는 ‘클라우드 서버’, ‘휴대폰’, ‘자동차’ 까지 다양한 분야에서 쓰고 있습니다. 따라서 실전
[리눅스커널][스케줄링] 크래시 유틸리티로 컨택스트 스위칭 디버깅하기
크래시 유틸리티로 컨택스트 스위칭 디버깅하기 이번에는 크래시 유틸리티를 활용해 컨택스트 정보를 확인하겠습니다. 다음 정보는 ARM 코어에서 실행 중인 프로세스의 레지스터 세트입니다.pc : [<80f65224>] lr : [<80f65bcc>] psr: 0x80f655acsp : 0x9b7dfce8 ip : 0x9b7dfd74 fp : 0x9b7dfd64r10: 0x0 r9 : 0x9f89ea00 r8 : 0x9db8b200r7 : 0x81709294 r6 : 0x9eb07000 r5 : 0x828ea000 r4 : 0xa6b46780r3 : 0x00000000 r2 : 0x036db918 r1 : 0x00000089 r0 : 0x7
[리눅스커널][스케줄링] ftrace로 컨택스트 스위칭 동작 확인
ftrace로 컨택스트 스위칭 동작 확인 이전 절에 봤던 ftrace 로그를 살펴보면서 스케줄링 동작을 살펴봅시다.lxpanel-718 [002] d... 7831.739824: sched_switch: prev_comm=lxpanel prev_pid=718 prev_prio=120 prev_state=D ==> next_comm=Xorg next_pid=552 next_prio=120 먼저 메시지 가장 왼쪽 부분을 보겠습니다. CPU2에서 lxpanel(pid-718) 프로세스가 실행 중입니다. 휴면에 진입할 프로세스는 lxpanel(pid=718) 이고 다음에 실행될 프로세스는 Xorg(pid=552)입니다. - struct task_struct *prev: prev_comm=lxpane


