임베디드 109

Process-2

시스템콜 : 인자오류 철저하게 검사함 > 그래야 커널 손상 down 유저 fork() -> ARM64_sys_clone() -> kernel_clone() -> copy_process()> debug/tracing/cat avilabe_filter_function | grep copy_process>> 유저가 fork() 로 process 생성 할때 벌어지는일 grep 그전에.. 계층구조부터 보자면pid 2571 bash     // 부모 ,기본2720   a.out   // 자식 , 프로그램 실행명 // 이 코드에서 fork() 실행2721     a.out // fork()로 만든 자식 , 순차적임 자, 이제 ftraceLog로 아까 grep 한걸 보자. bash-2571     copy_proces..

Process

process ~= TaskHDD -> 메모리에 로드 후 OS가 관리하는 단위(소스코드,등등) 멀티쓰레딩 : 리눅스 -> 메모장 + vi에디터 + .. Task(process)의 속성을 담은 구조체 -> task_struct Thread : user 가 생성한 가벼운 process            : context switching (Task 전환) 시간 down            : 소속 process 내에 주소공간 ( 전역변수,파일 등)을 공유   Kernel 에서는.. 쓰레드, process 동등하게 관리                             > task_struct 에서 thread 그룹인지 정도만 확인명령어 ps : 터미널 내 process 확인 // PID : process ..

trace32, Driver분석

trace32: sys-down sys-up> vmlinux file in with CrossCompile : (build) PC ( intel, AMD) -> 동작 : ARM  1. PC : 우분투 or WSL 로 리눅스 -> git bc bison flex + a 설치 ,                                                    + crossbuild-essential -armhf :                                                         // h : hard, f : floating  > 수동소수점2. git clon ~~ 으로 가져옴3. build : bcm2709_defconfig : bcm2709에 관련된 컴파일 ..

ftrace

사용 이유0. 버퍼에 씀 > 빠름  // /kernel/debug/tracing cat buffer_size_kb 1. 코드 수정 X (이미 만들어짐)2. printk, dump_stack에 비해 자원소모 적음3. 인터럽트, 스케쥴링, 타이머 등 상세히 볼 수있음    : tracing/events  추적가능한 함수들/sys/kernel/debug/tracing cat available_filter_function | grep  ./set_ftrace.shcat /proc/interrupts ./get_ftrace.sh ftraceLogstask > idle : 쉬는중PID  > 다른 탭에서 ps -e 하면 나옴 process IDCPU : 몇번째 코어 쓰는지 (#p : 4)TIMESTAMP : (초)...

중간정리..

0. SD card -> 이미지 (.img)를 구워서 넣었음     :  uboot 부트로더 , kernel8.img  1. git -> 소스코드 다운 // build.sh2-1. bcm2711_defconfig : mcu마다 컴파일에 필요한 옵션들이 다름2-2. Image Module dtbs(HW) : build// makefile 이용// make menuconfig// /out 에 conf 설정들을 바꾸기위한 ui제공    : out : 결과물들 ( .o 들)>> install.sh  > 하나의 파일로 합쳐짐>cp /arch/arm64/boot/Image  /arch/arm64/boot/Image kernel8.img v2, v3, v4, v5....bootloader 도 바꾸고싶다면..: 컴파일..

volatile

최적화방지!  //16bit 짜리 타이머  uint8 *TIMER = (uint8_t *)0x8020;// 8bit 씩 쪼갬 1.  (uint8_t *) 로 형변환 하는이유   : 0x8020 자체는 숫자임     > 포인터 형태로 바꾸어줘야 해당 주소로 접근 가능          > 0x8020란 주소는 이제 8bit 씩 값을 가르킴 /*uint8_t value[2] = {0x0, 0x1};// 각 요소를 8bit 씩 저장 &value[0] = 0000 0000&value[1] = 0000 0001 //cpu는 메모리를 1byte 씩 접근>uint16_t val = 0x0001;>> (Little Endian)&val = 0x01&val+1 = 0x00 >>>uint16_t *ptr16 = (uint1..

임베디드 2025.02.13

게획) SBC, MCU, FPGA

SBC : 라즈베리파이 ( 파이4 model B )                                                 ::  리눅스 탑제 ( 고급기능)            > 운영체제 탑제(리눅스) , 통신, 어플리케이션 등 고급 기능 사용 ::   but 고속 연산 떨어짐FPGA : zynq-7000 시리즈 (FPGA + ARM)              > FPGA : 고속 병렬 데이터/ 신호 > HW  가속                           :: with   matlab, simulink ,verilog           + > ARM   : 제어,통신, 파일관리     > HW ->  SW (RTOS) 제어  :: RTOS 탑제 (실시간처리) with c++    >..

임베디드 2025.01.29

스타트업 코드 분석

0.  링크 스트립트프로그램의 메모리 배치를 정의.text, .data, .bss 등의 섹션 위치 및 크기를 지정ROM, RAM 주소 지정벡터 테이블, 스택, 힙의 위치를 지정     스타트업 코드시스템이 부팅될 때 초기화 코드 실행벡터 테이블 설정.data 섹션을 RAM으로 복사.bss 섹션을 0으로 초기화스택과 힙을 설정main() 함수 호출 1. .bss 섹션 > 초기화안한 변수에 0 을넣어줌 >  안해주면 쓰레기값이 들어감    > 초기화안한변수는 .bss 안에 넣어야함 2. Vector Table ~= 함수포인터들의 배열 Reset 부터 Main()으로 가는 과정!/*STM32 Programmaing manual 참고 + startup code, linker script, Debug > .map..

고추건조기 with Thread (FreeRTOS)

0. AWS (Amazon FreeRTOS)   :: 디바이스와 (stm으로만든) 클라우드와의 연결      > 클라우드에 있는걸 device로 왔다갔다    +   device > cloud > 다른 내 폰과같은걸로 정보 확인 등등 >> ex) 온도 모니터링 program      stm32에서 온도 센서 > 온도측정 > 너무 높거나, 낮을시 경고 신호 발생     > MQTT 프로토콜 :: AWS Iot Core 로 전송 ex) LOW_TEMP_ALERT      >  AWS SNS        :: AWS Lambda 또는 AWS IoT Rules Engine       >> 핸드폰 APP, 이메일 등으로 알려주는 program     >> AWS IoT SiteWise, AWS QuickSight..