리눅스

포스트: 556|아이템:리눅스(554)
Tags

Posts

556 posts

[라즈베리파이] 라즈비안(Raspbian) 리눅스 커널(LinuxKernel) 빌드하기

Guillermo Austin Kim|2019년 5월 14일

이번 절에서는 라즈베리파이에서 라즈비안 리눅스 커널 소스 코드를 내려받고 빌드하는 방법을 알아보겠습니다. 필자는 라즈베리파이를 쓸 때 다음 명령어로 root로 변경해 커널 빌드를 합니다.$ sudo su 명령어 입력 과정에서 불필요한 권한 설정을 피하기 위해서입니다. 라즈비안 커널 소스 코드 내려받기 리눅스 커널 소스 코드를 다운로드 받는 방법을 소개합니다. 다음 명령어를 입력하면 라즈비안 최신 커널 소스를 내려 받을 수 있습니다.git clone --depth=3000 위 명령어를 라즈베리파이 터미널에서 입력하면 다음 화면을 볼 수 있습니다.root@raspberrypi:/home/pi/RPi_kernel_src# git clone --depth=3000 into 'linux'...remote

[리눅스커널] 비트 마스크를 어셈블리 코드로 빨리 읽는 방법 - 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

리눅스에서 특정 디렉토리를 다른 디렉토리에 마운트(mount)하기 (--bind 옵션)

반달가면|2019년 5월 11일

특정한 디렉토리를 다른 디렉토리에 마운트(mount)해서 양쪽 디렉토리가 같은 곳으로 연결되도록 할 수 있다. mount에서 --bind 옵션을 사용하면 된다. 예를 들어 /home/john/data 디렉토리를 /home/jane/data_from_john 디렉토리에 연결하는 경우다. mount를 사용하므로 심볼릭 링크(symbolic link)와 달리 루트 권한을 필요로 한다. # /home/john/data 디렉토리를 /home/jane/data_from_john에 마운트 sudo mount --bind /home/john/data /home/jane/data_from_john 마운트를 해제하려면 umount를 사용. # 마운트 해제 sudo umount /home/jane/da

[리눅스커널][가상파일시스템] 수퍼블록: 슈퍼블록 정보를 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