Guillermo Austin Kim

Sources

Posts

998 posts

[리눅스커널] 비트 마스크를 어셈블리 코드로 빨리 읽는 방법 - HARDIRQ_MASK, SOFTIRQ_MASK, NMI_MASK

Guillermo Austin Kim|2019년 5월 11일

이번에는 비트 마스크를 C 코드가 아닌 어셈블리 코드로 읽는 방법을 소개합니다. in_interrupt() 함수 소개 in_interrupt() 함수는 현재 프로세스가 인터럽트 컨택스트인지 알려주는 기능입니다.[https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/preempt.h]#define in_interrupt() (irq_count()) in_interrupt() 함수 코드를 보면 irq_count() 함수로 치환됩니다.[https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/preempt.h]#define irq_count() (preempt_count() & (HAR

[tegra4i] UI freeze due to RT class 프로세스

Guillermo Austin Kim|2019년 5월 9일

커널 로그는 다음과 같습니다. UI freeze 상태라 강제 커널 크래시를 유발시켜 램덤프를 추출했습니다. [ 7164.614352] tegra sound_card.27: Ply shutdown, devnum 7[ 7165.077580] ------------[ cut here ]------------[ 7165.077807] WARNING: at /root/rpi/kernel/workqueue.c:2904 __cancel_work_timer+0x12c/0x178()[ 7165.087114] Modules linked in: texfat(PO)[ 7165.092596] CPU: 3 PID: 1373 Comm: mmcqd/0 Tainted: P W O 3.10.44+ #1[ 7165.10157

[리눅스][커널] RT 프로세스가 CPU를 많이 점유할 때 개선 패치

Guillermo Austin Kim|2019년 5월 9일

RT 프로세스는 자신이 일을 끝낼 때 까지 CPU를 점유합니다. 따라서, 다른 일반 프로세스들이 실행할 수 있는 기회를 놓치게 됩니다. 이를 방지할 수 있는 흥미로운 패치 코드를 소개합니다.diff --git a/drivers/media/platform/rpi/tasklet_util.c b/drivers/media/platform/rpi/tasklet_util.cindex 2c08e4d..28cd15c 100644--- a/drivers/media/platform/rpi/graphic/tasklet_util.c+++ b/drivers/media/platform/rpi/graphic/tasklet_util.c@@ -15,6 +15,7 @@1 #include 2

[리눅스커널][가상파일시스템] 수퍼블록: 슈퍼블록 정보를 statfs 시스템 콜로 읽는 과정 살펴보기

Guillermo Austin Kim|2019년 5월 8일

슈퍼블록 각 멤버들은 파일시스템에 대한 메타 정보를 저장합니다.유저 공간에서 파일시스템 정보를 알려면 어떤 함수를 호출해야 할까요? 유저 공간에서 statfs() 함수를 호출하면 커널 공간에서 해당 시스템 콜 핸들러 함수인 sys_statfs() 함수를 실행합니다. 예제 코드는 다음과 같습니다.1 #define FILENAME_NAME "/home/pi"2 #define BUFF_SIZE 2563 int main() 4 {5 struct statfs file_sys_info;6 char fname[BUFF_SIZE] = {0,};78 strcpy(fname, FILENAME_NAME);9 12 if(statfs(fname, &file_sys_info)) {13 printf("Unable to s

[리눅스커널][가상파일시스템] 수퍼블록: 슈퍼블록 함수 연산과 시스템 콜 연동 동작 알아보기

Guillermo Austin Kim|2019년 5월 2일

이번 시간에는 슈퍼블록 함수 오퍼레이션이 시스템 콜과 어떻게 연동해서 실행하는지 살펴봅니다. alloc_inode 파일시스템별로 inode 객체를 생성할 때 호출합니다. 파일시스템별 기능별로 파일을 관리하는 메타 정보도 업데이트합니다. [선언부]struct inode *(*alloc_inode)(struct super_block *sb); 파일시스템별로 inode 객체를 생성할 때 호출합니다. 파일시스템별 기능별로 파일을 관리하는 메타 정보도 업데이트합니다. 슈퍼 블락 함수 오퍼레이션으로 alloc_inode 함수 포인터는 다음 alloc_inode() 함수 6번째 줄 코드에서 실행합니다.[https://elixir.bootlin.com/linux/v4.14.70/source/fs/inode.c]1