카테고리
책과 영화

리눅스 커널의 구조와 원리

isbn: 9791158391980 저자가 디버깅, 커널을 강조하다보니, 제목이 너무 길어졌다. 다행히 초심자가 쉽게 이해할 수 있는 내용이다. 책 2권이다 보니 사기 아까웠지만, 읽고나면 살만한 책이다. 이 책이 자세하게 설명하여 커널이 어떻게 동작하는지 알 수 있다. 내용이 인터넷에도 있겠지만, 내가 찾는 수고를 저자가 했고, 틀린 내용을 저자가 걸러줬다. 이렇게 보면 지출할 만한 가격이다. 20년 전 리눅스를 시작하려 […]

카테고리
책과 영화

철까마귀의 날들

나온 지 10년 된 다큐를 유투브로 볼 수 있다.한시간을 보면 방글라데시 치타공 선박 해체 노동자가 어떻게 살아가는지 알게된다. 아동 노동, 위험한 작업 환경, 치명적인 석면 취급 등 인권 문제를 제기할 수 있다. 그러나 치타공 선박 해체 노동자가 방글라데시 내 다른 업종보다 돈벌이가 좋다고 말하기 때문에 단순하게 생각할 수 없다. 현실적으로 사업주가 인권을 보장하지 못하니, 인권 […]

카테고리
생활코딩

spinlock, mutex 실습

모듈을 로딩하면 kernel thread부터 만들어야 한다. 같은 책 초반에 나왔는데, 다시 보니 기억할 수 없다. 스레드를 만든 후 함수와 데이터를 넘겨야 하는데, 데이터가 void 포인터다. struct로 캐스팅 하고 싶은데, 에러가 났다. kernel 코드를 보고 괄호를 몇 번 붙였다. 아! ㅅㅂ. 구글 찾아보기보다 시(간)성비가 더 좋다. spinlock을 만든 후 초기화 하지 않으면, 사용할 수 없다. kernel에 […]

카테고리
생활코딩

timer 실습

kernel timer를 실습했다. callback 함수 argrument로 timer를 가지고 있는 구조체 데이터를 전달할 수 있다. work queue와 같은 방식이다. 커널 특정 버전부터 이런 식으로 변경되었는 듯 하다. 타이머가 만료되면 다시 등록하도록 했다. https://embetronicx.com/tutorials/linux/device-drivers/using-kernel-timer-in-linux-device-driver/ https://stackoverflow.com/questions/14953871/how-to-pass-custom-argument-to-linux-timers-function

카테고리
생활코딩

workqueue 실습

리눅스가 work queue를 다양하게 사용한다. 나는 초짜라 DECLARE_WORK와 INIT_WORK를 구분할 수 없었다. DECLARE_WORK가 work struct를 전역 변수로 선언한다. 여러 work로 같은 데이터에 접근할 수 있다. workqueue funtion() 파라미터로 work struct를 넣는데, 여기로 work를 전달하면 된다. 코드가 넝마조각이 되고 있다. 모듈을 로딩하고 인터럽트를 만들면 schedule_work로 등록한 workqueue_fn을 실행한다. 파일을 오픈하면 같은 데이터를 다른 work로 index를 접근할 […]