Guillermo Austin Kim

Sources

Posts

998 posts

[리눅스 커널] 라즈베리파이 4: 라즈비안 커널 빌드

Guillermo Austin Kim|2020년 5월 15일

'라즈베리 파이 4'에서 실행되는 라즈비안 이미지를 빌드하는 방법에 대해 말씀드리려 합니다. 라즈비안을 빌드하는 명령어는 아래 사이트에서 확인할 수 있는데요. '라즈베리 파이 4'를 위한 라즈비안 빌드 명령어는 다음과 같습니다. cd linuxKERNEL=kernel7lmake bcm2711_defconfig '라즈베리 파이 4'를 위한 라즈비안 빌드 스트립트 파일을 만들어 봤는데요.코드(크로스 컴파일 환경)는 다음과 같습니다. #!/bin/bash export PATH=$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/binKERNEL=kernel7l echo "configure build output path"TO

[리눅스커널] CPU 코어의 주파수(Frequency) 확인하기 - cpufreq_cpu_data

Guillermo Austin Kim|2020년 5월 14일

리눅스 커널에서 CPU Frequency는 성능을 측정할 때 중요한 척도 중 하나입니다.이번 시간에는 리눅스 커널에서 CPU Frequency와 관련된 자료 구조를 소개합니다. cpufreq_cpu_data 선언부 cpufreq_cpu_data는 커널에서 CPU 주파수를 저장하는 중요한 변수입니다. 먼저 cpufreq_cpu_data 변수의 선언부를 봅시다. DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data); 보시다시피 DEFINE_PER_CPU 키워드와 함께 cpufreq_policy 구조체로 선언된 변수임을 알 수 있습니다.즉, CPU 코어 별로 cpufreq_policy 구조체의 정보를 cpufreq_cpu_data 변수가 저장하는 것입니다

[취준생] 임베디드 프로젝트 개발 과정 - SW 인증(버그 잡기)

Guillermo Austin Kim|2020년 5월 13일

From: [취준생] 임베디드 프로젝트 개발 과정 - 브링업이란 많은 임베디드 개발자분들은 브링업을 끝내면 뿌듯해 합니다. 아무 동작도 안하던 보드에서 불이 들어오고 신호가 전송됩니다.그러면서 다음과 같은 생각을 합니다. * 이제 프로젝트를 다 마무리했구나. 이처럼 브링업을 끝내면 프로젝트가 마무리될 단계라 예상합니다. 하지만 브링업은 프로젝트 전체 일정에서 초반 단계일 뿐입니다.프로젝트의 초반 단계라? 잘 감이 안 오죠? 야구를 예로 들어볼까요? 브링업을 끝냈다면 야구의 2회초 정도로 볼 수 있어요. 자, 그럼 2회 말부터는 무엇을 할까요?각 드라이버 별로 브링업이 끝나면 이제부터 SW 인증 테스트를 거칩니다. 여기서 SW 인증 테스트가 무엇일까요? * 구현된 SW가 사이드 이

[리눅스커널] 디버깅: 커널 로그 레벨(/proc/sys/kernel/printk)을 누가 설정하나?

Guillermo Austin Kim|2020년 5월 11일

리눅스 시스템을 구동하기 위해 설정되는 정보는 '/proc/sys/kernel' 폴더에서 확인할 수 있습니다.이번에는 커널 로그 레벨을 저장하는 '/proc/sys/kernel/printk' 파일을 커널의 어느 함수가 변경하는지 확인해보겠습니다. 먼저, '/proc/sys/kernel/printk' 파일에 어떤 값을 쓸 때 호출되는 __do_proc_dointvec() 함수에 패치 코드를 추가하겠습니다. diff --git a/kernel/sysctl.c b/kernel/sysctl.cindex 865152d..423bcc9 100644--- a/kernel/sysctl.c+++ b/kernel/sysctl.c@@ -2440,6 +2440,7 @@ static int do_proc_douintvec_co

[리눅스커널] 유저 프로세스의 레지스터 세트인 struct pt_regs 파악하기

Guillermo Austin Kim|2020년 5월 11일

리눅스 커널에서 sys_enter ftrace 이벤트를 키면 syscall_trace_enter() 함수가 호출된다.syscall_trace_enter() 함수의 첫 번째 인자로 'struct pt_regs *regs' 가 전달되는데 이 정체를 확인해보자. 다음은 syscall_trace_enter() 함수의 구현부이다. int syscall_trace_enter(struct pt_regs *regs, int scno){ current_thread_info()->syscall = scno; if (test_thread_flag(TIF_SYSCALL_TRACE)) tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER); syscall_trace_enter