[리눅스] printk 아규먼트 포멧
By Guillermo Austin Kim | 2018년 6월 25일 |
printk에 %로 어떤 형식을 지정할 지 헷갈릴 때가 많습니다.이럴 때는 다음 형식을 참고하면 됩니다.If variable is of Type, use printk format specifier:------------------------------------------------------------ int %d or %x unsigned int %u or %x long %ld or %lx unsigned long %lu or %lx long long %lld or %llx unsigned long long %llu or %llx size_t %zu or %zx ssize_t %zd or %zx s32 %d or %x u32 %u or %x s64 %lld or
리눅스에서 iso 이미지 파일로부터 부팅 가능한 USB메모리 만들기
By 반달가면 | 2017년 2월 13일 |
리눅스 또는 윈도우 iso 이미지 파일로부터 부팅 가능한 USB메모리를 만드는 방법이다. 터미널창에서 명령어로 쉽게 가능하다(데비안/우분투 기준). 우선 USB메모리를 연결한 후, 장치명을 확인하자. 터미널창에서 아래와 같이 입력. # 장치 목록 표시 lsblk 출력된 결과로부터 USB메모리에 대응하는 장치명을 파악한다. 통상 /dev/sdc, /dev/sdd 이런식이 될 것이다. 여기서는 장치명이 /dev/sdc라고 가정해 보자. 만약 해당 USB메모리가 마운트 되어 있다면 해제해야 한다. 디스크 빈 공간을 확인하기 위한 df 명령으로 간단히 확인 가능하다. 만약 마운트되어 있다면 장치명과 마운트된 디렉토리가 표시될 것이다. # 디스크 빈 공간 확인 df # /dev/s
[라즈베리파이] 동기화 - 스핀락(spinlock) Deadlock으로 생기는 문제
By Guillermo Austin Kim | 2019년 1월 6일 |
스핀락 코드를 잠깐 살펴봤는데 뮤텍스와 다르게 상당히 코드 복잡도가 낮습니다. tickets.next과 tickets.owner 두 값으로 스핀락을 획득하는 순서를 콘트롤하죠. spin_lock 함수가 처음 실행되는 시점에 tickets.owner 값을 로컬 변수에 저장하고 전역 tickets.next 값이 업데이트 될 때까지 Busy-wait합니다. 여기서 중요한 포인트는 tickets.owner 값을 로컬 변수 즉 스택 메모리 공간에 저장해서 제어한다는 점입니다. 모든 프로세스들은 각각 스택 공간에서 돌기 때문에 ticket 스핀락을 획득한 순서를 정확하게 파악할 수 있습니다. 낮은 복잡도에 정확하기 까지 합니다. 이렇게 스핀락 함수는 빠른 시간 내에 실행돼야 하는 인터럽트 서비스 루틴에서 공유 데이
인터럽트(2) - 인터럽트 핸들러는 누가 언제 호출하나?
By Guillermo Austin Kim | 2018년 1월 29일 |
인터럽트 핸들러는 누가 언제 호출할까요? 인터럽트가 떴을 때 인터럽트 벡터가 실행되어 인터럽트 핸들러를 호출합니다.인터럽트 핸들러를 호출할 때 프로세스는 정해져 있지 않습니다. 어떤 프로세스가 돌던 인터럽트가 뜰 수 있기 때문입니다. 그럼 인터럽트 핸들러는 누가 호출한다고 대답해야 할까요? 정답은 없지만 인터럽트 벡터라고 말할 수 있습니다. 참고로 인터럽트 벡터는 ARM이 실행시킵니다. 인터럽트가 뜨면 인터럽트 벡터인 __irq_svc 심볼로 시작해서 handle_irq_event_percpu 함수까지 처리됩니다.이후 handle_irq_event_percpu 함수 내 action->handler 함수 포인터가 실행될 때 인터럽트 핸들러를 호출하죠 이 때 파라미터가 해당 인터럽트의 디스크립터와 pri