Reboot - Kernel Rebooting(커널 리부팅) Sequence
By Guillermo Austin Kim | 2017년 12월 29일 |
보통 시스템이 리부팅될 때 동작에 대해 상세히 다룬 글이 없는 것 같아요.그래서 유저 스페이스에서 reboot 시스템 콜을 수행하면 어떤 흐름으로 시스템이 리셋되는지 살펴볼께요. 가끔 시스템이 리부팅하는 과정에서 락업이나 커널 크래시가 발생하거든요. 이럴 때 어떤 흐름으로 리부팅 되는지에 대한 정보를 알면 어느 포인트에서 디버깅을 해야 할 지 빨리 파악할 수 있어요. sys_reboot이란 함수는 아래 코드로 정의되어 있구요. kernel_restart() 함수가 호출되요. SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, void __user *, arg){ struct pid_namespace *pid_ns = task_act
[라즈베리파이] 라즈베리 파이에서 언어 설정 따라해보기
By Guillermo Austin Kim | 2020년 1월 6일 |
대부분 리눅스 개발을 할 때는 터미널로 리눅스 명령어를 입력합니다. 이 정도로 라즈비안을 설정해도 개발하는 데 문제는 없지만 라즈비안에 설치된 크롬 브라우저를 쓰려면 언어를 설정해야 합니다. 라즈비안 메뉴를 실행해 언어(Locale) 설정을 하겠습니다. 그림 2.30과 같이 터미널에서 raspi-config 명령어를 입력합니다. 그림 2.30 터미널에서 raspi-config 명령어 입력 그럼 다음과 같은 화면이 나타납니다. 그림 2.31 라즈베리 파이 소프트웨어 설정 도구 여기서 ‘4 Localisation Options’ 메뉴로 이동해 키보드로 엔터를 입력합니다. 그림 2.32 언어 설정 메뉴로 이동 화면이 바뀌면서 설정 가능한 언어 목록이 나타납니다. 그림 2.33 언어 설정
in_interrupt 매크로
By Guillermo Austin Kim | 2017년 5월 13일 |
커널이나 드라이버 코드 리뷰를 하는 도중에 preempt_add, preempt_sub 그리고 in_interrupt 함수를 자주 마주칩니다. 이 함수들의 사용 예와 구현부에 대해서 좀 더 짚어 보도록 하겠습니다.in_interrupt 매크로의 역할을 간단히 말하면, 현재 실행 중인 코드가 process context 혹은 interrupt context 상에서 돌고 있는 지 알려줍니다. process context 혹은 interrupt context의 개념은 여러 리눅스 커널 교재에서 마르고 닳도록 설명하고 있는데요, 아래 스택 트레이스를 보면 간단히 파악할 수 있습니다. __irq_svc(asm) -- unwind_backtrace() 사이에 보이는 함수(붉은색으로 마킹)들은 irq context에서
[라즈베리파이] 스케줄링: 프로세스 상태 변화 관리
By Guillermo Austin Kim | 2019년 2월 6일 |
프로세스 상태 변화프로세스 상태 변화에 대해 알아보겠습니다. 프로세스 상태를 아는 것 보다 프로세스 상태가 변경될 때 세부 동작을 이해하는 것이 더 중요합니다. [1] 실행 대기 -> CPU실행 중프로세스가 생성된 다음 바로 TASK_RUNNING(실행 대기) 상태로 바뀌면서 자신을 런큐에 Enqueue 합니다. 스케줄러가 RUNNING_TASK(실행 대기) 프로세스 중에서 우선 순위가 가장 높은 프로세스를 선택한 다음 CPU에서 실행시킵니다. 프로세스가 CPU를 점유하면서 실행하기 위해서 먼저 TASK_RUNNING 상태로 변경해야 합니다. 실행 후보 프로세스 리스트가 되는 것입니다. 스케줄러에 의해 선택되기 위해 런큐에 Enqueue된 다음 실행 대기 상태를 관리하는 연결 리스트에 등록하는 것